Rumah > pangkalan data > tutorial mysql > Terangkan bentuk normal yang berbeza (1NF, 2NF, 3NF, BCNF).

Terangkan bentuk normal yang berbeza (1NF, 2NF, 3NF, BCNF).

Karen Carpenter
Lepaskan: 2025-03-19 13:15:26
asal
979 orang telah melayarinya

Terangkan bentuk normal yang berbeza (1NF, 2NF, 3NF, BCNF).

Normalisasi adalah teknik reka bentuk pangkalan data yang bertujuan untuk mengurangkan kelebihan data dan meningkatkan integriti data. Terdapat beberapa bentuk normal yang menentukan tahap normalisasi yang berbeza. Mari kita meneroka mereka secara terperinci:

1. Borang Normal Pertama (1NF):
Langkah pertama dalam menormalkan pangkalan data adalah untuk memastikan ia dalam bentuk normal pertama. Jadual berada dalam 1NF jika ia memenuhi syarat -syarat berikut:

  • Setiap lajur jadual mesti mengandungi nilai atom (tidak dapat dipisahkan).
  • Setiap lajur berturut -turut mesti mengandungi jenis nilai yang sama.
  • Setiap lajur mesti mempunyai nama yang unik.
  • Perintah di mana data disimpan tidak penting.

2. Borang Normal Kedua (2NF):
Jadual berada dalam 2NF jika ia berada dalam 1NF dan semua lajur bukan kunci sepenuhnya bergantung kepada kunci utama jadual. Ini bermakna jika kunci utama jadual terdiri daripada pelbagai lajur, tiada lajur bukan kunci hanya bergantung pada bahagian kunci tetapi pada keseluruhan kunci.

3. Borang Normal Ketiga (3NF):
Jadual berada dalam 3NF jika ia berada di 2NF dan tidak ada kebergantungan transitif. Ini bermakna jika lajur bukan kunci bergantung pada lajur bukan kunci yang lain, ia harus dipindahkan ke meja yang berasingan. Dalam erti kata lain, setiap lajur bukan kunci mesti memberikan fakta tentang kunci, keseluruhan kunci, dan tiada apa-apa tetapi kunci.

4. BOYCE-CODD Borang Normal (BCNF):
BCNF adalah versi 3NF yang lebih ketat. Jadual adalah dalam BCNF jika ia berada dalam 3nf dan untuk setiap satu daripada kebergantungan fungsionalnya yang tidak remeh x -> y, x adalah superkey -iaitu, x adalah kunci calon atau supersetnya. BCNF direka untuk menghapuskan kemungkinan anomali yang masih boleh timbul dalam jadual 3nf kerana beberapa jenis kebergantungan berfungsi.

Apakah perbezaan utama antara 1NF dan 2NF?

Perbezaan utama antara 1NF dan 2NF terletak pada sifat kebergantungan dalam jadual.

  • 1NF memberi tumpuan kepada struktur data, memastikan bahawa setiap sel mengandungi nilai atom dan bahawa susunan data tidak penting. Ia tidak menangani hubungan antara item data.
  • 2nf , sebaliknya, membina 1NF dengan menghapuskan kebergantungan separa. Ketergantungan separa berlaku apabila lajur bukan kunci bergantung kepada hanya sebahagian daripada kunci utama dalam jadual dengan kunci utama komposit (berbilang lajur). Dalam 2NF, setiap lajur bukan kunci mestilah bergantung sepenuhnya pada keseluruhan kunci utama.

Untuk menggambarkan, pertimbangkan jadual dalam 1NF dengan kunci utama komposit. Jika lajur bukan kunci hanya bergantung pada sebahagian daripada kunci utama, ia melanggar 2NF. Sebagai contoh, jika pesanan penjejakan jadual mempunyai kunci utama komposit (OrderID, ProductID) dan lajur untuk ProductPrice yang hanya bergantung pada ProductID, memindahkan Productprice ke jadual berasingan (dengan ProductID sebagai kunci utama) akan membawa jadual asal ke 2NF.

Bagaimanakah 3NF membantu dalam mengurangkan redundansi data?

Bentuk normal ketiga (3NF) memainkan peranan penting dalam mengurangkan kelebihan data dengan menghapuskan kebergantungan transitif. Ketergantungan transitif berlaku apabila lajur bukan kunci bergantung pada lajur bukan kunci yang lain, yang seterusnya bergantung pada kunci utama.

Sebagai contoh, pertimbangkan jadual dalam 2NF yang merangkumi lajur untuk Pekerja INTERA (Kunci Utama), Jabatan, dan Nama Jabatan. Jika nama jabatan bergantung kepada jabatan, yang pada gilirannya bergantung kepada pekerja, maka nama jabatan mempunyai kebergantungan transitif terhadap Pekerja INDICH melalui DepartmentID. Persediaan ini boleh membawa kepada redundansi data kerana nama jabatan yang sama boleh diulang beberapa kali dalam jadual.

Untuk menangani masalah ini, 3NF akan memerlukan nama jabatan yang bergerak ke meja jabatan yang berasingan (dengan Jabatan INDICE sebagai kunci utama), menghapuskan kebergantungan transitif. Langkah normalisasi ini memastikan bahawa nama jabatan disimpan hanya sekali, mengurangkan kelebihan dan meningkatkan integriti data. Apabila kemas kini diperlukan, ia mesti dibuat hanya dalam satu tempat, meminimumkan risiko ketidakkonsistenan.

Bolehkah anda memberikan contoh apabila BCNF lebih disukai daripada 3NF?

Bentuk normal Boyce-CODD (BCNF) lebih disukai daripada bentuk normal ketiga (3NF) apabila terdapat kebergantungan fungsional di mana penentu (sebelah kiri ketergantungan) bukan superkey. BCNF menyediakan kriteria yang lebih ketat untuk menghapuskan anomali yang dapat bertahan dalam jadual 3NF.

Pertimbangkan contoh yang melibatkan sistem pendaftaran kursus universiti:

Jadual: Courseregistration

  • Lajur: StudentID, CourseId, InstructorID
  • Kebergantungan fungsi:

    • (StudentID, CourseId) -> InstructorID (Kunci Utama)
    • InstructorId -> CourseId (seorang pengajar hanya mengajar satu kursus)

Dalam senario ini, jadual berada dalam 3NF kerana tidak ada kebergantungan transitif. Walau bagaimanapun, ia melanggar BCNF kerana pengajar -> kursus ini bermakna bahawa pengajar, yang bukan superkey, menentukan satu lagi lajur bukan kunci, kursus.

Untuk memuaskan BCNF, kita perlu memecah jadual menjadi dua:

Jadual1: Courseregistration

  • Lajur: StudentID, CourseId, InstructorID
  • Kunci Utama: (StudentID, CourseId)

Table2: Instructorcourse

  • Lajur: Instructorid, CourseId
  • Kunci utama: InstructorID

Dengan melakukan ini, kami memastikan bahawa setiap penentu dalam kebergantungan berfungsi adalah superkey, dengan itu memenuhi kriteria BCNF. Pemisahan ini menghapuskan anomali yang berpotensi seperti penyisipan, penghapusan, dan mengemaskini anomali yang boleh berlaku jika jadual kekal dalam 3NF.

Atas ialah kandungan terperinci Terangkan bentuk normal yang berbeza (1NF, 2NF, 3NF, BCNF).. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan