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
SELECTuntuk mencapai data semula dengan klausaGROUP BY,ORDER BY, danHAVING. - Menggunakan fungsi agregat seperti
AVG,SUM,MAX,MIN, danCOUNT. - Membina pangkalan data hubungan dengan menggunakan SQL bagi menyelesaikan masalah pengurusan maklumat.
Hierarki Penormalan Pangkalan Data Hubungan (0NF hingga 3NF)
Penormalan ialah proses berperingkat untuk menghapuskan kelewahan data dan anomali. Setiap tahap membuang satu jenis masalah sehingga skema hubungan menjadi ternormal sepenuhnya.
Tangga Penormalan: 0NF → 1NF → 2NF → 3NF
Setiap langkah menaik menghapuskan satu jenis anomali sehingga skema hubungan bebas daripada kelewahan data.
Penerangan Ringkas
ERD sebagai pelan biru, penormalan sebagai proses pembersihan struktur, dan SQL sebagai bahasa untuk membina serta memanipulasi pangkalan data.
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 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 | 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.
SQL: Bahasa Pertanyaan Berstruktur
SQL digunakan untuk membina skema fizikal pada DBMS seperti MySQL melalui phpMyAdmin, serta memproses dan mencapai maklumat dengan tepat.
| 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 | 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
CREATE TABLE NAMA_JADUAL (
Medan1 JENIS_DATA(saiz) PRIMARY KEY,
Medan2 JENIS_DATA(saiz) NOT NULL,
...
);
ALTER TABLE NAMA_JADUAL ADD NamaMedan JENIS_DATA(saiz);
ALTER TABLE NAMA_JADUAL ADD NamaMedan JENIS_DATA(saiz) AFTER MedanTertentu;
ALTER TABLE NAMA_JADUAL MODIFY NamaMedan JENIS_BAHARU(saiz);
ALTER TABLE NAMA_JADUAL CHANGE MedanLama MedanBaharu JENIS_DATA(saiz);
ALTER TABLE NAMA_JADUAL DROP NamaMedan;
DROP TABLE NAMA_JADUAL;
Sintaks DML Asas
INSERT INTO NAMA_JADUAL VALUES (nilai1, 'nilai2', ...);
INSERT INTO NAMA_JADUAL (medan1, medan2) VALUES (nilai1, 'nilai2');
UPDATE NAMA_JADUAL SET medan = nilai_baharu WHERE syarat;
DELETE FROM NAMA_JADUAL WHERE syarat;
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.
Kes Terpadu: Pangkalan Data Rekod Sukan Sekolah
Contoh berpandukan buku teks (Jadual 2.1.15 – 2.1.18, m/s. 113–115) yang menggabungkan ERD, penormalan, dan SQL bagi menyelesaikan satu masalah pengurusan maklumat sebenar.
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).
| 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.
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)
);
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.
Cuba Jawab Dulu
Cuba jawab sendiri dahulu, kemudian tekan butang untuk menyemak.
Apakah perbezaan utama antara atribut nilai gandaan dengan atribut komposit dalam lakaran ERD?
Atribut nilai gandaan mengandungi lebih daripada satu nilai bagi satu entiti, contohnya seorang guru mempunyai beberapa kemahiran, dengan simbol bujur bergaris dua. Atribut komposit ialah atribut tunggal yang boleh dipecahkan kepada sub-komponen yang lebih terperinci, contohnya alamat dipecahkan kepada jalan, poskod, dan bandar, dengan simbol bujur bercabang.
Nyatakan perbezaan antara fungsi klausa WHERE dan klausa HAVING dalam pertanyaan SQL.
Klausa WHERE digunakan untuk menapis rekod atau baris individu sebelum sebarang operasi pengelompokan berlaku. Klausa HAVING digunakan khusus untuk menapis kumpulan data selepas arahan GROUP BY dilaksanakan, terutamanya bersama fungsi agregat.
Mengapakah kebergantungan transitif perlu dihapuskan dalam Bentuk Normal Ketiga (3NF)?
Untuk mengelakkan masalah anomali dan lewahan data apabila atribut bukan kunci bergantung kepada atribut bukan kunci yang lain. Jika data pada atribut penentu berubah atau dipadam, integriti data atribut yang bergantung padanya akan terjejas.
Kesalahan Biasa
- Tertukar simbol atribut. Menggunakan bujur biasa untuk atribut terbitan, sedangkan atribut terbitan mesti menggunakan bujur bergaris putus-putus. Menggunakan bujur biasa untuk nilai gandaan, sedangkan nilai gandaan mesti menggunakan bujur bergaris dua.
- Salah letak kunci asing pada hubungan 1:M. Meletakkan kunci primer bahagian "banyak" ke dalam entiti bahagian "satu". Peraturan yang betul ialah meletakkan kunci primer pihak "satu" sebagai kunci asing ke dalam jadual pihak "banyak".
- Kekeliruan
DROPdanDELETE. MenggunakanDELETE TABLEuntuk membuang struktur jadual, sedangkan arahan yang betul ialahDROP TABLE. MenggunakanDROPuntuk memadam baris rekod, sedangkan arahan yang betul ialahDELETE FROM. - Penggunaan tanda petikan pada SQL. Meletakkan tanda petikan tunggal pada nilai nombor (
INT/FLOAT) atau terlupa meletakkan tanda petikan pada data teks (CHAR/VARCHAR/DATE). - Klausa
WHEREtertinggal. Terlupa meletakkan klausaWHEREsemasa menjalankan arahanUPDATEatauDELETE, menyebabkan seluruh rekod dalam jadual terubah suai atau terpadam serentak.
Salah Faham Konsep
Entiti lemah tidak memerlukan kunci primer langsung.
Entiti lemah tidak mempunyai kunci primer sendiri yang mencukupi kerana kewujudannya bergantung kepada entiti kuat, tetapi ia memerlukan kunci primer daripada entiti kuat digabungkan dengan kunci pembeza atau separa untuk dikenal pasti secara unik.
Fungsi COUNT(NamaMedan) dan SUM(NamaMedan) melakukan tugas yang sama.
COUNT membilang bilangan baris atau rekod yang wujud, manakala SUM menjumlahkan nilai angka berangka yang terkandung di dalam rekod medan tersebut.
Skema jadual 1NF sudah bebas daripada lewahan data.
1NF hanya memastikan tiada atribut kumpulan berulang dan semua nilai adalah atomik. Jadual 1NF masih berisiko mengandungi kebergantungan separa dan transitif yang menyebabkan anomali.
Ringkasan
- ERD ialah model asas pangkalan data yang menggabungkan Entiti (persegi), Atribut (bujur), Perhubungan (permata), dan Kekardinalan (minimum dan maksimum).
- Penormalan ialah kaedah berstruktur mengasingkan jadual bagi mencapai 1NF (nilai atomik, tiada kumpulan berulang), 2NF (bebas kebergantungan separa), dan 3NF (bebas kebergantungan transitif).
- Pemetaan: hubungan 1:1 menyerahkan kunci asing kepada pihak mandatori; hubungan 1:M meletakkan kunci asing pada pihak "banyak"; hubungan M:N menghasilkan jadual gabungan baharu.
- SQL DDL mengurus struktur jadual:
CREATE TABLE,ALTER TABLE ADD/MODIFY/CHANGE/DROP,DROP TABLE. - SQL DML mengurus data rekod:
INSERT INTO,SELECT FROM WHERE,UPDATE SET WHERE,DELETE FROM WHERE. - Fungsi lanjutan SQL:
GROUP BYuntuk pengelompokan,ORDER BY (ASC/DESC)untuk susunan data,HAVINGuntuk penapisan kumpulan, dan 5 fungsi agregat:SUM,MIN,MAX,AVG,COUNT.
Aktiviti Ringkas
A. Kuiz Objektif
1 Antara pernyataan berikut, yang manakah menerangkan syarat utama bagi sesebuah jadual mencapai Bentuk Penormalan Kedua (2NF)?
2 Apakah arahan SQL yang betul untuk mengubah saiz jenis data bagi medan Alamat daripada saiz 15 kepada saiz 20 dalam jadual BARANG?
B. Isi Tempat Kosong
3 Hubungan lemah dalam Rajah Hubungan Entiti (ERD) diwakilkan menggunakan simbol bentuk permata yang bergaris .
4 Untuk menyusun paparan output data pertanyaan SQL daripada nilai tertinggi kepada nilai terendah, kata kunci mesti ditambah pada hujung klausa ORDER BY.
C. Padankan Fungsi Agregat dengan Keterangannya
Seret nama fungsi agregat ke keterangan yang betul. Jika menggunakan telefon, tekan pilihan jawapan dahulu, kemudian tekan kotak padanan.