Bu ünite önceki ünitelerde öğrenilenleri üç uygulama üzerinde bir araya getirir: tasarımı incelemek, tabloları kurmak ve gerçek sorulara SQL ile cevap aramak.
Uygulama 1: Fakülte veri tabanı
Fakülte veri tabanında dört tablo vardır: Bolum, Ogrenci, Dersler ve Dersi_Alanlar.
- Bolum – Ogrenci (1–N): Bir bölümde birçok öğrenci okur; her öğrenci tek bir bölüme bağlıdır. Bu yüzden Ogrenci tablosunda BolumId bulunur.
- Bolum – Dersler (1–N): Bir bölüm birçok ders açar; her ders tek bir bölüme aittir.
- Ogrenci – Dersler (N–M): Bir öğrenci birçok ders alır, bir dersi birçok öğrenci alır. Bu ilişkiyi Dersi_Alanlar köprü tablosu kurar.
Çözülen sorulardan çıkan önemli noktalar:
- Başka bir tabloda kayıtları bulunan dersleri silmeye çalışmak yabancı anahtar hatası verir; önce Dersi_Alanlar'daki bağlı kayıtlar silinmelidir.
- Var olmayan bir bölüm numarasıyla ders eklemek istenirse yabancı anahtar kısıtı kaydı reddeder.
- ALTER TABLE Bolum DROP COLUMN BolumAdi; komutu satırları değil, yalnızca sütunu ve içindeki verileri siler.
- UPDATE … WHERE DersKodu LIKE 'ABM%' komutu ABM ile başlayan tüm dersleri etkiler.
Uygulama 2: Gelecek Sepeti
Gelecek Sepeti adlı bir e-ticaret sitesinin Musteriler, Urunler ve Siparisler tabloları vardır. Siparisler tablosu müşteri ile ürün arasındaki köprüdür; müşteri ve ürün adını birlikte görmek için iki INNER JOIN gerekir. Kodlar, program kurmadan db-fiddle.com üzerinde denenebilir.
- Kategori başına satış adedi: Siparisler ile Urunler birleştirilir, GROUP BY Kategori ile SUM(Adet) alınır.
- Toplam harcaması 10.000 TL'yi aşan müşteriler: SUM(Adet * BirimFiyat) her müşteri için hesaplanır, HAVING ile filtrelenir. Örnekte Ahmet 23.000 TL, Ayşe 15.450 TL harcamıştır.
- Belirli bir kategoriden alışveriş yapanlar: WHERE Kategori = 'Eğitim' ile süzülür; DISTINCT aynı müşterinin adının tekrar etmesini önler.
- Hiç sipariş vermemiş müşterileri de listelemek için Musteriler tablosu solda olacak biçimde LEFT JOIN kullanılır.
Uygulama 3: SATIŞ veri tabanının kurulması
Normalizasyon ünitesinde üç tabloya ayrılan SATIŞ tablosu SQL Server'da kurulur: Sehirler (sehir_kodu, sehir_adi), Musteriler (musteri_no, sehir_kodu) ve Gonderiler (musteri_no, gonderi_no, miktar). Gonderiler tablosunun birincil anahtarı (musteri_no, gonderi_no) bileşik anahtarıdır, çünkü aynı gönderi numarası farklı müşterilerde tekrar edebilir.
Yabancı anahtar hatası almamak için veriler önce ana tabloya, sonra ona bağlı tabloya girilir: Sehirler → Musteriler → Gonderiler. Son olarak SSMS'te Database Diagrams klasöründen yeni bir veri tabanı diyagramı oluşturulur; FOREIGN KEY tanımları sayesinde tablolar arasındaki ilişki çizgileri kendiliğinden çizilir. Anahtar simgesi 1 tarafını, sonsuz simgesi N tarafını gösterir.