Tugas IV
Normalisasi Pada Database
A. Pengrtian Normalisasi Database
Normalisasi database biasanya jarang dilakukan dalam database skala kecil, dan dianggap tidakdiperlukan pada penggunaan personal. Namun sei ring dengan berkembangnya informasi yang dikandung dalam sebuah database, proses normalisasi akan sangat membantu dalammenghemat ruang yang digunakan oleh setiap tabel di dalamnya, sek aligus mempercepat proses permintaan data. Berikut ini dipaparkan met odologi logis sederhana untuk menormalkan model data dalam sebuah database, diiringi contoh pembuatan database untuk tugas-tugas matakuliah dalam sebuah fakultas (fiktif) dengan atribut yang disederhanakan.
Proses normalisasi model data dapat diringkas sebagai berikut:
1. Temukan entitas-entitas utama dalam model data.
2. Temukan hubungan antara setiap entitas.
3. Tentukan atribut yang dimiliki masing-masing entitas.
Normalisasi model data dilakukan dengan mengikuti langkah- langkah sederhana, mengubahnya agar memenuhi apa yang disebut sebagai bent uk normal pertama, kedua, lalu ketiga secara berturutan.
Pada proses normalisasi terhadap tabel pada database dapat dilakukan dengan tiga tahap normalisasi antara lain :
1. Bentuk Normal ke Satu(1NF)
Syaratnya sebagai berikut :
- Tidak ada set atribut yang berulang atau bernilai ganda.
- Telah ditentukannya primary key untuk tabel atau relasi.
- Tiap atribut hanya memiliki satu pengertian.
- Tiap atribut yang dapat memiiki banyak nilai sebenarnya menggambarkan entitas atau relasi yang terpisah.
2. Bentuk Normal ke Dua(2NF)
Syarat sebagai berikut :
- Bentuk data telah memenuhi kriteria bentuk normal ke satu.
- Atribut bukan kunci(non-key attribute) haruslah memiliki ketergantungan fungsionalsepenuhnya pada primary key.
3. Bentuk Normal ke Tiga(3NF)
Syaratnyasebagai berikut :
- Bentuk data telah memenuhi kriteria bentuk normal ke dua.
- Atribut bukan kunci(non-key attribute) tidak boleh memiliki ketergantungan fungsional terhadap atribut bukan kunci lainnya
- Seluruh atribut bukan kunci pada suatu relasi hanya memiliki ketergantungan fungsional terhadap primary key di relasi itu saja.
B. Jenis-jenis Antar Entitas
- Relasi 1-1.
Relasi ini jarang ditemui dala m model data yang benar, sehingga saat Anda menemukannya, kemungkinan besar hal itu berarti masih ada yang belum sempurna dari model data Anda; relasi 1-1 sering bera rti kedua entitas tersebut sebenarnya adalah kesatuan, satu entitas tunggal. Kemungkinan lain adalah relasi 1-1 ini adalah relasi turunan atau relasi non-identifying (identitas unik satu entitas tidak bergantung pada identitas unik entitas lain) namun jenis relasi kedua ini jarang ditemui.
- Relasi 1-N.
Relasi ini yang paling umum ditemui dalam model data.
- Relasi M-N.
Relasi ini juga sering ditemui dalam model data, dan sering pula dapat dinormalkan lebih jauh lagi. Langkah yang dapat ditempuh untuk menormalkan relasi M-N:
- Buat sebuah entitas baru sebagai penghubung antara kedua entitas dengan relasi M-N tersebut. Entitas penghubung ini akan memiliki hubungan 1-M dengan masing-masing entitas awal. Identifier entitas penghubung dapat dibuat tersendiri, atau dengan cara mewarisi identifier kedua entitas awal dan membuat keduanya identifier unik entitas penghubung ini. Sering kali akan ada atribut lain yang dimiliki oleh entitas penghubung tersebut. Entitas Kelas dalam contoh model data kita dapat menjadi contoh entitas penghubung. Apabila tidak ada entitas penghubung yang dapat diciptakan, relasi M-N tetap harus diubah untuk menghindari kesulitan dalam konversi model data menjadi skema database fisik.
C. Menerjemahkan Data
Setelah sebuah model data dinormalisasikan dan siap diubah menjadi database fisik, ada beberapa langkah penterjema han yang harus dilakukan:
1. Setiap entitas menjadi tabel tersendiri.
2. Setiap atribut menjadi kolom-kolom tabel tersebut, dengan tipe data yang sesuai.
3. Identifier entitas tersebut menjadi kolom ID yang tidak boleh kosong ( NOT NULL ) dan berisi indeks yang unik. ID unik ini dalam database dinamakan primary key
4. Relasi diterjemahkan menjadi foreign key.
Foreign Key
Beberapa catatan khusus mengenai penterjemahan relasi menjadi foreign key : Relasi 1-1 diterjemahkan menjadi “identifier salah satu tabel menjadi foreign key dalam tabel lain”. Keputusan mengenai ta bel mana yang harus menerima identifier tabel lain dapat diambil sesuai keinginan, dan secara teori tidak begitu berpengaruh. Namun, seringkali pertimbangan praktis yang akan me nentukan tabel mana yang akan berisi foreign key. Khusus untuk penggunaan MySQL sebagai pe nyimpan database: sampai MySQL versi 5.0 hanya storage engine InnoDB yang mendukung penggunaan foreign key. Mesin penyimpanan lain yang digunakan MySQL versi 5.0 atau dibawahnya (seperti MyISAM atau BDB) tidak mendukung konfigurasi FOREIGN KEY dalam perintah SQL CREATE TABLE, dan akan mengabaikannya apabila ia ditemui.
D. Catatan
Model data di atas dan semua query yang diberikan kepada database yang dihasilkan masih sangat sederhana (Salah satunya adalah pe nggunaan asumsi bahwa beberapa kelas untuk matakuliah tertentu hanya diampu oleh satu dosen dan mendapat tugas satu-persatu secara sekuensial – asumsi yang terlalu baik hati) dan tidak sepenuhnya memanfaatkan semua kemudahan dan potensi yang ditawarkan baik oleh SQL maupun oleh fasilitas-fasilitas setiap implementasi RDBMS yang mendukung SQL. Demi keringkasan dan kesederhanaan contoh, saya tidak membahas antara lain mengenai relasi turunan ( inheritance ) serta berbagai notasi grafis model data lain seperti ER dan berbagai turunannya.
Aplikasi yang saya gunakan untuk menggambar model data dan menterjemahkannya menjadi skema database fisik adalah DBDesigner 4 dari fabForce yang secara eksplisit mendukung MySQL dan berbagai mesin penyimpa nan yang digunakan produk tersebut. Script SQL CREATE TABLE yang dihasilkan kemudian ditulis ke clipboard untuk di-paste ke artikel ini dan ke file .sql untuk diekse kusi oleh MySQL (versi 5.0). Batasan-batasan terkait mesin penyimpanan yang saya paparkan di atas tidak berlaku pada implementasi RDBMS lain (tabel dalam PostgreSQL dan SQL Server, misalnya, secara default mendukung foreign key ).Sebagai latihan, Anda dapat mencoba memperluas model data di atas atau membuat model data sendiri, lalu menggunakan perintah query yang lebih efisien; salah satu contoh adalah perintah SELECT dengan modifier INNER / OUTER JOIN yang memberi Anda kendali yang lebih besar dan fleksibel untuk mendapat set hasil yang Anda inginkan dari sumber data multi-tabel.