Menempatkan Database dalam Bentuk Normal Ketiga (3NF)

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:

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:

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:

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 :

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.

Derived Fields dalam Model 3NF

Sebuah tabel mungkin berisi bidang turunan - yang dihitung berdasarkan kolom lain dalam tabel. Misalnya, perhatikan tabel pesanan widget ini:

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 WidgetOrders

Kami sekarang dapat menggunakan kueri berikut:

SELECT OrderNumber, UnitPrice * Quantity AS Total FROM WidgetOrders

untuk mencapai hasil yang sama tanpa melanggar aturan normalisasi.