SQL'de Normalleştirme Nedir?
Normalleşme nedir?
Normalleştirme, veri fazlalığını hafifletmek ve veri ekleme, veri güncelleme ve veri silme işlevleri gibi istenmeyen özellikleri ortadan kaldıran bir veritabanı tasarım tekniğidir. Normalleştirme kuralları, daha büyük tabloları daha küçük tablolara parçalar ve ilişkileri kullanarak bu küçük tabloları birbirine bağlar. SQL'de Normalleştirmenin amacı, gereksiz ve tekrarlayan verileri ortadan kaldırmak ve verilerin mantıksal olarak depolanmasını sağlamaktır.
İlişkisel modelin mucidi Edgar Codd, Birinci Normal Form'un tanıtılmasıyla verilerin normalleştirilmesi teorisini önerdi ve teoriyi İkinci ve Üçüncü Normal Form ile genişletmeye devam etti. Daha sonra Boyce Codd normal form teorisini daha iyi hale getirmek için Raymond F. Boyce'a katıldı.
Bu Veritabanı Normalleştirme makalesinde şunları göreceksiniz:
- DBMS'de Normalleştirme Nedir?
- Veritabanı Normal Formları
- Örneklerle Veritabanı Normalleştirme
- 1NF (İlk Normal Form) Kuralları
- SQL'de ANAHTAR (KEYWORD) nedir?
- 2NF (İkinci Normal Form) Kuralları
- Veritabanı – Foreign Key (Yabancı Anahtar)
- Geçişli işlevsel bağımlılıklar nelerdir?
- 3NF (Üçüncü Normal Form) Kuralları
- BCNF (Boyce-Codd Normal Form)
- 4NF (Dördüncü Normal Form) Kuralları
- 5NF (Beşinci Normal Form) Kuralları
- 6NF (Altıncı Normal Form) Önerilen
Veritabanı Normal Formları
SQL'deki Normal Formların bir listesi:
- 1NF (İlk Normal Form)
- 2NF (İkinci Normal Form)
- 3NF (Üçüncü Normal Form)
- BCNF (Boyce-Codd Normal Form)
- 4NF (Dördüncü Normal Form)
- 5NF (Beşinci Normal Form)
- 6NF (Altıncı Normal Form)
MySQL sunucusundaki Veri Normalleştirme Teorisi hala geliştirilmektedir. Örneğin 6. Normal Formda bile tartışmalar var. Ancak, çoğu pratik uygulamada, normalizasyonun en iyisine 3. Normal Formda ulaşır. SQL teorilerinde Normalizasyonun evrimi aşağıda gösterilmiştir.
Örneklerle Veritabanı Normalleştirme
Veritabanı Normalleştirme Örneği, bir örnek çalışma yardımıyla kolayca anlaşılabilir. Bir film sitesinde kiralanan filmlerin bir veritabanını tuttuğunu varsayalım. Veritabanında hiçbir şekilde normalizasyon yapılmadan tüm bilgiler aşağıdaki örnekte gösterildiği gibi tek bir tabloda saklanır. Normalleştirme veritabanını çözümlü normalleştirme örneği ile anlayalım:
Burada, Kiralık Filmler sütununun birden çok değere sahip olduğunu görüyorsunuz . Şimdi 1. Normal Formlara geçelim:
1NF (İlk Normal Form) Kuralları
- Her tablo hücresi tek bir değer içermelidir.
- Her kaydın benzersiz olması gerekir.
1NF Örneği
Devam etmeden önce birkaç şeyi anlayalım.
SQL'de KEYWORD (ANAHTAR) nedir?
SQL'de bir KEYWORD, bir tablodaki kayıtları benzersiz bir şekilde tanımlamak için kullanılan bir değerdir. SQL KEYWORD, tablodaki satırları veya demetleri benzersiz bir şekilde tanımlamak için kullanılan tek bir sütun veya birden çok sütunun birleşimidir. SQL KEYWORD, yinelenen bilgileri tanımlamak için kullanılır ve ayrıca veritabanındaki birden çok tablo arasında bir ilişki kurulmasına yardımcı olur.
Not: Bir kaydı benzersiz olarak tanımlamak için kullanılmayan bir tablodaki sütunlara keyword olmayan sütunlar denir.
Primary Key (benzersiz anahtar) nedir?
Birincil (Primary), bir veritabanı kaydını benzersiz şekilde tanımlamak için kullanılan tek bir sütun değeridir.
Aşağıdaki özelliklere sahiptir:
- Primary Key (Birincil anahtar) NULL olamaz
- Primary Key (Birincil anahtar) değeri benzersiz olmalıdır
- Primary Key (Birincil anahtar) değerleri nadiren değiştirilmelidir
- Yeni bir kayıt eklendiğinde Primary Keye (Birincil anahtara) bir değer verilmelidir.
Composite Key Nedir?
Composite Key (Bileşik anahtar), bir kaydı eşsiz bir şekilde tanımlamak için kullanılan birden çok sütundan oluşan birincil anahtardır.
Veritabanımızda aynı adı taşıyan iki kişi var Ahmet YILDIRIM, ama farklı yerlerde yaşıyorlar.
Bu nedenle, bir kaydı benzersiz bir şekilde tanımlamak için hem adı hem de adres gerekir. Bu bir bileşik anahtardır.
İkinci normal form 2NF'ye geçelim.
2NF (İkinci Normal Form) Kuralları
- Kural 1- 1NF'de olun
- Kural 2- İşlevsel olarak aday anahtar ilişkisinin herhangi bir alt kümesine bağlı olmayan Tek Sütunlu Birincil Anahtar
Yukarıdaki tabloyu bölümlere ayırmadıkça 2. Normalizasyon formunda basit veritabanımızı yapmak için ilerleyemeyeceğimiz açıktır.
1NF tablomuzu iki tabloya ayırdık. Tablo 1 ve Tablo2. Tablo 1 üye bilgilerini içerir. Tablo 2, kiralanan filmlerle ilgili bilgileri içerir.
Tablo 1 için primary key olan uye_id adında yeni bir sütun ekledik. Kayıtlar, üyelik kimliğini kullanılarak Tablo 1'de benzersiz bir şekilde tanımlanabilir.
Veritabanı – Foreign Key (Yabancı anahtar)
Tablo 2'de, Üyelik Kimliği Foreign Key dir.
Foreign Key, başka bir Tablonun primary key ine başvuruyor. Tablolarınızı bağlamanıza yardımcı olur.
- Foreign Key, primary key den farklı bir ada sahip olabilir.
- Bir tablodaki satırların değerleri diğer tabloda karşılık gelen satırlara sahip olmasını sağlar.
- Primary key in aksine, benzersiz olmaları gerekmez. Çoğu zaman değillerdir.
- Primary keyler boş olamaz olsa bile foreign keyler boş olabilir.
Neden bir foreign key ihtiyacınız var?
Bir aceminin Tablo 2'ye aşağıdaki gibi bir kayıt eklediğini varsayalım.
Yabancı anahtarınıza yalnızca üst tablodaki benzersiz anahtarda bulunan değerleri ekleyebilirsiniz. Bu, referans bütünlüğüne yardımcı olur.
Yukarıdaki sorun, Tablo2'deki üye id, Tablo1'deki üye idnin anahtarı olarak eşleştirilmesiyle aşılabilir.
Şimdi, birisi üye id alanına üst tabloda olmayan bir değer girmeye çalışırsa, bir hata gösterir.
Geçişli işlevsel bağımlılıklar nelerdir?
Geçişli işlevsel bağımlılık, anahtarı olmayan bir sütunu değiştirirken, anahtarı olmayan diğer sütunlardan herhangi birinin değişmesine neden olabilir.
Tablo 1'i göz önünde bulundurun. Anahtarı olmayan sütunun ismini değiştirmek, cinsiyeti değiştirebilir.
3NF (Üçüncü Normal Form) Kuralları
- Kural 1- 2NF'de olun
- Kural 2- Geçişli işlevsel bağımlılıkları yoktur
2NF tablomuzu 3NF'ye taşımak için yine tablomuzu bölmemiz gerekiyor.
3NF Örneği
Aşağıda SQL veritabanında bir 3NF örneği verilmiştir:
Tablolarımızı tekrar böldük ve cinsiyetleri depolayan yeni bir tablo oluşturduk.
Geçişli işlevsel bağımlılıklar yoktur. Bu nedenle tablomuz 3NF'dedir.
Tablo 3'te cinsiyet id si birincil anahtardır ve Tablo 1'de cinsiyet id, Tablo 3'teki birincil anahtara yabancıdır.
Şimdi küçük örneğimiz, DBMS'de daha yüksek normal form normalleştirme türlerini elde etmek için daha fazla ayrıştırılamayacak bir seviyede. Aslında, daha yüksek normalleştirme formlarında karmaşık veritabanlarında normalde verilerin normalleştirilmesinin sonraki düzeylere geçmek için ayrı çabaya ihtiyaç vardır. Ancak, aşağıda kısaca veritabanların'daki bir sonraki normalleştirme seviyelerini tartışacağız.
BCNF (Boyce-Codd Normal Form)
Bir veritabanı 3. Normal Formda olsa bile, birden fazla Aday Anahtarı varsa yine de anormallikler ortaya çıkacaktır.
Bazen BCNF, 3.5 Normal Form olarak da adlandırılır.
4NF (Dördüncü Normal Form) Kuralları
Hiçbir veritabanı tablosu örneği, ilgili varlığı tanımlayan iki veya daha fazla bağımsız ve çok değerli veri içermiyorsa, 4. Normal Formdadır.
5NF (Beşinci Normal Form) Kuralları
Bir tablo ancak 4NF'deyse 5. Normal Formdadır ve veri kaybı olmadan herhangi bir sayıda daha küçük tablolara ayrıştırılamaz.
6NF (Altıncı Normal Form)
6. Normal Form henüz standardize edilmemiştir, ancak bir süredir veritabanı uzmanları tarafından tartışılmaktadır. Umarım yakın gelecekte 6. Normal Form için net ve standart bir tanımımız olur
SQL Normalizasyonu için hepsi bukadar.
Özet
- Veritabanı tasarımı, bir kurumsal sistemin veri gereksinimlerini karşılayan bir veritabanı yönetim sisteminin başarılı bir şekilde uygulanması için kritik öneme sahiptir.
- Veritabanların’da normalleştirme, uygun maliyetli ve daha iyi güvenlik modellerine sahip veritabanı sistemleri üretmeye yardımcı olan bir süreçtir.
- İşlevsel bağımlılıklar, veriyi normalleştirme sürecinin çok önemli bir bileşenidir.
- Çoğu veritabanı sistemi, veritabanların'daki üçüncü normal formlara kadar normalleştirilmiş veritabanıdır.
- Benzersiz bir şekilde tanımlanan birincil anahtar, bir tablodaki kayıttır ve boş olamaz.
- Forign key, tabloyu bağlamaya yardımcı olur ve bir primary key’e başvurur.