COMPUTER ENGINEER

Örneklere git
Blog
SQL Server / T-SQL6 dk çalışma
05/ 65

Veritabanı temelleri

Primary key, foreign key ve ilişkiler

Kimlik, referans ve kardinalite.

AnlaÖrneği inceleKendin uygula

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.

NERESİNDE KULLANIRSIN?

Geçersiz ilişkileri veri girişinde engellemek ve JOIN’in satır sayısını öngörmek için.

SIK YAPILAN HATA

Foreign key’in performans indeksini otomatik oluşturduğunu sanmak veya isimleri eşleyerek rastgele JOIN yapmak.

01 / UYGULAMA

Aynı konu. Üç farklı derinlik.

T-SQL / SQL Server 2019+
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.

02 / SIRA SENDE

Önce kendin dene.

Bir müşterinin birden fazla siparişi olabileceğini veri üzerinden göster.

Çözümü ve açıklamasını göster
Açıklamalı çözüm
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.