Veritabanı temelleri
Primary key, foreign key ve ilişkiler
Kimlik, referans ve kardinalite.
Kavramı anlayalım
Primary key, her satırı benzersiz tanımlayan anahtardır; NULL olamaz. Birden fazla sütundan oluşabilir. OrderItem’da OrderId ve ProductId birleşimi bir siparişte aynı ürünün iki ayrı satır olarak eklenmesini engeller. Bu model tek kalemde miktar tutar; her uygulamanın iş kuralı böyle olmak zorunda değildir.
Foreign key, bir değerin ilişkili tabloda mevcut olmasını zorunlu kılar. SalesOrder.CustomerId, Customer.CustomerId alanına bağlıdır. Olmayan müşteriye sipariş eklemek hata verir. SQL Server’da foreign key tanımlamak, referans veren sütunda kendiliğinden indeks oluşturmaz.
Kardinalite ilişkinin bir-bir, bir-çok veya çok-çok oluşudur. Bir müşteri birçok sipariş verebilir; bir siparişin birçok ürün kalemi vardır. Sipariş ile ürün arasındaki çok-çok ilişki OrderItem ile çözülür. JOIN koşulu bu modelin anahtarlarını izlemelidir; sadece benzer isimdeki sütunları eşlemek yeterli değildir.
Geçersiz ilişkileri veri girişinde engellemek ve JOIN’in satır sayısını öngörmek için.
Foreign key’in performans indeksini otomatik oluşturduğunu sanmak veya isimleri eşleyerek rastgele JOIN yapmak.
Aynı konu. Üç farklı derinlik.
SELECT CustomerId, FullName FROM lab.Customer WHERE CustomerId = 1;Primary key üzerinden en fazla bir müşteri bulunur.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
Bir müşterinin birden fazla siparişi olabileceğini veri üzerinden göster.
Çözümü ve açıklamasını göster
SELECT CustomerId, COUNT(*) AS Orders FROM lab.SalesOrder GROUP BY CustomerId HAVING COUNT(*) > 1;1, 2, 3, 4 ve 5 numaralı müşteriler birden fazla siparişe sahiptir.