Üçüncü normal form
Üçüncü normal formun tanımı

Üçüncü normal form (3NF), veritabanı normalleştirmesinde kullanılan normal bir formdur. 3NF ilk olarak 1971'de E. F. Codd tarafından tanımlanmıştır.
Codd'un tanımı, ancak ve ancak aşağıdaki koşulların her ikisi de geçerliyse bir tablonun 3NF'de olduğunu belirtir:
İkinci normal form (2NF) kriterlerini karşılaması.
R'nin asal olmayan her özniteliğinin geçişli olmayan bir şekilde R'nin her anahtarına bağlı olması.
R'nin asal olmayan bir özelliği, herhangi bir aday anahtarda olmayan bir özellktir. Eğer X --> Y ve R’nin herhangi bir anahtarının altkümesi olmayan nitelikler kümesi Z söz konusu ise, X --> Y ve Y --> Z birlikte geçerli olmamalıdır.
Codd'un tanımına eşdeğer olan ancak farklı bir şekilde ifade edilen bir 3NF tanımı, 1982 yılında Carlo Zaniolo tarafından verildi. Bu tanım, bir tablonun, ancak ve ancak, X → A işlevsel bağımlılıklarının her biri için aşağıdaki koşullardan en az biri geçerliyse 3NF'de olduğunu belirtir:[Alıntı gerek]
X, A'yı içerirse (yani, A, X'in bir alt kümesidir, yani X → A, önemsiz işlevsel bağımlılıktır)
X bir süper anahtarsa
A \ X'in her elemanı, A ve X arasındaki fark, bir asal öznitelikse (yani, A \ X'deki her öznitelik bazı aday anahtarda bulunursa).
Zaniolo'nun tanımı, 3NF ile daha katı Boyce – Codd normal formu (BCNF) arasındaki farkın net bir şekilde anlaşılmasını sağlar. BCNF, üçüncü alternatifi ortadan kaldırır (" A \ X'in her öğesi, A ve X arasındaki fark, bir asal özniteliktir." ).
"Anahtarın" varlığını zorunlu kılmak, tablonun 1NF'de olmasını sağlar; anahtar olmayan özniteliklerin "tüm anahtara" bağlı olmasını zorunlu kılmak 2NF'de olmasını sağlar; ayrıca anahtar olmayan özniteliklerin "anahtardan başka hiçbir şeye bağımlı olmamasını" gerektirmesi, 3NF'yi garanti eder. Bu cümle yararlı bir anımsatıcı olsa da, sadece tek bir anahtardan bahsediyor olması, 2. ve 3. normal formları sağlamak için bazı gerekli ancak yeterli olmayan koşulları tanımladığı anlamına gelir. Hem 2NF hem de 3NF, herhangi bir anahtarla değil, bir tablonun tüm aday anahtarlarıyla eşit derecede ilgilidir.
3NF'nin gereksinimlerini karşılamayan bir 2NF tablosu örneği:
| Turnuva | Yıl | kazanan | Kazananın doğum tarihi |
| --- | --- | --- | --- |
| Indiana Invitational | 1998 | Al Fredrickson | 21 Temmuz 1975 |
| Cleveland Open | 1999 | Bob Albertson | 28 Eylül 1968 |
| Des Moines Masters | 1999 | Al Fredrickson | 21 Temmuz 1975 |
| Indiana Invitational | 1999 | Chip Masterson | 14 Mart 1977 |
Tablodaki her satırın, belirli bir Yılda belirli bir Turnuvayı kimin kazandığını bize bildirmesi gerektiğinden, bileşik anahtar {Turnuva, Yıl}, bir satırı benzersiz şekilde tanımlamak için garanti edilen minimum bir özellik kümesidir. Yani, {Turnuva, Yıl} tablo için aday bir anahtardır.
3NF ihlali, birincil olmayan bir nitelik olan Kazananın doğum tarihinin, birinci olmayan özellik Kazanan aracılığıyla {Turnuva, Yıl} aday anahtarına geçişli olarak bağlı olması nedeniyle oluşur. Kazananın doğum tarihi sütununun işlevsel olarak Kazanan sütununa bağlı olması, aynı kişinin farklı kayıtlarda farklı doğum tarihleriyle gösterilmesini engelleyecek bir şey olmadığı için tabloyu mantıksal tutarsızlıklara açık hale getirir.
Aynı gerçekleri 3NF'yi ihlal etmeden ifade etmek için tabloyu ikiye bölmek gerekir:
Bu tablolarda güncelleme anormallikleri oluşamaz, çünkü öncekinden farklı olarak, Kazanan artık ikinci tabloda bir aday anahtardır ve böylece her Kazanan için doğum tarihi yalnızca bir değere referans verir.