Bentuk normal ketiga (3NF) adalah prinsip database yang mendukung integritas data dengan membangun atas prinsip normalisasi database yang disediakan oleh First Normal Form (1NF) dan Second Normal Form (2NF).
Persyaratan Bentuk Normal Ketiga
Ada dua persyaratan dasar untuk database berada di bentuk normal ketiga:
- Database harus sudah memenuhi persyaratan dari 1NF dan 2NF .
- Semua kolom database harus bergantung pada kunci primer , yang berarti bahwa nilai kolom apa pun dapat diturunkan dari kunci primer saja.
Tentang Ketergantungan Kunci Utama
Mari kita telusuri lebih jauh apa yang kami maksud dengan fakta bahwa semua kolom harus bergantung pada kunci primer.
Jika nilai kolom dapat diturunkan dari kunci primer dan kolom lain dalam tabel, itu melanggar 3NF. Pertimbangkan tabel Karyawan dengan kolom-kolom ini:
- Identitas pegawai
- Nama depan
- Nama keluarga
Apakah baik LastName dan FirstName hanya bergantung pada nilai EmployeeID? Nah, bisakah LastName bergantung pada FirstName? Tidak, karena tidak ada yang melekat dalam LastName akan menyarankan nilai FirstName. Mungkinkah FirstName bergantung pada LastName? Tidak lagi, karena hal yang sama berlaku: apapun LastName mungkin, itu tidak bisa memberikan petunjuk tentang nilai FirstName. Oleh karena itu, tabel ini adalah 3NF compliant.
Tetapi pertimbangkan tabel Kendaraan ini:
- VehicleID
- Pabrikan
- Model
Produsen dan Model dapat berasal dari VehicleID - tetapi Model juga dapat berasal dari Produsen karena model kendaraan dibuat hanya oleh produsen tertentu. Desain tabel ini adalah non-3NF compliant, dan bisa, oleh karena itu, menghasilkan anomali data. Misalnya, Anda dapat memperbarui pabrikan tanpa memperbarui model, memperkenalkan ketidakakuratan.
Untuk membuatnya sesuai, kita perlu memindahkan kolom dependen tambahan ke tabel lain dan merujuknya menggunakan kunci asing. Ini akan menghasilkan dua tabel:
Tabel Kendaraan
Pada tabel di bawah ini, ModelID adalah kunci asing untuk tabel Model :
- VehicleID
- Pabrikan
- ModelID
Tabel Model
Tabel baru ini memetakan model ke produsen. Jika Anda ingin memperbarui informasi kendaraan khusus untuk model, Anda akan melakukannya dalam tabel ini, bukan di tabel Kendaraan.
- ModelID
- Pabrikan
- Model
Derived Fields dalam Model 3NF
Sebuah tabel mungkin berisi bidang turunan - yang dihitung berdasarkan kolom lain dalam tabel. Misalnya, perhatikan tabel pesanan widget ini:
- Jumlah order
- Nomor pelanggan
- Patokan harga
- Kuantitas
- Total
Pemutusan total pemenuhan 3NF karena dapat diturunkan dengan mengalikan harga unit dengan kuantitas, daripada sepenuhnya bergantung pada kunci primer. Kita harus menghapusnya dari meja untuk mematuhi bentuk normal ketiga.
Bahkan, karena itu berasal, lebih baik untuk tidak menyimpannya dalam database sama sekali.
Kami hanya dapat menghitungnya "on the fly" saat melakukan kueri basis data. Misalnya, kami mungkin sebelumnya menggunakan kueri ini untuk mengambil nomor pesanan dan total:
SELECT OrderNumber, Total FROM WidgetOrdersKami sekarang dapat menggunakan kueri berikut:
SELECT OrderNumber, UnitPrice * Quantity AS Total FROM WidgetOrdersuntuk mencapai hasil yang sama tanpa melanggar aturan normalisasi.