3NF'ye Kadar Normalleştirme
Ortadan kaldırdıkları tutarsızlıklarla birlikte birinci, ikinci ve üçüncü normal biçim.
3NF'ye Kadar Normalleştirme, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.
Mülakat Yapanlar Normalleştirme Hakkında Neden Soru Sorar
Normalleştirme, veritabanı modellemesinin temel taşlarından biridir ve mülakat yapanlar bunu, tasarım düzeyinde veri bütünlüğünü anlayıp anlamadığınızı değerlendirmek için kullanır. Soru genellikle şöyle sorulur: "Normalleştirme nedir ve neden önemlidir?"
Normalleştirme, tekrarı azaltmak ve güncelleme, ekleme ve silme anomalilerini önlemek için sütunları ve tabloları düzenleme sürecidir. Her normal biçim (1NF, 2NF, 3NF) daha katı bir kural getirir.
Güçlü bir cevap, yalnızca ders kitabındaki tanımları vermekle kalmaz; normalleştirmenin ortadan kaldırdığı anomalileri de adlandırır.
Üç Anomali
Normal biçimlerden önce, bunların çözdüğü sorunları öğrenin. Her şeyi tek yerde tutan kötü tasarlanmış bir tabloda üç tür anomali görülür:
- Güncelleme anomalisi: aynı gerçek birçok satırda saklanır; bu nedenle bir değişikliğin tüm satırlara uygulanması gerekir, aksi hâlde veriler tutarsızlaşır.
- Ekleme anomalisi: ilgisiz veriler de sağlamadan bir gerçeği ekleyemezsiniz (örneğin, sipariş olmadan ürün ekleyemezsiniz).
- Silme anomalisi: bir satırı silmek, başka bir bağımsız gerçeği yanlışlıkla ortadan kaldırır.
Örnek bir tabloda bunları fark edebiliyorsanız, her normalleştirme adımını gerekçelendirebilirsiniz.
Normalleştirilmemiş Başlangıç Tablosu
İşte klasik bir mülakat örneği: siparişleri, müşterileri ve ürünleri bir araya getiren tek ve geniş bir tablo. Satırlar boyunca tekrarlanan müşteri e-posta adresine ve ürün fiyatına dikkat edin. Anomaliler burada ortaya çıkar.
Mülakattaki göreviniz, her bölme işlemini açıklayarak bu tabloyu adım adım 3NF'e dönüştürmektir.
-- Unnormalized: everything in one table
CREATE TABLE orders_flat (
order_id INT,
customer_id INT,
customer_email VARCHAR(255),
product_id INT,
product_name VARCHAR(100),
unit_price DECIMAL(10,2),
quantity INT
);Birinci Normal Biçim (1NF)
1NF, her sütunun tek bir atomik değer içermesini ve bir hücre içinde tekrarlanan gruplar ya da diziler bulunmamasını gerektirir.
Bir sütun 'phone1, phone2' gibi virgülle ayrılmış bir liste tutuyorsa veya product1, product2, product3 sütunlarına sahipseniz, tablo 1NF'i ihlal eder.
Çözüm: her değeri kendi satırına yerleştirin. Mülakat yapan kişi şu ifadeyi duymak ister: "Atomik değerler, tekrarlanan grup yok ve her satırı tanımlayan bir anahtar var."
-- Violates 1NF: a list inside one column
-- phones = '555-1111, 555-2222'
-- 1NF fix: one phone per row
CREATE TABLE customer_phone (
customer_id INT,
phone VARCHAR(20),
PRIMARY KEY (customer_id, phone)
);İşlevsel Bağımlılıklar
2NF ve 3NF'yi açıklamak için işlevsel bağımlılık terimini kullanmanız gerekir. A -> B gösterimi, "A, B'yi belirler" anlamına gelir: A'nın her değeri için B'nin tam olarak bir değeri vardır.
orders tablomuzda:
customer_id -> customer_emailproduct_id -> product_name, unit_priceorder_id, product_id -> quantity
Normalleştirme aslında her anahtar olmayan sütunun anahtarın tamamına ve yalnızca anahtara bağlı olmasını sağlamaktır.
İkinci Normal Biçim (2NF)
2NF, birincil anahtar birleşik olduğunda uygulanır. Bir anahtar olmayan sütunun anahtarın yalnızca bir bölümüne bağlı olmasını (kısmi bağımlılık) yasaklar.
Sipariş kaleminin anahtarı (order_id, product_id) değeridir. Ancak product_name ve unit_price yalnızca product_id değerine, anahtarın tamamına değil, bağlıdır. Bu bir kısmi bağımlılıktır ve 2NF ihlalidir.
Çözüm: ürün özniteliklerini product_id ile anahtarlanan bir products tablosuna taşıyın.
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100),
unit_price DECIMAL(10,2)
);
CREATE TABLE order_items (
order_id INT,
product_id INT,
quantity INT,
PRIMARY KEY (order_id, product_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);Üçüncü Normal Biçim (3NF)
3NF, bir anahtar olmayan sütunun doğrudan anahtara değil, başka bir anahtar olmayan sütuna bağlı olduğu geçişli bağımlılıkları ortadan kaldırır.
Bir orders tablosunda customer_id ile birlikte customer_email bulunduğunu varsayalım. Burada order_id -> customer_id -> customer_email bağımlılığı vardır. E-posta, anahtara yalnızca customer_id üzerinden bağlıdır; bu bir geçişli bağımlılıktır.
Çözüm: müşterileri kendilerine ait ayrı bir tabloya ayırın. Böylece her tablonun anahtar olmayan sütunları yalnızca kendi anahtarına bağlı olur.
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_email VARCHAR(255)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);Tek Satırlık Hatırlatıcı
Mülakat yapanlar, 3NF'yi tek cümlede özetleyebilen adayları takdir eder. Klasik ifade şöyledir:
"Her anahtar olmayan sütun anahtara, anahtarın tamamına ve yalnızca anahtara bağlı olmalıdır."
- Anahtar -> 1NF (bir anahtar ve atomik değerler vardır).
- Anahtarın tamamı -> 2NF (kısmi bağımlılık yoktur).
- Yalnızca anahtar -> 3NF (geçişli bağımlılık yoktur).
Bu tek cümle, gerektiğinde üç normal biçimin tümünü yeniden kurmanızı sağlar.
BCNF: Takip Sorusu
Konuyu iyi bilen bir mülakat yapan kişi, 3NF'nin daha katı bir sürümü olan Boyce-Codd Normal Biçimi (BCNF) hakkında soru sorabilir.
BCNF, her X -> Y işlevsel bağımlılığı için X'in bir süper anahtar olmasını gerektirir. 3NF, bağımlı öznitelik bir aday anahtarın parçası olduğunda nadir bir istisnaya izin verir; BCNF bu istisnayı da kaldırır.
Uygulamada BCNF ihlalleriyle sık karşılaşmazsınız; ancak bundan söz etmeniz ve "BCNF, asal öznitelikler için istisna içermeyen 3NF'dir" demeniz, konuyu derinlemesine bildiğinizi gösterir.
NOT: Normalleştirme Ne Zaman Yapılmamalı
Üst düzey bir cevap, ödünleşimi kabul eder. Normalleştirme bütünlüğü iyileştirir; ancak bir sorguyu yanıtlamak daha fazla birleştirme gerektirdiği için okuma performansını düşürebilir.
Şu durumlarda normalleştirmeyi bilinçli olarak geri almak kabul edilebilir:
- İş yükü okuma ağırlıklıysa ve birleştirmeler darboğaz oluşturuyorsa.
- Bir analiz/raporlama katmanı oluşturuyorsanız (yıldız şemaları ileride ele alınacaktır).
- Yinelenen kopyayı eşzamanlı tutabiliyorsanız (tetikleyiciler, ETL, somutlaştırılmış görünümler).
Şöyle ifade edin: "OLTP bütünlüğü için normalleştirin; OLAP okuma hızını artırmak için normalleştirmeyi bilinçli olarak geri alın."
Beyaz Tahta Çalışması
Şimdi hepsini birleştirelim. Canlı bir mülakatta, karmaşık bir tablo verildiğinde:
- Aday anahtarı belirtin ve işlevsel bağımlılıkları listeleyin.
- Atomik değerleri ve tekrarlanan grupları kontrol edin (1NF).
- Anahtar birleşikse kısmi bağımlılıkları kontrol edin (2NF).
- Anahtar olmayan sütunlar arasındaki bağımlılıkları kontrol edin (3NF).
- Ortaya çıkan tabloları birincil ve yabancı anahtarlarıyla çizin.
Bu adımları sesli olarak anlatmanız, mülakat yapan kişinin tam olarak değerlendirdiği şeydir.
Hızlı Kontrol
Normal biçimleri ne kadar iyi anladığınızı sınayın.
Özet: 3NF'ye Kadar Normalleştirme
Artık sık sorulan normalleştirme mülakat sorusunu baştan sona yanıtlayabilirsiniz:
- Normalleştirme, tekrarı azaltarak güncelleme, ekleme ve silme anomalilerini ortadan kaldırır.
- 1NF: atomik değerler, tekrarlanan grup yok.
- 2NF: birleşik anahtara kısmi bağımlılık yok.
- 3NF: geçişli (anahtar olmayan sütundan anahtar olmayan sütuna) bağımlılık yok.
- "Anahtar, anahtarın tamamı ve yalnızca anahtar" şeklinde özetleyin.
- BCNF, 3NF'yi sıkılaştırır; okuma ağırlıklı analiz için normalleştirmeyi bilinçli olarak geri alın.
Sıkça Sorulan Sorular
“3NF'ye Kadar Normalleştirme” dersi ücretsiz mi?
Evet — “3NF'ye Kadar Normalleştirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.
“3NF'ye Kadar Normalleştirme” dersinde ne öğreneceğim?
Ortadan kaldırdıkları tutarsızlıklarla birlikte birinci, ikinci ve üçüncü normal biçim. SQL Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“3NF'ye Kadar Normalleştirme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- 3NF'ye Kadar Normalleştirme
- ER Modellemesi ve İlişki Kardinalitesi
- Yıldız Şema ve Veri Ambarı Tasarımı
- Tam Deneme Mülakatı Problem Seti