BCNF ve 3NF arasındaki fark
BCNF tanımını kullanma
Yalnızca ve bağımlılıklarının her biri için X → Y ise, aşağıdaki koşullardan en az biri geçerliyse :
- X → Y önemsiz bir işlevsel bağımlılıktır (Y ⊆ X) veya
- X, R şeması için bir süper anahtardır
ve 3NF tanımı
Yalnızca ve fonksiyonel bağımlılıklarının her biri için X → A için, aşağıdaki koşullardan en az biri geçerliyse:
- X, A içerir (yani X → A önemsiz fonksiyonel bağımlılıktır) veya
- X bir süperkeydir veya
- AX'in her unsuru, A ve X arasındaki ayarlanmış fark, asal bir özelliktir (yani, AX'taki her özellik bazı aday anahtarlarda bulunur)
Aşağıdaki farkı basit terimlerle görüyoruz:
- BCNF'de : Her kısmi anahtar (ana özellik) yalnızca bir superkey'e bağlı olabilir ,
buna karşılık
- 3NF'de : Kısmi bir anahtar (asal öznitelik), superkey olmayan bir özniteliğe de bağlı olabilir (başka bir kısmi anahtar / asal öznitelik veya hatta asal olmayan bir öznitelik).
Nerede
- Bir asal nitelik aday anahtarında bulunan bir özelliktir ve
- Bir aday anahtar o ilişki için asgari SuperKey olduğunu ve
- Bir süperkey , bir değişkenin atanmış tüm ilişkilerinde, bu kümedeki öznitelikler için aynı değerlere sahip iki ayrı tuple (satır) bulunmadığı bir ilişki değişkeninin nitelikler kümesidir. şemanın tüm özniteliklerinin işlevsel olarak bağımlı olduğu bir ilişki şemasının öznitelikler kümesi olarak tanımlanabilir. (Bir superkey her zaman bir aday anahtar içerir / bir aday anahtar her zaman bir superkey'in alt kümesidir. Superkeylerden birini elde etmek için bir ilişkide herhangi bir nitelik ekleyebilirsiniz.)
Yani, bir aday anahtarın hiçbir kısmi altkümesi (tam küme dışında önemsiz olmayan bir altküme) bir superkey dışındaki herhangi bir şeye işlevsel olarak bağımlı olamaz.
BCNF'de olmayan bir tablo / ilişki, başka bir kullanıcı tarafından pizza örneğinde belirtilen güncelleme anomalileri gibi anormalliklere tabidir. Ne yazık ki,
- BNCF olamaz daima elde edilebilir iken,
- 3NF her zaman elde edilebilir .
3NF ve BCNF Örneği
Farkın bir örneği şu anda Wikipedia'da " 3NF tablosunu karşılamayan (Boyce-Codd normal formu) " adresinde bulunabilir , burada aşağıdaki tablo 3NF ile karşılaşır, ancak BCNF ile karşılaşmaz, çünkü "Tenis Kortu" (kısmi bir anahtar / ana özellik) "Ücret Türü" (bir superkey olmayan kısmi bir anahtar / ana özellik ) üzerinde, bu da veritabanının müşterilerine, tenis kulübüne sorarak belirleyebileceğimiz bir bağımlılıktır:
Bugünün Tenis Kortu Rezervasyonları ( 3NF, BCNF değil )
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
Masanın süperkeyleri:
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
3NF problemi : Kısmi anahtar / ana nitelik "Mahkeme", superkey dışında bir şeye bağlıdır. Bunun yerine, "Ücret Türü" kısmi anahtar / ana özelliğine bağlıdır. Bu, bir mahkemeyi yükseltirsek kullanıcının ücret türünü manuel olarak değiştirmesi veya ücret değişikliği uygulamak isterse mahkemeyi manuel olarak değiştirmesi gerektiği anlamına gelir.
- Ancak, kullanıcı mahkemeyi yükseltir, ancak oranı artırmayı hatırlamazsa ne olur? Ya da bir mahkemeye yanlış ücret türü uygulanırsa?
(Teknik açıdan, "Ücret Türü" -> "Mahkeme" işlevsel bağımlılığının ihlal edilmeyeceğini garanti edemeyiz.)
BCNF çözümü : Yukarıdaki tabloyu BCNF'ye yerleştirmek istiyorsak, verilen ilişki / tabloyu aşağıdaki iki ilişki / tabloya ayırabiliriz (ücret türünün yalnızca mahkemeye ve üyelik durumuna bağlı olduğunu varsayarsak, veritabanımızın müşterilerine, tenis kulübünün sahiplerine sorarak keşfedin):
Hız Türleri ( BCNF ve BCNF tarafından ima edilen daha zayıf 3NF)
Rate Type Court Member Flag
--------- ----- -----------
SAVER 1 Yes
STANDARD 1 No
PREMIUM-A 2 Yes
PREMIUM-B 2 No
Bugünün Tenis Kortu Rezervasyonları ( BCNF ve BCNF tarafından ima edilen daha zayıf 3NF)
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
Sorun Çözüldü : Şimdi mahkemeyi yükseltirsek, ücret türünün bu değişikliği yansıtacağını garanti edebiliriz ve mahkeme için yanlış fiyat talep edemeyiz.
(Teknik açıdan, "Ücret Türü" -> "Mahkeme" işlevsel bağımlılığının ihlal edilmeyeceğini garanti edebiliriz.)