Meletakkan Pangkalan Data dalam Borang Ketiga Ketiga (3NF)

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:

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:

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:

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 untuk jadual Model :

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.

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:

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.