database normalization tutorial
Bu Eğitimde Veritabanı Normalleştirmesinin ve 1NF 2NF 3NF ve BCNF gibi çeşitli Normal Formların SQL Kod Örnekleriyle Açıklanması:
Veritabanı Normalleştirme, veritabanı şeması tasarlamak için kullanılan iyi bilinen bir tekniktir.
Normalleştirme tekniğini uygulamanın temel amacı, verilerin fazlalığını ve bağımlılığını azaltmaktır. Normalleştirme, bu tablolar arasında mantıksal bir ilişki tanımlayarak büyük tabloları birden çok küçük tabloya bölmemize yardımcı olur.
Ne öğreneceksin:
- Veritabanı Normalleştirme Nedir?
- Sonuç
Veritabanı Normalleştirme Nedir?
Veritabanı normalleştirme veya SQL normalleştirme, ilgili verileri tek bir tabloda gruplamamıza yardımcı olur. Herhangi bir öznitelik verisi veya dolaylı olarak ilgili veriler farklı tablolara yerleştirilir ve bu tablolar üst ve alt tablolar arasındaki mantıksal bir ilişkiyle bağlantılıdır.
1970 yılında, Edgar F. Codd normalleşme kavramını ortaya attı. 'Birinci Normal Form (1NF)' önerdiği 'Büyük Paylaşılan Bankalar için İlişkisel Veri Modeli' adlı bir makale paylaştı.
DBMS Normalleştirmesinin Avantajları
Veritabanı Normalleştirme aşağıdaki temel avantajları sağlar:
- Normalleştirme, verileri yalnızca tek bir yerde depolayarak verilerin yinelenmesini önlediği için veri tutarlılığını artırır.
- Normalleştirme, benzer veya ilgili verilerin aynı şema altında gruplanmasına yardımcı olur ve böylece verilerin daha iyi gruplandırılmasına neden olur.
- Normalleştirme, dizinler daha hızlı oluşturulabildiğinden aramayı daha hızlı geliştirir. Dolayısıyla, normalleştirilmiş veritabanı veya tablo OLTP (Çevrimiçi İşlem İşleme) için kullanılır.
Veritabanı Normalleştirmesinin Dezavantajları
DBMS Normalizasyonunun aşağıdaki dezavantajları vardır:
- Örneğin bir ürün veya çalışan için ilişkili verileri tek bir yerde bulamıyoruz ve birden fazla masaya katılmamız gerekiyor. Bu, verilerin alınmasında gecikmeye neden olur.
- Bu nedenle Normalleştirme, OLAP işlemlerinde (Çevrimiçi Analitik İşleme) iyi bir seçenek değildir.
Devam etmeden önce aşağıdaki terimleri anlayalım:
- Varlık: Varlık, böyle bir nesneyle ilişkili verilerin tabloda depolandığı gerçek hayattaki bir nesnedir. Bu tür nesnelere örnek olarak çalışanlar, bölümler, öğrenciler vb. Verilebilir.
- Öznitellikler: Nitelikler, Varlık hakkında bazı bilgiler veren kuruluşun özellikleridir. Örneğin, tablolar varlıklarsa, sütunlar onların öznitelikleridir.
Normal Form Türleri
# 1) 1NF (Birinci Normal Form)
Tanım olarak, yinelenen sütunları veya veri grupları olmayan bir varlık İlk Normal Form olarak adlandırılabilir. Birinci Normal Formda her sütun benzersizdir.
Aşağıda, Çalışanlar ve Departman tablomuz ilk normal formda (1NF) olsaydı nasıl görünürdü:
| empNum | Soyadı | İsim | deptName | DeptCity | deptCountry |
|---|---|---|---|---|---|
| 1001 | Andrews | Jack | Hesaplar | New York | Amerika Birleşik Devletleri |
| 1002 | Schwatz | Mike | Teknoloji | New York | Amerika Birleşik Devletleri |
| 1009 | Fincan | Harry | İK | Berlin | Almanya |
| 1007 | Harvey | Parker | Yönetici | Londra | Birleşik Krallık |
| 1007 | Harvey | Parker | İK | Londra | Birleşik Krallık |
Burada, hem Çalışanlar hem de Departman tablolarının tüm sütunları tek bir yerde toplanmıştır ve tüm veriler tek bir yerde mevcut olduğundan deptNum gibi sütunların bağlanmasına gerek yoktur.
Ancak, içinde gerekli tüm sütunların bulunduğu böyle bir tablonun yalnızca yönetilmesi zor olmakla kalmaz, aynı zamanda işlemlerin gerçekleştirilmesi de zor ve depolama açısından da verimsiz olur.
# 2) 2NF (İkinci Normal Form)
Tanım olarak, 1NF olan ve özniteliklerinden biri olan bir varlık birincil anahtar olarak tanımlanır ve kalan öznitelikler birincil anahtara bağlıdır.
Aşağıda, çalışanların ve departman tablosunun nasıl görüneceğine dair bir örnek verilmiştir:
Çalışan Tablosu:
| empNum | Soyadı | İsim |
|---|---|---|
| 1001 | Andrews | Jack |
| 1002 | Schwatz | Mike |
| 1009 | Fincan | Harry |
| 1007 | Harvey | Parker |
| 1007 | Harvey | Parker |
Bölüm Tablosu:
| deptNum | deptName | DeptCity | deptCountry |
|---|---|---|---|
| bir | Hesaplar | New York | Amerika Birleşik Devletleri |
| iki | Teknoloji | New York | Amerika Birleşik Devletleri |
| 3 | İK | Berlin | Almanya |
| 4 | Yönetici | Londra | Birleşik Krallık |
EmpDept Tablosu:
| empDeptID | empNum | deptNum |
|---|---|---|
| bir | 1001 | bir |
| iki | 1002 | iki |
| 3 | 1009 | 3 |
| 4 | 1007 | 4 |
| 5 | 1007 | 3 |
Burada 1NF formundaki tabloyu üç farklı tabloya böldüğümüzü görebiliriz. Çalışanlar tablosu, bir şirketin tüm çalışanlarıyla ilgili bir varlıktır ve öznitelikleri her çalışanın özelliklerini açıklar. Bu tablonun birincil anahtarı empNum'dur.
Benzer şekilde, Departmanlar tablosu bir şirketteki tüm departmanlarla ilgili bir varlıktır ve öznitelikleri her departmanın özelliklerini açıklar. Bu tablonun birincil anahtarı deptNum'dur.
Üçüncü tabloda, her iki tablonun da birincil anahtarlarını birleştirdik. Çalışanlar ve Bölümler tablolarının birincil anahtarları, bu üçüncü tabloda Yabancı anahtarlar olarak anılır.
Kullanıcı, 1NF'de sahip olduğumuza benzer bir çıktı istiyorsa, kullanıcının birincil anahtarları kullanarak üç tabloyu da birleştirmesi gerekir.
Örnek bir sorgu aşağıda gösterildiği gibi görünecektir:
SELECT empNum, lastName, firstName, deptNum, deptName, deptCity, deptCountry FROM Employees A, Departments B, EmpDept C WHERE A.empNum = C.empNum AND B.deptNum = C.deptNum WITH UR; # 3) 3NF (Üçüncü Normal Biçim)
Tanım gereği, tablo / varlık zaten ikinci normal formdaysa ve tablonun / varlığın sütunları geçişli olmayan bir şekilde birincil anahtara bağlıysa, tablo üçüncü normal olarak kabul edilir.
Aşağıdaki örnek yardımıyla geçişsiz bağımlılığı anlayalım.
Adında bir tablo söyleyin, Müşteri aşağıdaki sütunlara sahiptir:
Müşteri Kimliği - Benzersiz bir müşteriyi tanımlayan Birincil Anahtar
MüşteriZIP - Müşterinin ikamet ettiği yerin posta kodu
MüşteriŞehir - Müşterinin ikamet ettiği şehir
Yukarıdaki durumda, CustomerCity sütunu CustomerZIP sütununa bağlıdır ve CustomerZIP sütunu CustomerID'ye bağlıdır.
Yukarıdaki senaryoya, CustomerCity sütununun CustomerID'deki geçişli bağımlılığı, yani birincil anahtar olarak adlandırılır. Geçişli bağımlılığı anladıktan sonra, şimdi bu bağımlılıkla ilgili sorunu tartışalım.
MüşteriZIP'sini, CustomerCity'yi güncellemeden farklı bir şehrin posta koduna güncellemek için tabloda istenmeyen bir güncellemenin yapıldığı ve dolayısıyla veritabanını tutarsız bir durumda bıraktığı olası bir senaryo olabilir.
Bu sorunu düzeltmek için, başka bir tablo oluşturarak yapılabilecek geçişli bağımlılığı kaldırmamız gerekiyor, örneğin iki sütun içeren CustZIP tablosu, yani CustomerZIP (Birincil Anahtar olarak) ve CustomerCity.
Müşteri tablosundaki CustomerZIP sütunu, CustZIP tablosundaki CustomerZIP için bir yabancı anahtardır. Bu ilişki, CustomerCity'de değişiklik yapılmadan bir CustomerZIP'in güncellendiği güncellemelerde herhangi bir anormallik olmamasını sağlar.
# 4) Boyce-Codd Normal Form (3.5 Normal Form)
Tanım gereği tablo Boyce-Codd Normal Formu olarak kabul edilir, eğer zaten Üçüncü Normal Formdaysa ve A ile B arasındaki her işlevsel bağımlılık için A bir süper anahtar olmalıdır.
Bu tanım biraz karmaşık geliyor. Daha iyi anlamak için onu kırmaya çalışalım.
çalıştırılabilir bir jar dosyası nasıl açılır
- İşlevsel Bağımlılık: Bir tablonun öznitelikleri veya sütunları, aynı tablonun başka bir öznitelik (ler) ini veya sütunlarını benzersiz bir şekilde tanımladığında, bir tablonun özniteliklerinin veya sütunlarının işlevsel olarak bağımlı olduğu söylenir.
Örneğin, empNum veya Employee Number sütunu, Employee tablosundaki Employee Name, Employee Maaş vb. gibi diğer sütunları benzersiz şekilde tanımlar. - Süper Anahtar: Bir tablodaki tek bir satırı benzersiz şekilde tanımlayabilen tek bir anahtar veya birden çok anahtar grubu Süper Anahtar olarak adlandırılabilir. Genel anlamda Kompozit Anahtarlar gibi anahtarları biliyoruz.
Üçüncü Normal Form ile ilgili bir sorun olduğunda ve Boyce-Codd Normal Formunun nasıl kurtarmaya geldiğini anlamak için aşağıdaki senaryoyu ele alalım.
| empNum | İsim | EmpCity | deptName | deptHead |
|---|---|---|---|---|
| 1001 | Jack | New York | Hesaplar | Raymond |
| 1001 | Jack | New York | Teknoloji | Donald |
| 1002 | Harry | Berlin | Hesaplar | Samara |
| 1007 | Parker | Londra | İK | Elizabeth |
| 1007 | Parker | Londra | Altyapı | Tom |
Yukarıdaki örnekte, empNum 1001 ve 1007'ye sahip çalışanlar iki farklı bölümde çalışmaktadır. Her bölümün bir bölüm başkanı vardır. Her departman için birden fazla departman başkanı olabilir. Muhasebe departmanı için olduğu gibi, Raymond ve Samara departmanların iki başkanıdır.
Bu durumda, empNum ve deptName süper anahtarlardır, bu da deptName'in bir asal öznitelik olduğunu gösterir. Bu iki sütuna dayanarak, her bir satırı benzersiz bir şekilde tanımlayabiliriz.
Ayrıca, deptName, deptHead'e bağlıdır, bu da deptHead'in asal olmayan bir öznitelik olduğunu gösterir. Bu kriter, tablonun BCNF'nin bir parçası olmasını engeller.
Bunu çözmek için tabloyu aşağıda belirtildiği gibi üç farklı tabloya ayıracağız:
Çalışan Tablosu:
| empNum | İsim | EmpCity | deptNum |
|---|---|---|---|
| 1001 | Jack | New York | D1 |
| 1001 | Jack | New York | D2 |
| 1002 | Harry | Berlin | D1 |
| 1007 | Parker | Londra | D3 |
| 1007 | Parker | Londra | D4 |
Bölüm Tablosu:
| deptNum | deptName | deptHead |
|---|---|---|
| D1 | Hesaplar | Raymond |
| D2 | Teknoloji | Donald |
| D1 | Hesaplar | Samara |
| D3 | İK | Elizabeth |
| D4 | Altyapı | Tom |
# 5) Dördüncü Normal Form (4 Normal Form)
Tanım olarak, bir tablo, ilgili varlığı açıklayan iki veya daha fazla bağımsız veriye sahip değilse Dördüncü Normal Formdadır.
# 6) Beşinci Normal Form (5 Normal Form)
Bir tablo, ancak Dördüncü Normal Biçim koşullarını karşılıyorsa Beşinci Normal Biçimde düşünülebilir ve herhangi bir veri kaybı olmadan birden çok tabloya bölünebilir.
Sıkça Sorulan Sorular ve Cevaplar
S # 1) Bir Veritabanında Normalleştirme nedir?
Cevap: Veritabanı Normalleştirme bir tasarım tekniğidir. Bunu kullanarak, verileri daha küçük ve daha alakalı tablolara bölerek gereksiz verileri ve verilerin bağımlılığını azaltmak için veritabanında şemalar tasarlayabilir veya yeniden tasarlayabiliriz.
S # 2) Farklı Normalleştirme türleri nelerdir?
Cevap: Aşağıda, veritabanı şemalarını tasarlamak için kullanılabilecek farklı normalleştirme teknikleri bulunmaktadır:
- İlk Normal Form (1NF)
- İkinci Normal Form (2NF)
- Üçüncü Normal Form (3NF)
- Boyce-Codd Normal Formu (3.5NF)
- Dördüncü Normal Form (4NF)
- Beşinci Normal Form (5NF)
S # 3) Normalleştirmenin Amacı Nedir?
Cevap: Normalleştirmenin birincil amacı, veri fazlalığını azaltmaktır, yani veriler yalnızca bir kez saklanmalıdır. Bu, aynı verileri iki farklı tabloda saklamaya çalıştığımızda ortaya çıkabilecek herhangi bir veri anormalliğini önlemek içindir, ancak değişiklikler yalnızca birine uygulanır, diğerine uygulanmaz.
S # 4) Denormalizasyon nedir?
Cevap: Denormalizasyon, veritabanının performansını artırmaya yönelik bir tekniktir. Bu teknik, verilerin fazlalığını ortadan kaldıran normalleştirilmiş veritabanının aksine, veritabanına fazladan veri ekler.
Bu, birden çok tablodan veri almak için bir JOIN çalıştırmanın pahalı bir mesele olduğu devasa veritabanlarında yapılır. Böylece, JOIN işlemlerinden kaçınmak için fazlalık veriler birden çok tabloda depolanır.
Sonuç
Şimdiye kadar hepimiz üç veritabanı normalleştirme formundan geçtik.
Teorik olarak Boyce-Codd Normal Form, 4NF, 5NF gibi daha yüksek veritabanı normalleştirme biçimleri vardır. Bununla birlikte, 3NF, üretim veritabanlarında yaygın olarak kullanılan normalleştirme şeklidir.
Mutlu Okumalar !!
Önerilen Kaynaklar
- JMeter ile Veritabanı Testi
- MongoDB Veritabanı Yedeklemesi Oluştur
- MongoDB Veritabanı Oluşturma Eğitimi
- Karmaşık Veri Modelleri Oluşturmak için En İyi 10 Veritabanı Tasarım Aracı
- MongoDB Performansı: Kilitleme Performansı, Sayfa Hataları ve Veritabanı Profili Oluşturma
- Altibase Açık Kaynak İlişkisel Veritabanı İncelemesi
- Sorguları ve Performansı İzleme için MongoDB Veritabanı Profilcisi
- Oracle Database Nasıl Test Edilir