Boyce-Codd normal formu

Boyce – Codd normal formu (veya BCNF veya 3.5NF), veritabanı normalleştirmesinde kullanılan normal bir formdur . Üçüncü normal formun (3NF) biraz daha güçlü bir versiyonudur. BCNF, 1974 yılında Raymond F. Boyce ve Edgar F. Codd tarafından, başlangıçta tanımlandığı şekliyle 3NF tarafından ele alınmayan belirli anormallik türlerini ele almak için geliştirilmiştir.
Bir ilişkisel şema BCNF'de ise, diğer tür artıklık hala mevcut olsa da, işlevsel bağımlılığa dayalı tüm artıklık kaldırılmıştır. İlişkisel bir şema R, ancak ve ancak X → Y bağımlılıklarının her biri için aşağıdaki koşullardan en az biri geçerliyse Boyce – Codd normal biçimindedir:
X → Y önemsiz bir işlevsel bağımlılıktır (Y ⊆ X),
X, R şeması için bir süperanahtardır.
Yalnızca nadir durumlarda, 3NF tablosu BCNF gerekliliklerini karşılamaz. Birden çok örtüşen aday anahtarı olmayan bir 3NF tablosunun BCNF'de olması garanti edilir. İşlevsel bağımlılıklarının ne olduğuna bağlı olarak, iki veya daha fazla örtüşen aday anahtarı olan bir 3NF tablosu BCNF'de olabilir veya olmayabilir.
BCNF'yi karşılamayan bir 3NF tablosu örneği:
| Kort | Başlangıç saati | Bitiş saati | Ücret türü |
| --- | --- | --- | --- |
| 1 | 09:30 | 10:30 | İndirimli |
| 1 | 11:00 | 12:00 | İndirimli |
| 1 | 14:00 | 15:30 | Standart |
| 2 | 10:00 | 11:30 | Özel-B |
| 2 | 11:30 | 13:30 | Özel-B |
| 2 | 15:00 | 16:30 | Özel-A |

Tablodaki her sıra, bir tenis kulübündeki bir kort rezervasyonunu temsil eder. Bu kulübün 1 ve 2 numaralı 2 kortu vardır.
Bir rezervasyon kaydı, bir kortun hangi saatler arasında rezerve edildiğini belirtir.
Ek olarak, her rezervasyonun kendisiyle ilişkilendirilmiş bir Ücret Türü vardır. Dört farklı ücret türü vardır: İndirimli, Standart, Özel-A ve Özel-B.
Tablonun süperanahtarları şunlardır:
S 1 = {Kort, Başlangıç zamanı}
S 2 = {Kort, Bitiş zamanı}
S 3 = {Ücret türü, Başlangıç zamanı}
S 4 = {Ücret türü, Bitiş zamanı}
S 5 = {Kort, Başlangıç zamanı, Bitiş zamanı}
S 6 = {Ücret türü, Başlangıç zamanı, Bitiş zamanı}
S 7 = {Kort, Ücret türü, Başlangıç zamanı}
S 8 = {Kort, Ücret türü, Bitiş zamanı}
S T = {Kort, Ücret türü, Başlangıç zamanı, Bitiş zamanı}, önemsiz süperanahtar
Yukarıdaki tabloda Başlangıç zamanı ve Bitiş zamanı özelliklerinin her biri için yinelenen değerleri olmasa da, bazı günlerde 1. ve 2. kortta iki farklı rezervasyonun aynı anda başlayabileceğini veya sona erebileceğini kabul etmemiz gerektiği unutulmamalıdır. Bu, {Başlangıç zamanı} ve {Bitiş zamanı} nın tablonun süperanahtarları olarak kabul edilememesinin nedenidir.
Bununla birlikte, sadece, 1 S 2S, 3 S 4 olan S aday anahtarlar için, örneğin (bu ilişki için, en az superkeys olduğu) S 1 ⊂ S 5, dolayısıyla S 5 bir aday anahtar olamaz.
2NF'nin asal olmayan özniteliklerin kısmi işlevsel bağımlılıklarını yasakladığı göz önüne alındığında, 3NF, aday anahtarlar üzerindeki asal olmayan özniteliklerin geçişli işlevsel bağımlılıklarını yasaklar.
Bugünün kort kayıtları tablosunda asal olmayan nitelikler yoktur: yani, tüm özellikler bazı aday anahtarlarına aittir. Bu nedenle tablo hem 2NF hem de 3NF'ye bağlıdır.
BCNF'ye uymayan tasarım, BCNF'yi karşılamak üzere şu şekilde değiştirilebilir:
Ücret türleri tablosunun aday anahtarları şunlardır: {Ücret türü} ve {Kort, Üye mi}; Bugünün rezervasyonları tablosu için aday anahtarlar {Kort, Başlangıç zamanı} ve {Kort, Bitiş zamanı}'dır. Her iki tablo da BCNF'tir. {Ücret türü}, Ücret türleri tablosunda bir anahtar olduğunda, iki farklı kortla ilişkilendirilmiş bir ücret türüne sahip olmak imkansızdır, bu nedenle, Ücret türleri tablosunda anahtar olarak {Ücret türü} kullanılarak, orijinal tabloyu etkileyen anormallik elenmiş olur.