Normal formlar

Veritabanı Tasarımı

Lis Sulmont

Curriculum Manager

Normalleştirme

Tekrarlayan veri gruplarını belirleyin ve bunlar için yeni tablolar oluşturun

Daha resmî bir tanım:

Normalleştirmenin amaçları:

  • İlişkisel bir şemadaki fazlalık düzeyini belirlemek
  • Fazlalığı kaldırmak için şemaları dönüştürme mekanizmaları sağlamak
1 Database Design, 2nd Edition by Adrienne Watt
Veritabanı Tasarımı

Normal formlar (NF)

En azdan en çok normalleştirilmişe doğru sıralı:

  • Birinci normal form (1NF)
  • İkinci normal form (2NF)
  • Üçüncü normal form (3NF)
  • Temel anahtar normal formu (EKNF)
  • Boyce-Codd normal formu (BCNF)

$$

  • Dördüncü normal form (4NF)
  • Temel demet normal formu (ETNF)
  • Beşinci normal form (5NF)
  • Alan-anahtar normal formu (DKNF)
  • Altıncı normal form (6NF)
1 https://en.wikipedia.org/wiki/Database_normalization
Veritabanı Tasarımı

1NF kuralları

  • Her kayıt benzersiz olmalı — yinelenen satır yok
  • Her hücre tek bir değer tutmalı

İlk veriler

| Student_id | Student_Email   | Courses_Completed                                        | 
|------------|-----------------|----------------------------------------------------------|
| 235        | [email protected]   | Introduction to Python, Intermediate Python              |
| 455        | [email protected] | Cleaning Data in R                                       | 
| 767        | [email protected] | Machine Learning Toolbox, Deep Learning in Python        |
Veritabanı Tasarımı

1NF biçiminde

| Student_id | Student_Email   | 
|------------|-----------------|
| 235        | [email protected]   | 
| 455        | [email protected] | 
| 767        | [email protected] | 
| Student_id | Completed                |
|------------|--------------------------|
| 235        | Introduction to Python   | 
| 235        | Intermediate Python      | 
| 455        | Cleaning Data in R       | 
| 767        | Machine Learning Toolbox | 
| 767        | Deep Learning in Python  | 
Veritabanı Tasarımı

2NF

  • 1NF'yi sağlamalıdır VE
    • Birincil anahtar tek sütunsa
      • otomatik olarak 2NF'yi sağlar
    • Bileşik birincil anahtar varsa
      • anahtar olmayan her sütun tüm anahtarlara bağımlı olmalıdır

İlk veriler

| Student_id (PK) | Course_id (PK) | Instructor_id | Instructor    | Progress |
|-----------------|----------------|---------------|---------------|----------|
| 235             | 2001           | 560           | Nick Carchedi | .55      |
| 455             | 2345           | 658           | Ginger Grant  | .10      |
| 767             | 6584           | 999           | Chester Ismay | 1.00     |
Veritabanı Tasarımı

2NF biçiminde

| Student_id (PK) | Course_id (PK) | Percent_Completed |
|-----------------|----------------|-------------------|
| 235             | 2001           | .55               |
| 455             | 2345           | .10               |
| 767             | 6584           | 1.00              |
| Course_id (PK) | Instructor_id | Instructor    |
|----------------|---------------|---------------|
| 2001           | 560           | Nick Carchedi |
| 2345           | 658           | Ginger Grant  |
| 6584           | 999           | Chester Ismay |
Veritabanı Tasarımı

3NF

  • 2NF'yi sağlar
  • Hiçbir geçişli bağımlılık yok: anahtar olmayan sütunlar diğer anahtar olmayan sütunlara bağımlı olamaz

İlk veriler

| Course_id (PK) | Instructor_id | Instructor    | Tech   |
|----------------|---------------|---------------|--------|
| 2001           | 560           | Nick Carchedi | Python |
| 2345           | 658           | Ginger Grant  | SQL    |
| 6584           | 999           | Chester Ismay | R      |
Veritabanı Tasarımı

3NF biçiminde

| Course_id (PK) | Instructor    | Tech   |
|----------------|---------------|--------|
| 2001           | Nick Carchedi | Python |
| 2345           | Ginger Grant  | SQL    |
| 6584           | Chester Ismay | R      |
| Instructor_id | Instructor    | 
|---------------|---------------|
| 560           | Nick Carchedi | 
| 658           | Ginger Grant  | 
| 999           | Chester Ismay |
Veritabanı Tasarımı

Veri anomalileri

Yeterince normalleştirmezsek ne riske gireriz?

1. Güncelleme anomali

2. Ekleme anomali

3. Silme anomali

Veritabanı Tasarımı

Güncelleme anomali

Güncellemede veri fazlalığının yol açtığı tutarsızlık

| Student_ID | Student_Email   | Enrolled_in             | Taught_by           |
|------------|-----------------|-------------------------|---------------------|
| 230        | [email protected]  | Cleaning Data in R      | Maggie Matsui       |
| 367        | [email protected] | Data Visualization in R | Ronald Pearson      |
| 520        | [email protected]   | Introduction to Python  | Hugo Bowne-Anderson |
| 520        | [email protected]   | Arima Models in R       | David Stoffer       |

Öğrenci 520'nin e-postasını güncellemek için:

  • Birden çok kaydı güncellemek gerekir; aksi halde tutarsızlık olur
  • Güncelleyen kişi fazlalığı bilmelidir
Veritabanı Tasarımı

Ekleme anomali

Eksik öznitelikler nedeniyle kayıt eklenememesi

| Student_ID | Student_Email   | Enrolled_in             | Taught_by           |
|------------|-----------------|-------------------------|---------------------|
| 230        | [email protected]  | Cleaning Data in R      | Maggie Matsui       |
| 367        | [email protected] | Data Visualization in R | Ronald Pearson      |
| 520        | [email protected]   | Introduction to Python  | Hugo Bowne-Anderson |
| 520        | [email protected]   | Arima Models in R       | David Stoffer       |

Herhangi bir derse kaydolmamış, sadece kayıt olan bir öğrenciyi ekleyememe

Veritabanı Tasarımı

Silme anomali

Kayıt(lar)ın silinmesi, istenmeyen veri kaybına yol açar

| Student_ID | Student_Email   | Enrolled_in             | Taught_by           |
|------------|-----------------|-------------------------|---------------------|
| 230        | [email protected]  | Cleaning Data in R      | Maggie Matsui       |
| 367        | [email protected] | Data Visualization in R | Ronald Pearson      |
| 520        | [email protected]   | Introduction to Python  | Hugo Bowne-Anderson |
| 520        | [email protected]   | Arima Models in R       | David Stoffer       |

Öğrenci 230'u silersek, Cleaning Data in R verileri ne olur?

Veritabanı Tasarımı

Veri anomalileri

Yeterince normalleştirmezsek ne riske gireriz?

1. Güncelleme anomali

2. Ekleme anomali

3. Silme anomali

Veritabanı ne kadar normalleştirilirse, veri anomalilerine o kadar az yatkın olur

Son videodaki normalleştirmenin dezavantajlarını unutmayın

Veritabanı Tasarımı

Hadi pratik yapalım!

Veritabanı Tasarımı

Preparing Video For Download...