Perbedaan antara BCNF dan 3NF
Menggunakan definisi BCNF
Jika dan hanya jika untuk setiap dependensinya X → Y, setidaknya satu dari kondisi berikut berlaku :
- X → Y adalah ketergantungan fungsional yang sepele (Y ⊆ X), atau
- X adalah kunci super untuk skema R
dan definisi 3NF
Jika dan hanya jika, untuk masing-masing dependensi fungsionalnya X → A, setidaknya satu dari kondisi berikut ini berlaku:
- X mengandung A (yaitu, X → A adalah dependensi fungsional yang sepele), atau
- X adalah superkey, atau
- Setiap elemen AX, perbedaan set antara A dan X, adalah atribut utama (yaitu, setiap atribut dalam AX terkandung dalam beberapa kunci kandidat)
Kami melihat perbedaan berikut, secara sederhana:
- Di BCNF : Setiap kunci parsial (atribut utama) hanya dapat bergantung pada superkey,
sedangkan
- Dalam 3NF : Kunci parsial (atribut prima) juga dapat bergantung pada atribut yang bukan superkey (yaitu atribut kunci parsial / primer lainnya atau bahkan atribut non-prima).
Dimana
- Sebuah atribut utama adalah atribut ditemukan di sebuah kunci kandidat, dan
- Sebuah kunci kandidat adalah superkey minimal untuk hubungan itu, dan
- Sebuah superkey adalah seperangkat atribut dari variabel hubungan yang memegang bahwa dalam semua hubungan ditugaskan untuk variabel itu, tidak ada dua tupel yang berbeda (baris) yang memiliki nilai yang sama untuk atribut dalam set.Equivalently superkey juga bisa didefinisikan sebagai seperangkat atribut dari skema hubungan di mana semua atribut skema tergantung secara fungsional. (Superkey selalu berisi kunci kandidat / kunci kandidat selalu merupakan subset dari superkey. Anda bisa menambahkan atribut apa pun dalam relasi untuk mendapatkan salah satu dari superkey tersebut.)
Artinya, tidak ada subset parsial (subset non trivial kecuali set lengkap) dari kunci kandidat yang secara fungsional tergantung pada apa pun selain superkey.
Tabel / relasi yang tidak ada dalam BCNF tunduk pada anomali seperti pembaruan anomali yang disebutkan dalam contoh pizza oleh pengguna lain. Sayangnya,
- BNCF tidak selalu dapat diperoleh , sementara
- 3NF selalu dapat diperoleh .
Contoh 3NF vs. BCNF
Contoh perbedaan saat ini dapat ditemukan di " tabel 3NF tidak memenuhi BCNF (bentuk normal Boyce-Codd) " di Wikipedia, di mana tabel berikut ini bertemu 3NF tetapi bukan BCNF karena "Lapangan Tenis" (atribut kunci / atribut parsial) tergantung pada "Jenis Jenis" (atribut kunci parsial / utama yang tidak superkey), yang merupakan ketergantungan yang dapat kita tentukan dengan bertanya kepada klien dari basis data, klub tenis:
Pemesanan Lapangan Tenis Hari Ini ( 3NF, bukan BCNF )
Court Start Time End Time Rate Type
------- ---------- -------- ---------
1 09:30 10:30 SAVER
1 11:00 12:00 SAVER
1 14:00 15:30 STANDARD
2 10:00 11:30 PREMIUM-B
2 11:30 13:30 PREMIUM-B
2 15:00 16:30 PREMIUM-A
Superkeys tabel adalah:
S1 = {Court, Start Time}
S2 = {Court, End Time}
S3 = {Rate Type, Start Time}
S4 = {Rate Type, End Time}
S5 = {Court, Start Time, End Time}
S6 = {Rate Type, Start Time, End Time}
S7 = {Court, Rate Type, Start Time}
S8 = {Court, Rate Type, End Time}
ST = {Court, Rate Type, Start Time, End Time}, the trivial superkey
Masalah 3NF : Atribut kunci / utama atribut "Pengadilan" tergantung pada sesuatu selain dari superkey. Sebaliknya, itu tergantung pada kunci parsial / atribut utama "Tipe Harga". Ini berarti bahwa pengguna harus secara manual mengubah jenis tarif jika kami memutakhirkan pengadilan, atau mengubah pengadilan secara manual jika ingin menerapkan perubahan tarif.
- Tetapi bagaimana jika pengguna meningkatkan pengadilan tetapi tidak ingat untuk meningkatkan tarif? Atau bagaimana jika jenis kurs yang salah diterapkan ke pengadilan?
(Dalam istilah teknis, kami tidak dapat menjamin bahwa ketergantungan fungsional "Tipe Tipe" -> "Pengadilan" tidak akan dilanggar.)
Solusi BCNF : Jika kita ingin menempatkan tabel di atas dalam BCNF kita dapat menguraikan relasi / tabel yang diberikan ke dalam dua relasi / tabel berikut (dengan asumsi kita tahu bahwa tipe kurs bergantung hanya pada status pengadilan dan keanggotaan, yang kita dapat temukan dengan bertanya kepada klien dari basis data kami, pemilik klub tenis):
Jenis Nilai ( BCNF dan 3NF yang lebih lemah, yang tersirat oleh BCNF)
Rate Type Court Member Flag
--------- ----- -----------
SAVER 1 Yes
STANDARD 1 No
PREMIUM-A 2 Yes
PREMIUM-B 2 No
Pemesanan Lapangan Tenis Hari Ini ( BCNF dan yang lebih lemah 3NF, yang tersirat oleh BCNF)
Member Flag Court Start Time End Time
----------- ----- ---------- --------
Yes 1 09:30 10:30
Yes 1 11:00 12:00
No 1 14:00 15:30
No 2 10:00 11:30
No 2 11:30 13:30
Yes 2 15:00 16:30
Masalah terpecahkan : Sekarang jika kami memutakhirkan pengadilan, kami dapat menjamin jenis tarif akan mencerminkan perubahan ini, dan kami tidak dapat membebankan harga yang salah untuk pengadilan.
(Dalam istilah teknis, kami dapat menjamin bahwa ketergantungan fungsional "Tipe Harga" -> "Pengadilan" tidak akan dilanggar.)