Bentuk normal ketiga (3NF) adalah prinsip pangkalan data yang menyokong integriti data dengan membina prinsip normalisasi pangkalan data yang disediakan oleh Formula Pertama Pertama (1NF) dan Borang Normal Kedua (2NF).
Keperluan Borang Ketiga Ketiga
Terdapat dua syarat asas untuk pangkalan data untuk berada dalam bentuk normal ketiga:
- Pangkalan data mestilah memenuhi keperluan 1NF dan 2NF.
- Semua lajur pangkalan data mesti bergantung pada kunci utama, yang bermaksud bahawa nilai lajur mana-mana boleh diperolehi dari kunci utama sahaja.
Mengenai Ketergantungan Utama Utama
Mari kita terus meneroka apa yang kita maksudkan oleh fakta bahawa semua lajur mesti bergantung pada kunci utama.
Jika nilai lajur boleh diperoleh dari kedua-dua kunci utama dan lajur yang lain dalam jadual, ia melanggar 3NF. Pertimbangkan jadual Pekerja dengan lajur ini:
- ID pekerja
- Nama pertama
- Nama terakhir
Adakah kedua-dua LastName dan FirstName hanya bergantung pada nilai EmployeeID? Nah, bolehkah LastName bergantung pada FirstName? Tidak, kerana tiada apa yang melekat dalam LastName akan mencadangkan nilai FirstName. Bolehkah FirstName bergantung pada LastName? Tidak lagi, kerana perkara yang sama adalah benar: apa sahaja yang LastName mungkin, ia tidak dapat memberi petunjuk mengenai nilai FirstName. Oleh itu, jadual ini adalah 3NF yang mematuhi.
Tetapi pertimbangkan jadual Kenderaan ini:
- VehicleID
- Pengeluar
- Model
Pengeluar dan Model boleh diperolehi dari VehicleID - tetapi Model juga boleh diperoleh dari Pengilang kerana model kenderaan dibuat hanya oleh pengeluar tertentu. Reka bentuk jadual ini adalah tidak mematuhi 3NF, dan boleh mengakibatkan anomali data. Sebagai contoh, anda mungkin mengemas kini pengilang tanpa mengemaskini model, memperkenalkan ketidaktepatan.
Untuk membuatnya patuh, kita perlu memindahkan lajur bergantung kepada jadual lain dan merujuknya menggunakan kunci asing. Ini akan menghasilkan dua jadual:
Jadual Kenderaan
Dalam jadual di bawah, ModelID adalah kunci asing kepada Model jadual:
- VehicleID
- Pengeluar
- ModelID
Jadual Model
Jadual baru ini memetakan model kepada pengilang. Sekiranya anda ingin mengemaskini sebarang maklumat kenderaan yang spesifik kepada model, anda akan melakukannya dalam jadual ini, bukannya dalam jadual Kenderaan.
- ModelID
- Pengeluar
- Model
Terbitkan Bidang dalam Model 3NF
Jadual mungkin mengandungi medan yang diperoleh - satu yang dikira berdasarkan lajur lain dalam jadual. Sebagai contoh, pertimbangkan jadual pesanan widget ini:
- Nombor Pesanan
- Nombor pelanggan
- Harga seunit
- Kuantiti
- Jumlah
Jumlah total pemecahan 3NF kerana ia dapat diperoleh dengan mengalikan harga unit dengan kuantiti, dan bukannya sepenuhnya bergantung pada kunci utama. Kita mesti mengeluarkannya dari meja untuk mematuhi bentuk normal ketiga.
Malah, kerana ia diperolehi, lebih baik tidak menyimpannya dalam pangkalan data sama sekali.
Kita hanya boleh mengiranya "on the fly" apabila melakukan pertanyaan pangkalan data. Sebagai contoh, kami mungkin pernah menggunakan pertanyaan ini sebelum mengambil nombor dan jumlah pesanan:
SELECT OrderNumber, Total FROM WidgetOrders
Kami kini boleh menggunakan pertanyaan berikut:
SELECT OrderNumber, UnitPrice * Quantity AS Total FROM WidgetOrders
untuk mencapai keputusan yang sama tanpa melanggar peraturan normalisasi.