Veritabanı tasarlarken neden doğrudan tablo çizmeye başlanmaz?
Bir bilgi parçası ne zaman “varlık”, ne zaman “nitelik” olarak modellenir?
Aday anahtarlar arasından birincil anahtar hangi teknik ölçütlerle seçilir?
Tek bir nitelik tekilliği sağlayamadığında bileşik anahtar nasıl kurulur?
Kardinalite ile katılım arasındaki temel fark nedir?
Crow’s Foot notasyonundaki uç sembolleri iş kurallarını nasıl görselleştirir?
1:N, N:M ve 1:1 ilişkiler fiziksel tablolara ve yabancı anahtarlara nasıl dönüştürülür?
Referans bütünlüğü veritabanındaki yetim kayıtları hangi mekanizmayla engeller?
İş Kuralından Veri Modeline: Neden Doğrudan Tablo Çizilmez?
Kütüphane Senaryosu ve Günlük İş Kuralları
Kütüphaneye kayıt yaptıran üyeler bulunur.
Raflarda okuyucuyu bekleyen binlerce kitap yer alır.
Üyelerin bu kitapları ödünç alıp iade ettikleri hareketli bir ödünç süreci yürütülür.
Doğrudan Tablo Çizme Girişiminin Tıkandığı Noktalar
Kitap tablosuna ödünç alan üyeyi mi yazacağız?
Bir üye aynı anda üç kitap ödünç aldığında ne olacak?
Kitap iade edilip haftalar sonra başka bir üyeye verildiğinde eski üyenin kaydını silecek miyiz, yoksa aynı kitabı her ödünç işleminde yeni bir satır olarak tekrar mı ekleyeceğiz?
İş Kuralları (Sözel İstekler)
│
▼
[ Kavramsal Tasarım: E-R Modeli ] ──> Veritabanı yazılımından ve SQL sözdiziminden bağımsız modelleme
│
▼
İlişkisel Şema (Fiziksel Tablolar)
Gereksinimleri Çözümleme: Varlık ve Nitelik Ayrımı
Kütüphane Gereksinim Metni
“Kütüphanemize kayıtlı üyelerin adını, soyadını, üye numarasını ve telefon bilgisini tutmak istiyoruz. Ayrıca kütüphanedeki her kitabın demirbaş numarasını, başlığını, yazarını ve basım yılını kaydetmeliyiz.”
Kavramsal Yapı Taşları
Varlık (Entity): Gerçek dünyada var olan, hakkında bilgi toplanıp saklanmaya değer, diğer nesnelerden bağımsız olarak ayırt edilebilen somut veya soyut nesnelerdir.
Benzer varlıkların kümesine varlık kümesi (entity set) denir.
Nitelik (Attribute): Bir varlığın durumunu, boyutunu veya özelliklerini tanımlayan her bir bilgi parçasıdır.
Kütüphane İçin Ayrım
Kavramsal Düzey
Üye Alanı
Kitap Alanı
Varlık (Entity)
Üye (Bağımsız nesne)
Kitap (Bağımsız nesne)
Nitelikler (Attributes)
ad, soyad, uye_numarasi, telefon
demirbas_numarasi, baslik, yazar, basim_yili
Ayrım Ölçütü: Bir kavramın varlık mı yoksa nitelik mi olduğunu belirleyen ölçüt, sistem içindeki bağımsızlığıdır. Telefon numarası kütüphanede tek başına dolaşan bağımsız bir nesne değildir; üyenin iletişim niteliğidir. Buna karşılık kitap tek başına bağımsız bir nesnedir; bu nedenle varlıktır.
Kimlik Arayışı: Aday Anahtar ve Birincil Anahtar Seçimi
Problem: Varlık Örneklerini Ayırt Etme
Kütüphanede aynı ad ve soyadı taşıyan iki farklı üye bulunabilir.
Tamamen aynı başlığa sahip farklı basım kitaplar yer alabilir.
Aday Anahtarlar (Candidate Keys)
Her bir kaydı tekil olarak tanımlayabilme potansiyeline sahip, boş bırakılamaz nitelik veya nitelik gruplarıdır. - Üye Varlığı Adayları: - uye_numarasi (Kurum tarafından üretilen tekil numara) - tc_kimlik_no (Devlet tarafından verilen tekil kimlik) - eposta (Kişiye özel tekil iletişim adresi)
Birincil Anahtar (Primary Key) Seçim Kriterleri
Değişmezlik: Seçilen değer zaman içinde değişmemelidir. E-posta adresi tekil olsa bile kullanıcının isteğiyle güncellenebilir; temel kimlik yapılması sakıncalıdır.
Sadeliği ve Kurumsal Denetim: tc_kimlik_no dış kuruma aittir, 11 hanelidir ve kişisel verilerin korunması açısından hassastır. Kurumun kendi ürettiği uye_numarasi ise kurum denetimindedir ve daha yalındır.
Karar: Üye varlığında birincil anahtar olarak uye_numarasi seçilir.
Kural: Birincil anahtar mutlaka otomatik artan tamsayı olmak zorunda değildir. Kitap varlığı için seçilen demirbas_numarasi, kurum standardına uygun KTP-2026-0042 gibi metinsel bir kod olabilir. Tekilliği sağladığı ve boş bırakılmadığı sürece metinsel kodlar da geçerli birincil anahtardır.
Tek Nitelik Yetmediğinde: Bileşik Anahtar (Composite Key)
Sorun: Tek Nitelik Tekilliği Sağlayamadığında
Bazı varlık veya yerleşim modellerinde tek bir alan kaydı diğerlerinden ayırmaya yetmez.
Tekilliği kurmak için iki veya daha fazla niteliğin birleşimi zorunlu hale gelir.
Kütüphane Raf Konumu Senaryosu
Kitapların kütüphane binasındaki fiziksel raf konumlarını modelleyelim:
raf_no = 3 tek başına yetersizdir: Oda 101’de de Raf 3 vardır, Oda 102’de de Raf 3 vardır.
oda_no = 101 tek başına yetersizdir: Oda 101 içinde onlarca farklı raf bulunur.
Mekanizma: Niteliklerin Birlikte Kimlik Oluşturması
Çözüm: İki nitelik bir araya getirilerek Bileşik Anahtar (Composite Key) tanımlanır.
Bileşik Anahtar: (oda_no, raf_no)
(101, 3) ikilisi kütüphane genelinde tek bir fiziksel rafı kesin ve benzersiz olarak işaret eder.
Varlıklar Arasındaki Bağ: İlişki ve Kardinalite
İlişki (Relationship) Tanımı
İki veya daha fazla varlık arasındaki anlamsal bağlantıdır. Kütüphane senaryomuzda Üye ile Kitap arasındaki eylem “Ödünç Alma” ilişkisidir.
Kardinalite: En Çok Kaç? (Üst Sınır)
Bir varlığın ilişkili olduğu diğer varlık kümesinden en fazla kaç varlıkla eşleşebileceğini belirler.
1. Bire Çok (1:N)
Raf ──────────────< Kitap
Bir rafta birden çok kitap bulunabilir; her kitap aynı anda yalnızca tek bir raftadır.
2. Çoka Çok (N:M)
Üye >─────────────< Kitap
Bir üye birden çok kitap ödünç alabilir; bir kitap zaman içinde farklı üyelerce ödünç alınabilir.
3. Bire Bir (1:1)
Üye ─────────────── Kütüphane Kartı
Her üyenin en fazla bir kartı olabilir; her kart yalnızca tek bir üyeye tanımlanır.
Katılım Kuralları: En Az Kaç Eşleşme? (Zorunlu mu?)
Katılım (Participation) Tanımı
Bir varlığın o ilişkide yer almasının zorunlu olup olmadığını, yani en az kaç eşleşmenin bulunması gerektiğini belirler.
İki Temel Katılım Türü
Zorunlu Katılım (Total / Mandatory - En az 1): Varlık kümesindeki her bir elemanın bu ilişkide mutlaka en az bir kez yer alması gerekir.
İsteğe Bağlı Katılım (Partial / Optional - En az 0): Varlık kümesindeki bir elemanın bu ilişkide yer alması zorunlu değildir; ilişkisiz olarak da sistemde varlığını sürdürebilir.
Kütüphane Senaryosunda Katılım Analizi
Üye Varlığı: Kütüphaneye yeni kaydolan bir üye henüz hiç kitap ödünç almamış olabilir. Katılım: İsteğe Bağlı (En az 0).
Kitap Varlığı: Rafta yeni satın alınmış bir kitap henüz hiç ödünç verilmemiş olabilir. Katılım: İsteğe Bağlı (En az 0).
Ödünç Alma İşlem Kaydı: Bir ödünç kaydının mutlaka bir üyeye ve bir kitaba ait olması şarttır; üyesiz veya kitapsız ödünç kaydı var olamaz. Katılım: Zorunlu (En az 1).
Boyut
Soru
Değer Aralığı
Şemaya Etkisi
Kardinalite
En çok kaç? (Üst sınır)
1 veya N
Yabancı anahtarın nereye konacağını belirler
Katılım
En az kaç? (Alt sınır)
0 veya 1
Alanın boş (NULL) kalıp kalamayacağını belirler
Crow’s Foot Notasyonu ve Uç Sembolleri
Neden Crow’s Foot (Karga Ayağı)?
Kavramsal modelleri görselleştirmede endüstri standardıdır; ilişkisel tablolara doğrudan eşlenebilen yalın bir sembol yapısına sahiptir.
Temel Gösterim Kuralları
Varlık: İki bölmeli dikdörtgen kutu (Üstte varlık adı, altta nitelikler; birincil anahtar yanında PK simgesi).
İlişki: Varlıkları bağlayan düz çizgi ve üzerinde ilişkinin adı.
Uç Sembolleri: Çizginin varlık kutusuna bağlandığı uç hem kardinaliteyi hem katılımı aynı anda gösterir:
Sembol Adı Katılım (İç Sembol) Kardinalite (Dış Sembol)
────── ─── ─────────────────── ────────────────────────
|| Tam Olarak Bir Zorunlu (en az 1) Tekil (en çok 1)
o| Sıfır veya Bir İsteğe Bağlı (en az 0) Tekil (en çok 1)
>| Bir veya Çok Zorunlu (en az 1) Çoğul (en çok N)
o< Sıfır veya Çok İsteğe Bağlı (en az 0) Çoğul (en çok N)
Kural: Kutuya yakın olan iç sembol katılımı (alt sınır: daire = 0, dik çizgi = 1); çizginin ucundaki dış sembol kardinaliteyi (üst sınır: dik çizgi = 1, çatal = N) temsil eder.
Kavramsal E-R Diyagramı: Kütüphane Modeli
+--------------------------+ +--------------------------+
| UYE | | KITAP |
+--------------------------+ +--------------------------+
| PK uye_numarasi | | PK demirbas_numarasi |
| ad_soyad | Ödünç Alma | baslik |
| telefon |o<───────────────────────────>o| yazar |
+--------------------------+ / \ +--------------------------+
/ \
[alis_tarihi] [iade_tarihi]
Diyagramın Anlattığı Kurallar
UYE ile KITAP arasında N:M “Ödünç Alma” ilişkisi kurulmuştur.
Her iki uçtaki o< sembolü, bir üyenin sıfır veya çok kitap alabileceğini; bir kitabın da sıfır veya çok kez ödünç verilebileceğini (isteğe bağlı katılım, çoğul kardinalite) belirtir.
alis_tarihi ve iade_tarihi nitelikleri tek başına üyenin veya kitabın değil, bu ödünç eyleminin nitelikleridir.
Hatırlatma: Bu diyagram henüz bir veritabanı tablosu değildir. İş kurallarının kağıt üzerindeki kavramsal mimarisidir.
Kavramsal Modelden İlişkisel Şemaya Dönüşüm
Temel Kavram Ayrımı: Bağıntı vs İlişki
Bağıntı (relation): İlişkisel modelde iki boyutlu tabloya verilen matematiksel addır.
İlişki (relationship): Kavramsal modeldeki varlıklar arasındaki bağa/eyleme verilen addır.
İlişkisel veritabanı kavramı tabloların matematiksel bağıntılar olmasından gelir; aralarındaki oklardan türemez.
Dönüşümün Temel Kuralları
Varlıklar Tablo Olur:
uye tablosu: (uye_numarasi, ad_soyad, telefon)
kitap tablosu: (demirbas_numarasi, baslik, yazar)
Çizgiler Bağımsız Kablo Değildir:
Varlıklar arasındaki ilişkiler veritabanında fiziksel bağlantılarla değil, Yabancı Anahtar (Foreign Key - FK) sütunları ile kurulur.
Yabancı Anahtar (FK) Tanımı:
Bir tablodaki satırın, başka bir tablodaki tekil bir satırı (genellikle birincil anahtarı) işaret etmesini sağlayan referans sütunudur.
Soru: Yabancı anahtar hangi tabloya, nasıl yerleştirilecek? Bu sorunun cevabını ilişkinin türü (1:N, N:M, 1:1) belirler.
1:N İlişkilerin Dönüşümü: Çok Tarafına Yabancı Anahtar
Senaryo: Raf (1) ↔︎ Kitap (N)
Bir rafta birden çok kitap durabilir; her kitap ise tek bir rafta yer alır.
Seçenekleri Değerlendirelim
Seçenek 1: Yabancı anahtarı “1” tarafına (raf tablosuna) koymayı deneyelim:
Rafta 100 kitap varsa, raf tablosundaki tek bir hücreye 100 farklı kitap numarası yazmamız gerekir. Bu durum atomiklik kuralını yıkar.
Alternatif olarak her kitap için raf satırını 100 kez kopyalarsak, raf adı ve konumu yüzlerce kez yinelenir; büyük veri tekrarı oluşur.
Seçenek 2: Yabancı anahtarı “çok” tarafına (kitap tablosuna) koyalım:
kitap tablosuna raf_kodu (FK) sütunu eklenir.
Her kitap tek bir rafta durduğu için, kitap tablosundaki her satır tek bir raf_kodu taşır. Hücre bölünmez, raf bilgisi tekrar etmez.
Kural: 1:N ilişkilerin ilişkisel şemaya dönüşümünde yabancı anahtar daima “çok” (N) tarafındaki tabloya eklenir. Bağımsız ek tablo açılmaz.
N:M İlişkilerin Dönüşümü: Basit Yaklaşımlar Neden Tıkanır?
Senaryo: Üye (N) ↔︎ Kitap (M) (Ödünç Alma Eylemi)
Bir üye birden çok kitap alabilir; bir kitap zaman içinde birden çok üyeye verilebilir. Ayrıca bu eylemin alis_tarihi ve iade_tarihi nitelikleri vardır.
Basit Yaklaşımların Çöküşü
Yaklaşım 1: Üye Tablosuna Kitap Bilgisi Eklemek
uye (uye_numarasi, ad_soyad, demirbas_numarasi)
└── Üye ikinci bir kitap aldığında ne olacak?
├── `demirbas_no_2`, `demirbas_no_3` sütunları açmak esnekliği yok eder.
└── Üyeyi her kitap için yeni satır olarak yazmak üye bilgilerini sürekli tekrarlar.
Yaklaşım 2: Kitap Tablosuna Üye Bilgisi Eklemek
kitap (demirbas_numarasi, baslik, uye_numarasi)
└── Kitap ekimde Ahmet'e verildi (Ahmet yazıldı).
Kasımda kitap Ayşe'ye verildiğinde Ayşe'nin numarası Ahmet'in üzerine yazılır.
SONUÇ: Kitabın geçmişe dönük bütün ödünç hareketleri geri getirilemez biçimde silinir.
Sınır: N:M ilişkiler, varlık tablolarından birinin içine yabancı anahtar eklenerek çözülemez.
N:M İlişkilerin Çözümü: Bağlantı Tablosu (Junction Table)
Çözüm Mekanizması: Üçüncü Tablo
İki varlık tablosu arasına bağımsız bir bağlantı tablosu (junction / bridge table) yerleştirilir. Kütüphanemizdeki bu tablo odunc tablosudur.
odunc Bağlantı Tablosunun Anatomisi
Fiziksel bir nesneyi değil, gerçekleşen bir eylemi temsil eder.
İlişkili iki varlığın birincil anahtarlarını yabancı anahtar olarak barındırır:
Kritik Sınır Koşulu: Yabancı Anahtar Tek Başına Yetmez
Normal bir yabancı anahtar sütununa aynı değer birden fazla kez yazılabilir (tıpkı 1:N ilişkide olduğu gibi).
Eğer ek bir kısıt koymazsak, kutuphane_karti tablosuna aynı uye_numarasi ile üç farklı kart satırı girilebilir.
Bu durumda sistem farkında olmadan 1:N ilişkiye kayar ve bir üyenin birden çok kartı oluşur.
kutuphane_karti Tablosu
kart_id (PK) │ uye_numarasi (FK) │ kart_durumu
─────────────┼───────────────────┼────────────
K-501 │ 201 │ Aktif
K-502 │ 201 │ Aktif <── Kısıt yoksa aynı üyeye ikinci kart açılabilir
Mekanizma: 1:1 ilişkinin korunabilmesi için, yabancı anahtar sütununa kavramsal düzeyde bir Tekillik (Benzersizlik - UNIQUE) kuralı eklenmesi zorunludur.
İlişki Türlerinin Dönüşüm Karşılaştırması
İlişki Türü
Örnek
Anahtar Yerleşimi
Şema Gereksinimi
1:N
Raf → Kitap
Yabancı anahtar “çok” tarafındaki (kitap) tabloya eklenir
Ek tablo gerekmez; tek bir FK sütunu yeterlidir
N:M
Üye ↔︎ Kitap
İki yabancı anahtarı barındıran bağımsız bağlantı tablosu (odunc) kurulur
İlişki iki adet 1:N bağa ayrışır; eylem nitelikleri bu ara tabloda saklanır
1:1
Üye ↔︎ Kart
Yabancı anahtar tablolardan birine (kutuphane_karti) eklenir
Yabancı anahtar sütununa tekillik (benzersizlik) kuralı konulması zorunludur
Kütüphane görevlisi odunc tablosuna yeni bir satır girerken uye_numarasi alanına sehven 999 yazıyor. Ancak uye tablosunda 999 numaralı hiçbir üye kayıtlı değildir.
Gösterdiği hedef kaydı bulunmayan sahipsiz verilere yetim kayıt denir.
Kitap kütüphaneden çıkmış görünür; ancak kime verildiği belirsizdir. Bu durum veritabanında mantıksal tutarsızlık üretir ve ilişkisel güvenilirliği zedeler.
Ekleme ve Güncelleme Koruması: Bir yabancı anahtar sütununa değer girilirken, bu değerin hedef tablonun birincil anahtar sütununda mutlaka önceden var olması zorunludur. Var olmayan değerle kayıt eklenemez.
Silme Koruması: Bir üye silinmek istendiğinde veritabanı denetler: Üyenin odunc tablosunda açık bir kaydı varsa silme işlemi engellenir. Aksi halde ödünç satırları yetim kalır.
Çoklu Kitap Alma (1:N Davranışı): 201 numaralı Ahmet Yılmaz iki kitap almıştır. Ahmet’in adı ve telefonu odunc tablosunda tekrarlanmamış; yalnızca uye_numarasi taşınmıştır.
Tarihçe ve Kitap Paylaşımı (Zaman Boyutu): K-101 numaralı kitap ekimde 201’e, kasımda 202’ye verilmiştir. Kitap bilgisi tek satır kalmış, ödünç geçmişi kayıpsız birikmiştir.
Yetim Kayıt Denetimi: uye_numarasi = 209 ve demirbas_numarasi = K-101 satırı eklenmek istendiğinde, sistem uye tablosunda 209’u bulamaz ve işlemi reddeder.
Sık Yapılan Hatalar ve Altında Yatan Mekanizmalar
1. Varlık ile Niteliği Bağlamdan Kopuk Değerlendirmek
Yanılgı: Bir kavramın hep varlık ya da hep nitelik olduğunu sanmak.
Doğrusu: Kararı iş kuralı verir — sadece ad saklanıyorsa nitelik, bağımsız nitelikleri varsa varlıktır.
2. Kardinalite ile Katılımı Birbirine Karıştırmak
Yanılgı: Üst sınır ile alt sınırı eş tutmak.
Doğrusu: Kardinalite üst sınırı (1/N), katılım alt sınırı (0/1) belirler; karıştırmak yanlış NOT NULL veya yanlış ilişkiye yol açar.
3. E-R Diyagramında Doğrudan Yabancı Anahtar Tanımlamak
Yanılgı: Kavramsal kutunun içine karşı tablonun anahtarını sütun olarak eklemek.
Doğrusu: Yabancı anahtar ilişkisel şemaya geçiş aracıdır; kavramsal düzeyde sadece öz nitelikler ve ilişki çizgileri olur.
4. N:M İlişkiyi Bağlantı Tablosuz Çözmeye Çalışmak
Yanılgı: Bir tabloya karşı tarafın anahtarını ekleyerek ilişkiyi çözebileceğini sanmak.
Doğrusu: Atomikliği yıkar veya geçmişi ezer; N:M mutlaka bağlantı tablosu gerektirir.
5. 1:1 İlişkide Yabancı Anahtarın Tek Başına Tekillik Sağladığını Sanmak
Yanılgı: FK eklenince ilişkinin kendiliğinden 1:1 kalacağını varsaymak.
Doğrusu: FK aynı değeri tekrar kabul edebilir; tekillik ancak UNIQUE kısıtıyla garanti edilir.