İlişkisel Veritabanı ve SQL Temelleri
Tablo, satır, anahtar, ilişki, normalizasyon, JOIN ve indeks kavramlarını sipariş sistemi üzerinden öğrenin.
Müşteri adını her sipariş satırına yazarsak isim değiştiğinde yüzlerce kaydı güncellememiz gerekir. İlişkisel model, veriyi varlıklara ayırıp açık ilişkilerle bağlayarak bu tutarsızlığı azaltır.
Temel yapı
Table aynı türde kayıtları, row tek kaydı, column bir özelliği temsil eder. Primary key satırı benzersiz tanımlar. Foreign key, başka tablodaki kayda referans verir ve geçersiz ilişkinin yazılmasını engeller.
customers(id, name) ve orders(id, customer_id, total) tablolarında müşteri bilgisi bir kez tutulur. orders.customer_id, müşteriye foreign key olur.
SQL ne yapar?
SELECT o.id, o.total, c.name
FROM orders AS o
JOIN customers AS c ON c.id = o.customer_id
WHERE o.total > 1000
ORDER BY o.total DESC;
SELECT dönecek alanları belirler. FROM ana tabloyu seçer. JOIN ... ON ilişkili satırları eşleştirir. WHERE satırları filtreler. ORDER BY ... DESC sonucu büyükten küçüğe sıralar.
Inner join yalnızca eşleşen satırları; left join sol tablonun tüm satırlarını döndürür. Yanlış join koşulu satırları çoğaltabilir. Bu nedenle ilişkinin cardinality değerini, yani “bir müşteri kaç siparişe, bir sipariş kaç müşteriye bağlanabilir?” gibi sayısal ilişki kuralını bilmek gerekir.
Normalizasyon
Normalizasyon tekrarı ve güncelleme anomalilerini azaltır. Birinci normal form atomik alanları, sonraki formlar bağımlılıkların doğru tabloya taşınmasını hedefler. Denormalizasyon, okuma maliyetini azaltmak için bazı verileri bilinçli olarak tekrar saklamaktır. Tutarsızlık riski getirdiği için yalnızca ölçülmüş bir ihtiyaçta ve tekrarın nasıl güncelleneceği tanımlanarak yapılmalıdır.
İndeks ne işe yarar?
İndeks, belirli sütunlarda satırı hızlı bulmaya yarayan ek veri yapısıdır. Okumayı hızlandırır; disk alanı kullanır ve her yazmada güncellenir. WHERE, JOIN ve sıralama düzenine göre tasarlanmalıdır. Her sütuna indeks eklemek çözüm değildir.
Alternatifler
Belge veritabanları değişken şemalı agregalarda, key-value sistemleri basit anahtar erişiminde, graph veritabanları yoğun ilişki gezilerinde güçlü olabilir. Tutarlı ilişkiler ve esnek sorgular gerekiyorsa ilişkisel veritabanı sağlam varsayılandır.
Alıştırma
Ürün, sipariş ve sipariş kalemi tablolarını tasarlayın. Bir siparişte birden fazla ürün, bir üründe birden fazla sipariş ilişkisini hangi ara tablonun temsil edeceğini bulun.