Üçüncü Normal Formda (3NF) Veritabanının Kurulması

Üçüncü normal form (3NF), Birinci Normal Form (1NF) ve İkinci Normal Form (2NF) tarafından sağlanan veri tabanı normalleştirme prensipleri üzerine inşa ederek verilerin bütünlüğünü destekleyen bir veri tabanı ilkesidir.

Üçüncü Normal Form Gereksinimleri

Bir veritabanının üçüncü normal formda olması için iki temel gereksinim vardır:

Birincil Anahtar Bağımlılığı Hakkında

Tüm sütunların birincil anahtara bağlı olması gerçeği ile kastettiğimiz şeyi daha da keşfedelim.

Bir sütunun değeri hem birincil anahtardan hem de tablodaki başka bir sütundan türetilebilirse, 3NF'yi ihlal eder. Bu sütunlarla bir Çalışan tablosu düşünün:

Hem LastName hem de FirstName, yalnızca ÇalışanNo değerine mi bağlı? Peki, LastName FirstName'e bağlı olabilir mi? Hayır, Soyadı’nın doğasında olan hiçbir şey FirstName değerini önerecektir. FirstName, LastName'e bağlı olabilir mi? Bir daha değil, çünkü aynı şey doğrudur: Bir Soyadı ne olursa olsun, İlk Adın değeri hakkında bir ipucu veremez. Bu nedenle, bu tablo 3NF uyumludur.

Ama bu Araçlar tablosunu düşünün:

Üretici ve Model, VehicleID'den kaynaklanabilir - ancak Model, Üretici'den de türetilebilir, çünkü bir araç modeli sadece belirli bir üretici tarafından yapılır. Bu tablo tasarımı 3NF uyumlu değildir ve bu nedenle veri anomalileri ile sonuçlanabilir. Örneğin, modeli güncellemeden ve yanlışlıkları tanımadan üreticiyi güncelleyebilirsiniz.

Uyumlu hale getirmek için, ek bağımlı sütunu başka bir tabloya taşımalı ve bir yabancı anahtar kullanarak başvurmalıyız. Bu iki tabloyla sonuçlanır:

Araçlar Tablosu

Aşağıdaki tabloda, ModelID, Modeller tablosuna yabancı bir anahtardır:

Modeller Tablosu

Bu yeni tablo modelleri üreticilere gösteriyor. Bir modele özgü herhangi bir araç bilgisini güncellemek isterseniz, bunu Araç tablosunda değil, bu tabloda yaparsınız.

3NF Modelinde Türetilmiş Alanlar

Tablo, türetilmiş bir alan içerebilir - tablodaki diğer sütunlara dayalı olarak hesaplanan bir alan. Örneğin, bu widget widget'larının tablosunu göz önünde bulundurun:

Toplam kırılma 3NF uygunluğu, ünite fiyatının, birincil anahtara tamamen bağımlı olmaktan ziyade, miktar ile çarpılmasıyla elde edilebildiği için. Üçüncü normal forma uygun olarak tablodan çıkarmalıyız.

Aslında, türetildiği için, veritabanında saklamak daha iyidir.

Veritabanı sorguları yaparken "anında" hesaplayabiliriz. Örneğin, sipariş numaralarını ve toplamları almak için daha önce bu sorguyu kullanmış olabiliriz:

SELECT OrderNumber, ToplamDEN WidgetOrders

Şimdi aşağıdaki sorguyu kullanabiliriz:

SELECT SiparişNumarası, BirimFiyatı * Miktar Toplam Toplam WidgetOrders

Normalizasyon kurallarını ihlal etmeden aynı sonuçları elde etmek.