Veritabanı normal formları nelerdir ve örnekler verebilir misiniz? [kapalı]


277

İlişkisel veritabanı tasarımında, veri fazlalığını azaltmak ve veri bütünlüğünü iyileştirmek için sütunları (öznitelikleri) ve tabloları (ilişkileri) düzenleme süreci olan veritabanı normalizasyonu veya basitçe normalleştirme kavramı vardır. ( Wikipedia'da yazıldığı gibi ).

Çoğu makale biraz teknik ve dolayısıyla daha zor anlaşılır olduğundan, birinden 1NF, 2NF, 3NF, hatta 3.5NF (Boyce-Codd) ne anlama geldiğine dair örneklere dayanarak daha kolay anlaşılır bir açıklama yazmasını istiyorum.

Yanıtlar:


435

1NF normal formların en temelidir - tablodaki her hücre yalnızca bir bilgi parçası içermelidir ve yinelenen satır olamaz.

2NF ve 3NF tamamen birincil anahtara bağımlı olmakla ilgilidir. Birincil anahtarın birden çok sütundan oluşabileceğini hatırlayın. Chris'in yanıtında söylediği gibi:

Veriler [1NF] anahtarına, tüm anahtar [2NF] ve [3NF] anahtarından başka bir şeye bağlı değildir (bu yüzden bana yardım et Codd ).

2NF

Belirli bir dönemde alınan dersleri içeren bir tablonuz olduğunu ve aşağıdaki verilere sahip olduğunuzu varsayalım:

|-----Primary Key----|               uh oh |
                                           V
CourseID | SemesterID | #Places  | Course Name  |
------------------------------------------------|
IT101    |   2009-1   | 100      | Programming  |
IT101    |   2009-2   | 100      | Programming  |
IT102    |   2009-1   | 200      | Databases    |
IT102    |   2010-1   | 150      | Databases    |
IT103    |   2009-2   | 120      | Web Design   |

Bu 2NF'de değildir , çünkü dördüncü sütun tüm anahtara değil, yalnızca bir kısmına dayanır . Kurs adı Kursun Kimliğine bağlıdır, ancak hangi yarıyılda alındığıyla ilgisi yoktur. Gördüğünüz gibi, yinelenen bilgilerimiz var - birkaç satır bize IT101'in programlandığını ve IT102'nin Veritabanları olduğunu söylüyor. Bu yüzden, kursun adını CourseID'in ENTIRE anahtarı olduğu başka bir tabloya taşıyarak düzeltiriz.

Primary Key |

CourseID    |  Course Name |
---------------------------|
IT101       | Programming  |
IT102       | Databases    |
IT103       | Web Design   |

Artıklık yok!

3NF

Tamam, diyelim ki kursun öğretmeninin adını ve onlar hakkında bazı detayları RDBMS'ye ekliyoruz:

|-----Primary Key----|                           uh oh |
                                                       V
Course  |  Semester  |  #Places   |  TeacherID  | TeacherName  |
---------------------------------------------------------------|
IT101   |   2009-1   |  100       |  332        |  Mr Jones    |
IT101   |   2009-2   |  100       |  332        |  Mr Jones    |
IT102   |   2009-1   |  200       |  495        |  Mr Bentley  |
IT102   |   2010-1   |  150       |  332        |  Mr Jones    |
IT103   |   2009-2   |  120       |  242        |  Mrs Smith   |

Şimdi umarım TeacherName'in TeacherID'ye bağımlı olduğu açıktır - bu yüzden bu 3NF'de değildir . Bunu düzeltmek için, 2NF'de yaptığımızla aynı şeyi yapıyoruz - TeacherName alanını bu tablodan çıkarın ve anahtar olarak TeacherID olan kendi başına koyun.

 Primary Key |

 TeacherID   | TeacherName  |
 ---------------------------|
 332         |  Mr Jones    |
 495         |  Mr Bentley  |
 242         |  Mrs Smith   |

Artıklık yok !!

Hatırlanması gereken önemli bir şey, eğer bir şey 1NF'de değilse, 2NF veya 3NF'de de olmadığıdır. Yani her ek Normal Form gerektirir şeyi alt normal formlar olduğunu, artı gereken bazı ekstra koşullar, tüm yerine getirilmesi.


9
Sadece şeyler arasındaki ilişki açısından düşünün. Size "IT101 ID'si olan kursun adı nedir?" Diye sorarsam, bana bir cevap verebilirsiniz, değil mi? Benzer şekilde, size "hangi öğretmen 332 kimliğine sahiptir?" bana hangi öğretmenin olduğunu söyleyebilirsin. Bu nedenle, ders adı kimliğine bağlıdır.
Smashery

9
Ancak, başka yöne gidemezsiniz - eğer size "Bay Jones'un kimliği nedir?" iki Bay Jones olabileceğinden, benzersiz bir cevap veremeyebilirsiniz. Bu nedenle kimlik, isme bağlı değildir - kimliğe bağlı olan addır.
Smashery

2
Bunu bu şekilde de düşünebilirsiniz - aşağıdaki üçüncü tabloya bakın (içinde ÖğretmenAdı olan ilk tablo). Rowlk satırda "Bay Jones" a sahip olmamý, sonra ikinci satýrda "Bay Bloggs" u koymamý engellemem ne olacak? Ben olmamalıdır onlar ettik çünkü her ikisi de 332. kimliğini var bunu yapmak için izin verilmesi
Smashery

30
@instantsetsuna - Tam açıklama: Bazı mahkemelerde, bir tanığa "Gerçeği, tüm gerçeği ve gerçek dışında hiçbir şeyi söyleyemeyeceklerini sordum; çünkü Tanrı doğruyu söyleyip söylemediğinizi bilmek söz konusu olduğunda otorite sahibi olan olarak kabul edilir. Veritabanlarında "Veriler anahtara, tüm anahtara ve anahtardan başka bir şeye bağlı değildir, bu yüzden bana Codd'a yardım et" diyebiliriz. Ted Codd, ilişkisel veritabanları fikrini ortaya çıkaran kişidir - anahtarlara dayanan şeyler, vb.
Ağustos'ta Smashery

5
@Smashery 2NF ve 3NF arasındaki fark nedir?
Zo

119

Kesin ifadeler için hiç iyi bir hafızam olmadı, ama veritabanı sınıfımda profesör her zaman şöyle bir şey söyledi:

Veriler [1NF] anahtarına, tüm anahtar [2NF] 'ye ve [3NF] anahtarından başka bir şeye bağlı değildir.


72
... bana yardım et Codd. en.wikipedia.org/wiki/Ted_Codd
Smashery

6
Peki arasındaki fark The data depends on the key [1NF], nothing but the key [3NF]nedir? 1 cümle cevabı cevabı netleştirmediği, ancak ziyaretçileri karıştırdığı için lütfen bizi karıştırmayın!
Pratik

2
"tablodaki her hücre yalnızca bir bilgi parçası içermelidir ve yinelenen satır olamaz." - "Veriler anahtara bağlı" nın hepsiyle nasıl eşleştiğini anlamıyorum.
Simon Forsberg

46

İşte hızlı, kuşkusuz kasaplı bir cevap, ama bir cümlede:

1NF: Tablonuz sıralanmamış bir veri kümesi olarak düzenlenmiş ve yinelenen sütun yok.

2NF: Başka bir sütun nedeniyle tablonuzdaki bir sütundaki verileri tekrarlamıyorsunuz.

3NF: Tablonuzdaki her sütun yalnızca tablonuzun anahtarıyla ilgilidir - bir tabloda tablonuzda anahtar olmayan başka bir sütunu tanımlayan bir sütun olmazdı.

Daha fazla ayrıntı için bkz. Wikipedia ...


1
Anlayabildiğim kadarıyla, 1NF'nin yinelenen gruplardan kaçınması yinelenen sütunları değil , aynı özellik için rasgele sayıda tekrarlanan değeri temsil eden, yani atomik olmayan tek sütunları ifade eder. Bunu örneğin (1) stackoverflow.com/questions/23194292/… / (2) stackoverflow.com/questions/26357276/…
underscore_d

34

1NF: Sütun başına yalnızca bir değer

2NF: Tablodaki birincil olmayan tüm anahtar sütunları, birincil anahtarın tamamına bağlı olmalıdır.

3NF: Tablodaki birincil olmayan anahtar sütunlarının tümü DOĞRUDAN birincil anahtarın tamamına bağlı olmalıdır.

Ben üzerinden daha detaylı bir makale yazdım buraya


Çünkü siz atıfta bulunmadınız. Cevabı atıfta bulunmak için düzenledim.
Robert Harvey

Mümkün olan her durumda, cevabın kendisine örneği ekleyin. Sıradan bir kullanıcı, blog bağlantısını tıklamak zorunda kalmadan cevabınızı okuyabilmeli ve ondan bir miktar değer alabilmelidir. Cevap, başka bir deyişle, müstakil olmalıdır.
Robert Harvey

Bunu aklımda tutacağım. Teşekkür ederim :)
Arcturus

3
Ayrıca, bu sorunun iki yaşında olduğunu ve OP tarafından kabul edilmiş olarak işaretlenmiş, oldukça güncel bir cevabı olduğunu unutmayın. Geç cevaplar, OP'ye gerçek bir katma değer sağlayıp sağlamadıklarını değerlendirmek için topluluk tarafından daha dikkatli bir şekilde incelenir.
Robert Harvey

3
@Arcturus makaleyi okudu, hala normalizasyon için daha iyi açıklamalardan biri.
Olian04 13:17
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.