SAINS KOMPUTER • Tingkatan 5 • Bab 2: Pangkalan Data Lanjutan
2.1 Bahasa Pertanyaan Berstruktur: SQL (Structured Query Language)
Topik ini membincangkan kaedah mereka bentuk dan mengurus pangkalan data hubungan secara teratur. Murid didedahkan kepada Rajah Hubungan Entiti (ERD) sebagai teknik pemodelan data konseptual, proses penormalan data (0NF hingga 3NF) untuk menghapuskan anomali dan kelewahan data, serta sintaks Bahasa Pertanyaan Berstruktur (SQL) merangkumi DDL, DML, fungsi agregat, klausa pengisihan, dan pengelompokan data dalam persekitaran MySQL melalui phpMyAdmin.
Objektif Pembelajaran
- Melakar ERD (Entity Relationship Diagram) yang mengandungi entiti, atribut, hubungan, dan kekardinalan bagi permasalahan yang diberikan.
- Menghasilkan skema hubungan yang ternormal (sehingga 3NF) daripada permasalahan yang diberikan.
- Membina pangkalan data hubungan menggunakan arahan SQL DDL (
CREATE TABLE).
- Menggunakan arahan SQL DML untuk memanipulasi data seperti menyisip (
INSERT), memadam (DELETE), dan mengemas kini (UPDATE).
- Menggunakan pernyataan
SELECT untuk mencapai data semula dengan klausa GROUP BY, ORDER BY, dan HAVING.
- Menggunakan fungsi agregat seperti
AVG, SUM, MAX, MIN, dan COUNT.
- Membina pangkalan data hubungan dengan menggunakan SQL bagi menyelesaikan masalah pengurusan maklumat.
Apakah itu Rajah Hubungan Entiti (ERD)?
Pangkalan data ialah himpunan data berkaitan yang boleh dikongsi bersama oleh pelbagai kategori pengguna. ERD (Entity Relationship Diagram) ialah rajah grafik pemodelan data konseptual yang menggambarkan entiti, atribut, dan perhubungan dalam organisasi.
ERD dilakar terlebih dahulu sebagai pelan biru struktur organisasi data sebelum jadual fizikal dibina dalam DBMS.
Komponen Asas ERD
1. Entiti
Entiti ialah objek atau konsep yang unik dan dikenal pasti dalam persekitaran, diwakili simbol segi empat tepat.
Entiti kuat boleh wujud tanpa bersandar pada entiti lain, contohnya MURID dan GURU. Entiti lemah kewujudannya bersandar pada entiti kuat, diwakili segi empat tepat bergaris dua, contohnya TANGGUNGAN, dan dihubungkan menggunakan hubungan lemah yang diwakili permata bergaris dua.
2. Atribut
Atribut ialah ciri-ciri atau sifat yang memerihalkan sesuatu entiti, diwakili simbol bujur.
Jenis atribut termasuk atribut mudah, atribut bernilai tunggal, atribut nilai gandaan, atribut terbitan, atribut kunci, dan atribut komposit.
Jenis-jenis atribut dalam ERD
| Jenis atribut | Simbol / ciri | Contoh |
| Atribut mudah | Tidak boleh dibahagikan kepada bahagian kecil | Nama, NoKadPengenalan |
| Atribut bernilai tunggal | Satu nilai sahaja bagi satu rekod | Tarikh lahir |
| Atribut nilai gandaan | Boleh mengandungi lebih daripada satu nilai; bujur bergaris dua | Kemahiran |
| Atribut terbitan | Dihasilkan berasaskan atribut lain; bujur garis putus-putus | GajiTahunan = gaji bulanan × 12 |
| Atribut kunci | Unik bagi setiap rekod; teks atribut digariskan | NoKadPengenalan |
| Atribut komposit | Boleh dipecahkan kepada komponen lebih kecil | Alamat → Jalan, Bandar, Poskod |
3. Perhubungan dan Kekardinalan
Perhubungan (Relationship) ialah penyatuan yang menghubungkan antara entiti, dilabel dengan kata kerja dan diwakili simbol permata.
Kekardinalan menunjukkan kuantiti data antara entiti. Kekardinalan minimum ialah nilai minimum data suatu entiti berkait dengan entiti lain, manakala kekardinalan maksimum ialah nilai maksimum data suatu entiti berkait dengan entiti lain.
Jenis notasi kekardinalan (Jadual 2.1.3)
| Jenis | Simbol | Minimum | Maksimum |
| Mandatori Satu | | 1 | 1 |
| Mandatori Banyak | | 1 | Banyak |
| Opsyenal Satu | | 0 | 1 |
| Opsyenal Banyak | | 0 | Banyak |
Model Hubungan Data dan Pemetaan ERD
Model hubungan data diperkenalkan oleh E. F. Codd pada tahun 1970. Data disusun dalam bentuk jadual (hubungan) yang mengandungi medan (atribut) dan rekod.
Ciri-ciri hubungan yang menepati 1NF
Setiap jadual mempunyai nama yang unik; setiap data mempunyai nilai atomik; setiap medan mempunyai nama yang berbeza; setiap rekod adalah unik; susunan atribut dan rekod tidak mempunyai kepentingan logik.
Kunci primer dan kunci asing
Kunci primer ialah atribut unik pengenalan rekod, digaris penuh. Kunci asing ialah kunci primer satu hubungan yang muncul dalam hubungan lain untuk menghubungkan kedua-duanya, digaris putus-putus.
Tiga peraturan pemetaan
1:1 — kunci primer pada bahagian entiti mandatori dijadikan kunci asing pada jadual pihak yang satu lagi. 1:M — kunci primer entiti bahagian "Satu" dimasukkan sebagai kunci asing dalam entiti bahagian "Banyak". M:N — cipta jadual persimpangan baharu yang menggabungkan kunci primer kedua-dua entiti sebagai kunci asing dan membentuk kunci komposit.
Proses Penormalan Data
Matlamat penormalan ialah mengurangkan kelewahan data dan meminimumkan anomali, iaitu anomali sisipan, pemadaman, dan pengemaskinian.
0
0NF (Bentuk Tidak Ternormal) — terdapat kumpulan data berulang atau medan bernilai berganda.
1
1NF (Bentuk Normal Pertama) — menghapuskan kumpulan data berulang supaya semua atribut mengandungi nilai atomik, serta menentukan kunci primer, lazimnya kunci komposit.
2
2NF (Bentuk Normal Kedua) — memenuhi syarat 1NF dan memastikan tiada kebergantungan separa. Atribut yang bergantung sebahagian dipisahkan ke jadual baharu.
3
3NF (Bentuk Normal Ketiga) — memenuhi syarat 2NF dan memastikan tiada kebergantungan transitif. Atribut berkaitan dipisahkan ke jadual baharu.
SQL: Bahasa Pertanyaan Berstruktur
SQL digunakan untuk membina skema fizikal pada DBMS seperti MySQL melalui phpMyAdmin, serta memproses dan mencapai maklumat dengan tepat.
Kategori arahan SQL
| Kategori | Fungsi | Arahan |
| DDL | Mencipta dan mengubah struktur | CREATE, ALTER, DROP |
| DML | Memanipulasi data | SELECT, INSERT, UPDATE, DELETE |
| DCL | Mengawal capaian keselamatan pangkalan data | GRANT, REVOKE |
Jenis data utama dalam MySQL
| Jenis data | Penerangan |
CHAR(n) | Rentetan teks tetap (0–255 aksara) |
VARCHAR(n) | Rentetan teks boleh ubah (0–255 aksara) |
INT(n) | Nombor bulat |
FLOAT(m, d) / DOUBLE | Nombor perpuluhan |
DATE | Format YYYY-MM-DD |
DATETIME | Format YYYY-MM-DD HH:MM:SS |
TIME | Format HH:MM:SS |
Sintaks DDL Asas
Cipta jadual
CREATE TABLE NAMA_JADUAL (
Medan1 JENIS_DATA(saiz) PRIMARY KEY,
Medan2 JENIS_DATA(saiz) NOT NULL,
...
);
Tambah medan
ALTER TABLE NAMA_JADUAL ADD NamaMedan JENIS_DATA(saiz);
ALTER TABLE NAMA_JADUAL ADD NamaMedan JENIS_DATA(saiz) AFTER MedanTertentu;
Ubah suai medan
ALTER TABLE NAMA_JADUAL MODIFY NamaMedan JENIS_BAHARU(saiz);
ALTER TABLE NAMA_JADUAL CHANGE MedanLama MedanBaharu JENIS_DATA(saiz);
Hapus medan dan jadual
ALTER TABLE NAMA_JADUAL DROP NamaMedan;
DROP TABLE NAMA_JADUAL;
Sintaks DML Asas
Sisip data
INSERT INTO NAMA_JADUAL VALUES (nilai1, 'nilai2', ...);
INSERT INTO NAMA_JADUAL (medan1, medan2) VALUES (nilai1, 'nilai2');
Kemas kini dan padam rekod
UPDATE NAMA_JADUAL SET medan = nilai_baharu WHERE syarat;
DELETE FROM NAMA_JADUAL WHERE syarat;
Pertanyaan asas dan susunan
SELECT medan1, medan2 FROM NAMA_JADUAL WHERE syarat;
ORDER BY Medan ASC; -- menaik (lalai)
ORDER BY Medan DESC; -- menurun
Pengelompokan dan fungsi agregat
GROUP BY menggabungkan rekod dengan nilai sama kepada kumpulan kecil. HAVING menapis hasil kumpulan data agregat, berbeza dengan WHERE yang menapis rekod individu sebelum pengelompokan.
Fungsi agregat: SUM(medan) menghitung jumlah keseluruhan nilai angka; MIN(medan) mengembalikan nilai minimum; MAX(medan) mengembalikan nilai maksimum; AVG(medan) mengembalikan nilai purata; COUNT(medan / *) mengembalikan jumlah bilangan baris atau rekod. Kata kunci penamaan semula ialah AS NamaPilihan.
1. Masalah dan pengenalan entiti
Sekolah perlu mengurus rekod penyertaan hari sukan: siapa pesertanya, acara yang diambil, dan pingat yang dimenangi. Daripada senarai rekod sukan sekolah dalam bentuk 0NF (Jadual 2.1.15), entiti PESERTA dan ACARA dikenal pasti. Seorang peserta boleh menyertai lebih daripada satu acara dan satu acara disertai oleh ramai peserta, maka hubungan PESERTA–ACARA ialah M:N yang dipecahkan melalui jadual gabungan KEDUDUKAN (menyimpan pingat).
Skema hubungan ternormal 3NF (Jadual 2.1.18) — kunci primer digaris, kunci asing ditanda
| Jadual | Atribut | Kunci |
| PESERTA | IDPeserta, NamaPeserta, Jantina, RumahSukan, Kategori* | Kunci primer: IDPeserta; kunci asing: Kategori* |
| ACARA | NoAcara, NamaAcara | Kunci primer: NoAcara |
| KEDUDUKAN | IDPeserta, NoAcara, Pingat | Kunci komposit: IDPeserta + NoAcara; kedua-duanya kunci asing |
| KATEGORI_PESERTA | Kategori, Kelas | Kunci primer: Kategori |
* Kebergantungan transitif Kategori → Kelas dipisahkan ke jadual KATEGORI_PESERTA dalam 3NF. KEDUDUKAN ialah jadual persimpangan hasil pemetaan hubungan M:N.
Cipta jadual (DDL)
CREATE TABLE PESERTA (
IDPeserta VARCHAR(4) PRIMARY KEY,
NamaPeserta VARCHAR(30) NOT NULL,
Jantina CHAR(1),
RumahSukan VARCHAR(10),
Kategori VARCHAR(10),
FOREIGN KEY (Kategori) REFERENCES KATEGORI_PESERTA(Kategori)
);
CREATE TABLE KEDUDUKAN (
IDPeserta VARCHAR(4),
NoAcara VARCHAR(4),
Pingat VARCHAR(10),
PRIMARY KEY (IDPeserta, NoAcara),
FOREIGN KEY (IDPeserta) REFERENCES PESERTA(IDPeserta),
FOREIGN KEY (NoAcara) REFERENCES ACARA(NoAcara)
);
Sisip dan capai semula data (DML)
INSERT INTO KEDUDUKAN VALUES ('1000', 'A01', 'Gangsa');
INSERT INTO KEDUDUKAN VALUES ('1000', 'A02', 'Emas');
INSERT INTO KEDUDUKAN VALUES ('2000', 'A02', 'Emas');
SELECT P.NamaPeserta, K.NoAcara, K.Pingat
FROM PESERTA P, KEDUDUKAN K
WHERE P.IDPeserta = K.IDPeserta
ORDER BY P.NamaPeserta;
SELECT IDPeserta, COUNT(*) AS BilanganAcara
FROM KEDUDUKAN
GROUP BY IDPeserta
HAVING COUNT(*) > 1;
Tafsiran hasil pertanyaan
Pertanyaan pertama menggabungkan jadual PESERTA dengan KEDUDUKAN melalui padanan kunci asing P.IDPeserta = K.IDPeserta, memaparkan nama peserta, acara, dan pingat yang disertai, disusun mengikut nama peserta. Pertanyaan kedua mengumpulkan rekod mengikut IDPeserta, mengira bilangan acara bagi setiap peserta menggunakan fungsi agregat COUNT, kemudian klausa HAVING menapis supaya hanya peserta yang menyertai lebih daripada satu acara dipaparkan — dengan data contoh di atas, hanya peserta 1000 (Komala) yang menyertai 2 acara, manakala peserta 2000 hanya menyertai satu acara. Keputusan ini menjawab persoalan asal: siapa peserta paling aktif dalam hari sukan.