---
title: 'Modelden Şemaya'
source: 'https://academia.sh/tr/kurslar/modelleme-ve-gosterim/modelden-semaya'
course: 'Modelleme ve Gösterim'
language: tr
updated: '2026-08-17T18:08:16+00:00'
license: 'CC BY-SA 4.0'
---

# Modelden Şemaya

Yedi tablo ve yirmi beş alan için 100 alan kararı ve 14 tablo kararı veriliyor: toplam 114, kavramsal modelin söylediği 26 olgunun 4,4 katı. Modelin söylemediği her karar birinin verdiği ve modelde görünmeyen bir karardır.

Önceki ders mantıksal düzeyde on üç alanın modelde adı hiç geçmeden ortaya çıktığını
saydı ve düşen bir kısıtı kurtarmanın yolunun yine modelde bulunmayan bir alan eklemekten
geçtiğini gösterdi. Bu ders son düzeye iner.

Fiziksel şema, mantıksal modeli saklanabilir hâle getirir. Sorusu şudur: bu dönüşüm kaç
karar ister, bu kararların kaçını kavramsal model belirler, ve belirlemediklerini kim
belirler. Yanıt, kursun en büyük oranını üretir ve kursun kuralını son kez ödetir:
**bir gösterimin ölçüsü taşıdığı simge değil, söylemediği için başkasına bıraktığıdır.**

## Fiziksel Düzeyin Sorduğu Sorular

Bir alanı saklanabilir yapmak için dört sorunun yanıtlanması gerekir: hangi **tip**, ne
**uzunluk**, **boş geçilebilir** mi, **varsayılan değeri** ne. Bir tabloyu saklanabilir
yapmak için iki soru daha vardır: birincil anahtar için bir **dizin** ve bir **karakter
kümesi**. Bu altı sorunun hiçbiri isteğe bağlı değildir; yanıt verilmezse yerine bir
öntanım geçer, ve öntanım da bir yanıttır.

- **VM14** — Fiziksel düzeyde her alan dört karar, her tablo iki karar ister. Liste ortak
  tanımındır ve bu derste genişletilmez.
- **VM15** — Bir kararın **uydurulmuş** olması, kavramsal modelin hiçbir olgusunun o
  kararı belirlememesi demektir. Uydurulmuş karar yanlış karar değildir; **kaynağı
  modelde olmayan** karardır.

```python
"""M01/K06 ortak tanim (kesit): fiziksel duzeyin uydurdugu karar sayisi."""
ALAN_KARARI = ["tip", "uzunluk", "bos gecilebilirlik", "varsayilan deger"]
TABLO_KARARI = ["birincil anahtar dizini", "karakter kumesi"]

MANTIKSAL = {
    "IsEmri": ["anahtar", "no", "acilis", "durum", "Usta_anahtar"],
    "Usta": ["anahtar", "ad", "uzmanlik"],
    "Parca": ["anahtar", "kod", "ad", "birim"],
    "Tezgah": ["anahtar", "kod", "tur"],
    "Belge": ["anahtar", "tur", "tarih", "IsEmri_anahtar"],
    "IsEmri_Parca": ["anahtar", "IsEmri_anahtar", "Parca_anahtar"],
    "Usta_Tezgah": ["anahtar", "Usta_anahtar", "Tezgah_anahtar"],
}
KAVRAMSAL_OLGU = 26        # 5 varlik + 12 oznitelik + 4 iliski + 5 kisit


def fiziksel(tablolar):
    alan = sum(len(v) for v in tablolar.values())
    tablo = len(tablolar)
    return {"tablo": tablo, "alan": alan,
            "alan_karari": alan * len(ALAN_KARARI),
            "tablo_karari": tablo * len(TABLO_KARARI),
            "uydurulan_karar": alan * len(ALAN_KARARI) + tablo * len(TABLO_KARARI)}


F = fiziksel(MANTIKSAL)
print("tablo         alan  alan karari  tablo karari  toplam")
for ad, alanlar in MANTIKSAL.items():
    ak = len(alanlar) * len(ALAN_KARARI)
    tk = len(TABLO_KARARI)
    print(f"{ad:13s} {len(alanlar):4d}  {ak:11d}  {tk:12d}  {ak + tk:6d}")
print(f"{'toplam':13s} {F['alan']:4d}  {F['alan_karari']:11d}"
      f"  {F['tablo_karari']:12d}  {F['uydurulan_karar']:6d}")
print()
print("kavramsal modelin soyledigi olgu:", KAVRAMSAL_OLGU)
print("fiziksel semanin uydurdugu karar:", F["uydurulan_karar"])
print("oran:", round(F["uydurulan_karar"] / KAVRAMSAL_OLGU, 4))
print()
print("her karar yalniz iki secenekli olsa bile , ayni mantiksal modele karsilik gelen")
print("fiziksel sema sayisi:", 2 ** F["uydurulan_karar"])
print("basamak sayisi:", len(str(2 ** F["uydurulan_karar"])))
```

```
tablo         alan  alan karari  tablo karari  toplam
IsEmri           5           20             2      22
Usta             3           12             2      14
Parca            4           16             2      18
Tezgah           3           12             2      14
Belge            4           16             2      18
IsEmri_Parca     3           12             2      14
Usta_Tezgah      3           12             2      14
toplam          25          100            14     114

kavramsal modelin soyledigi olgu: 26
fiziksel semanin uydurdugu karar: 114
oran: 4.3846

her karar yalniz iki secenekli olsa bile , ayni mantiksal modele karsilik gelen
fiziksel sema sayisi: 20769187434139310514121985316880384
basamak sayisi: 35
```

**Sistem:** kavramsal model 26 olgu söylüyor. **Gösterim:** fiziksel şema 7 tablo ve 25
alan taşıyor. **Bedel:** bu şemayı yazmak için **114 karar** verilmesi gerekiyor ve
bunların hiçbiri kavramsal modelde yazmıyor. Oran **4,3846**, yani modelin söylediğinin
yaklaşık **4,4 katı** kadar karar, modelin dışında verilir.

Son satır bu sayının gösterim diliyle karşılığıdır. Bir karar en az iki seçenek sunuyorsa
— boş geçilebilir mi, evet ya da hayır — aynı mantıksal modele karşılık gelen fiziksel
şema sayısı **iki üzeri yüz on dörttür**, otuz beş basamaklı bir sayı. Gerçek seçenek
sayısı bundan büyüktür, çünkü tip ve uzunluk ikiden çok değer alır. **Mantıksal model, bu
şema kümesinin hepsine aynı anda uyar** ve hiçbirini ötekine tercih etmez.

- **VM16** — Alt sınır sayımında her kararın yalnız iki seçeneği olduğu varsayılır; gerçek
  seçenek sayısı saklama ürününe göre değişir ve bu yüzden yazılmaz.

## Kararın Sahibi Kim

Yüz on dört karar ortadan kalkmaz; yalnız **sahibi değişir**. Bir kararın üç olası sahibi
vardır. Model onu bir olgu olarak söylemiş olabilir. Karar başka bir olgudan
**türetilebilir** olabilir. Ya da bir kişi, kod yazarken ya da şema kurarken, kendi
bildiğine göre yanıtlar.

Bu üçünün ayrımı ölçülebilir, ve ölçüm iki ayrı davranış gösterir.

- **VM17** — Bir kararın sahibi üçten biridir: modelde yazılı olgu, başka bir olgudan
  türetilmiş sonuç, ya da kişi. Model olgusu sayıldığında kavramsal modelin olgu sayısı
  büyür; türetilmiş karar sayıldığında büyümez.

```python
"""114 kararin sahibi kim: modele tasimak ile bir kuraldan turetmek ayri islerdir."""
ALAN_KARARI = ["tip", "uzunluk", "bos gecilebilirlik", "varsayilan deger"]
TABLO_KARARI = ["birincil anahtar dizini", "karakter kumesi"]
MANTIKSAL = {
    "IsEmri": ["anahtar", "no", "acilis", "durum", "Usta_anahtar"],
    "Usta": ["anahtar", "ad", "uzmanlik"],
    "Parca": ["anahtar", "kod", "ad", "birim"],
    "Tezgah": ["anahtar", "kod", "tur"],
    "Belge": ["anahtar", "tur", "tarih", "IsEmri_anahtar"],
    "IsEmri_Parca": ["anahtar", "IsEmri_anahtar", "Parca_anahtar"],
    "Usta_Tezgah": ["anahtar", "Usta_anahtar", "Tezgah_anahtar"],
}
OZNITELIK = {"IsEmri": ["no", "acilis", "durum"], "Usta": ["ad", "uzmanlik"],
             "Parca": ["kod", "ad", "birim"], "Tezgah": ["kod", "tur"],
             "Belge": ["tur", "tarih"]}

KARARLAR = [(t, a, k) for t, alanlar in MANTIKSAL.items() for a in alanlar
            for k in ALAN_KARARI]
KARARLAR += [(t, None, k) for t in MANTIKSAL for k in TABLO_KARARI]


def sahibi(karar, ayar):
    t, a, k = karar
    kavramsal = a in OZNITELIK.get(t, [])
    if ayar["alan"] and kavramsal and k in ("tip", "uzunluk"):
        return "model"
    if ayar["zorunluluk"] and kavramsal and k == "bos gecilebilirlik":
        return "model"
    if ayar["yabanci"] and a is not None and a.endswith("_anahtar") \
            and k in ("tip", "uzunluk"):
        return "turetilmis"
    if ayar["butunluk"] and a == "anahtar" and k == "bos gecilebilirlik":
        return "turetilmis"
    return "kisi"


AYARLAR = [
    ("kavramsal model oldugu gibi", dict(alan=0, zorunluluk=0, yabanci=0, butunluk=0)),
    ("+ 12 oznitelige alan", dict(alan=1, zorunluluk=0, yabanci=0, butunluk=0)),
    ("+ 12 oznitelige zorunluluk", dict(alan=1, zorunluluk=1, yabanci=0, butunluk=0)),
    ("+ yabanci anahtar turetimi", dict(alan=1, zorunluluk=1, yabanci=1, butunluk=0)),
    ("+ varlik butunlugu", dict(alan=1, zorunluluk=1, yabanci=1, butunluk=1)),
]
print("toplam karar:", len(KARARLAR))
print()
print("yapilandirma                  modelde  turetilmis  kisi  model olgusu  toplam")
for ad, ayar in AYARLAR:
    pay = {"model": 0, "turetilmis": 0, "kisi": 0}
    for kr in KARARLAR:
        pay[sahibi(kr, ayar)] += 1
    olgu = 26 + pay["model"]
    print(f"{ad:28s}  {pay['model']:7d}  {pay['turetilmis']:10d}  {pay['kisi']:4d}"
          f"  {olgu:12d}  {olgu + pay['kisi']:6d}")
```

```
toplam karar: 114

yapilandirma                  modelde  turetilmis  kisi  model olgusu  toplam
kavramsal model oldugu gibi         0           0   114            26     140
+ 12 oznitelige alan               24           0    90            50     140
+ 12 oznitelige zorunluluk         36           0    78            62     140
+ yabanci anahtar turetimi         36          12    66            62     128
+ varlik butunlugu                 36          19    59            62     121
```

Tablonun son sütunu bu dersin en öğretici sayısıdır. İlk üç satırda toplam **140'ta
sabit** duruyor: modelin taşıdığı olgu ile kişinin verdiği karar birbirini **birebir**
takas ediyor. Kavramsal modele on iki özniteliğin tip ve uzunluk bilgisini eklemek olgu
sayısını 26'dan 50'ye çıkarıyor ve kişiye kalan kararı 114'ten 90'a indiriyor. Zorunluluk
bilgisi de eklendiğinde olgu 62, kişiye kalan 78. **Modeli zenginleştirmek karar sayısını
azaltmıyor, kararın sahibini değiştiriyor** — ve bu iyi bir takastır, çünkü modeldeki
karar yazılıdır, okunabilir ve tartışılabilir.

Son iki satır ayrı bir şey yapıyor ve toplamı **düşürüyor**. Yabancı anahtar alanının tipi
ve uzunluğu, başvurduğu birincil anahtardan **türetilebilir**; ayrıca birincil anahtarı
oluşturan alan boş geçilemez — bu, İlişkisel Kuram kursunda kurulan **varlık
bütünlüğünün** doğrudan sonucudur. Bu iki türetimle kişiye kalan karar 78'den **59'a**
iniyor ve toplam 140'tan **121'e** düşüyor. Türetim, takastan farklıdır: modeli
büyütmeden karar sayısını gerçekten azaltır, çünkü aynı bilgiyi iki kez söylemeyi
gereksiz kılar.

## Modelin Susması Kararı Görünmez Yapar

Kalan elli dokuz kararın her biri bir kişinin yanıtıdır ve bu yanıtın modelde bir izi
yoktur. Bunun sonucu, kararın yanlış olması değildir; **yanlışlığın gösterilemez
olmasıdır.** Tek bir alan üzerinde bakmak yeter.

- **VM18** — Parça kodu havuzu sekiz kodludur ve karar anında yalnız ilk beşi görülmüştür.

```python
"""Tek bir uydurulan karar: Parca.kod alaninin uzunlugu. Model hicbir secenegi elemez."""
KOD = ["MK-01", "MK-002", "TR-08", "PL-7", "GK-1", "RD-1140", "HD-220-A", "SB-33012"]

print("uzunluk  reddedilen kod  hangileri")
for uzunluk in range(4, 11):
    red = [k for k in KOD if len(k) > uzunluk]
    print(f"{uzunluk:7d}  {len(red):14d}  {', '.join(red) if red else '-'}")
print()
print("kavramsal modelin bu karar hakkinda soyledigi olgu sayisi: 0")
print("veriden okunan en kucuk guvenli uzunluk:", max(len(k) for k in KOD))
print()
gorulen = KOD[:5]
secim = max(len(k) for k in gorulen)
sonra = [k for k in KOD if len(k) > secim]
print("karar aninda gorulen kod:", len(gorulen), "| secilen uzunluk:", secim)
print("sonradan gelen kod:", len(KOD) - len(gorulen),
      "| reddedilen:", len(sonra), "->", ", ".join(sonra))
```

```
uzunluk  reddedilen kod  hangileri
      4               6  MK-01, MK-002, TR-08, RD-1140, HD-220-A, SB-33012
      5               4  MK-002, RD-1140, HD-220-A, SB-33012
      6               3  RD-1140, HD-220-A, SB-33012
      7               2  HD-220-A, SB-33012
      8               0  -
      9               0  -
     10               0  -

kavramsal modelin bu karar hakkinda soyledigi olgu sayisi: 0
veriden okunan en kucuk guvenli uzunluk: 8

karar aninda gorulen kod: 5 | secilen uzunluk: 6
sonradan gelen kod: 3 | reddedilen: 3 -> RD-1140, HD-220-A, SB-33012
```

Yüz on dört kararın yalnız biri bu: `Parca.kod` alanının uzunluğu. Kavramsal model bu
karar hakkında **sıfır olgu** söylüyor; parça kodunun benzersiz olduğunu söylüyor, kaç
karakter olduğunu söylemiyor. Bu yüzden 4 ile 10 arasındaki her seçenek modele **eşit
derecede uygundur** ve modele bakarak hiçbiri elenemez.

Kararı eleyen tek şey veridir, ve veri karar anında eksiktir. Karar veren kişi beş kod
görmüş, en uzunu altı karakter, uzunluğu 6 seçmiş. Sonradan gelen üç kodun **üçü de**
reddediliyor. Bu bir hata değil, bir **tahmindir** — ve tahmin olduğu modelde yazmıyor,
çünkü modelde bu satır hiç yok. Beş yıl sonra o alana bakan biri, 6 sayısının bir alan
kuralı mı yoksa bir günün tahmini mi olduğunu ayırt edemez.

Buradan kursun kuralının veri modellemedeki karşılığı çıkar: **modelin sustuğu her yer bir
karar yeridir, ve orada verilen karar modelde görünmediği için tartışılamaz.** Yüz on dört
sayısı bu yüzden bir şema büyüklüğü ölçüsü değil, bir **görünmezlik** ölçüsüdür.

## Özet

- Fiziksel şema her alan için dört, her tablo için iki karar ister. Yedi tablo ve yirmi
  beş alan 100 alan kararı ve 14 tablo kararı, toplam **114 karar** üretir.
- Kavramsal model 26 olgu söylüyor; fiziksel şema 114 karar uyduruyor. Oran 4,3846, yani
  modelin söylediğinin yaklaşık 4,4 katı.
- Her karar yalnız iki seçenekli olsa bile aynı mantıksal modele karşılık gelen fiziksel
  şema sayısı 2 üzeri 114, otuz beş basamaklı bir sayıdır; mantıksal model bunların
  hepsine aynı anda uyar.
- Kararı modele taşımak bir **takastır** ve toplamı değiştirmez: 12 özniteliğe alan ve
  zorunluluk bilgisi eklendiğinde olgu 26'dan 62'ye çıkarken kişiye kalan karar 114'ten
  78'e iner, toplam 140'ta sabit kalır.
- Kararı bir kuraldan **türetmek** toplamı gerçekten düşürür: yabancı anahtarın tipi
  başvurduğu anahtardan, anahtarın boş geçilemezliği varlık bütünlüğünden geldiğinde
  kişiye kalan 59, toplam 121 olur.
- Modelin sustuğu bir karar görünmez olur: `Parca.kod` uzunluğu için model sıfır olgu
  söylüyor, karar anında görülen beş kod 6 uzunluğunu seçtiriyor, ve sonradan gelen üç
  kodun üçü de reddediliyor.

## Kurs Kapanışı

On ders tek bir bakım atölyesini modelledi ve tek bir soruyu sordu: bir gösterim, sistemi
kaç başka sistemden ayırt edemiyor. Kursun kuralı buydu — **kaç sistemi birbirinden
ayıramadığı yazılmayan gösterim ölçülmemiş sayılır.** Her derste üç sayı yan yana durdu:
sistemin gerçek olgu sayısı, gösterimin yazdığı simge sayısı, ve aradaki bedel.

| Ders | Sistem | Gösterim | Bedel |
|---|---|---|---|
| Gösterim Ailesi ve Kayıp | 5 bağ, 11 gizli alan | 20 simge | **2048** sistem aynı diyagrama düşüyor |
| Sınıf Diyagramları | aynı 5 bağ | 25 ve 31 simge | 25 simgede **64**, 31 simgede **1** sistem kalıyor |
| Bileşen ve Yerleşim Diyagramları | 6 sınıf, **203** bölüntü; 540 örten atama | 3 kutu + 2 bağlantı | en kaba çizim **10 bölüntüyle** uyumlu; bağlantı simgeleri 540'ı 20'ye indiriyor, içerik simgeleri 1'e |
| Kullanım Senaryosu Diyagramları | 20 olgu: 2 aktör, 3 senaryo, 5 bağ, 3 sahiplik, 7 iç adım | 9 simge | **512** sistem aynı diyagrama düşüyor; taban belirsizlik 128 |
| Sıra Diyagramları | 24 iz | 1 diyagram, 1 iz | kapsam **1/24 = 0,0417**; dört diyagram 0,1667 |
| Etkinlik Diyagramları | 10 iş, 13 önkoşul | 23 simge, 1 kısmi sıralama | **168 tam sıralama** kabul ediliyor, tek sıranın kapsamı 0,006; karar düğümü 492'ye taşıyor |
| Durum Makinesi Diyagramları | 6 gerçek dizi | 10 simge (4 durum, 6 geçiş) | eksik kabul **2**, fazla kabul **2**; iki geçiş eklenince 0 ve **26** — on üç kat |
| Varlık–İlişki Modeli | 26 olgu | 26 yazılı öge | **1.048.576** sistem aynı gösterime düşüyor |
| Kavramsal, Mantıksal ve Fiziksel Model | 26 olgu | 7 tablo, 25 alan | **2 düşen kısıt**, 13 uydurulan alan, 175 fazla kabul |
| Modelden Şemaya | 26 olgu | 7 tablo, 25 alan | **114 uydurulan karar**, modelin söylediğinin 4,4 katı |

Tablonun ikinci okuması birincisinden değerlidir: **gösterimi düzeltmek onu daha yanlış
yapabilir.** Durum makinesine iki geçiş eklemek reddedilen diziyi sıfırladı ama fazla
kabulü on üç katına çıkardı. Bir olguyu varlıktan özniteliğe indirmek modeli sadeleştirdi
ama on bir durumu gösterilemez yaptı. Düşen bir kısıtı kurtarmak, modelde hiç bulunmayan
bir alan eklemeyi gerektirdi. Ayrıntı eklemek her zaman kazanç değildir ve **kaybı
sayılmadan eklenmez.**

Üçüncü ve en pahalı sonuç veri modellemeden geldi: **soyutlama düzeyi hem unutur hem
uydurur, ve ikisi ayrı ayrı sayılır.** Kavramsal modelden fiziksel şemaya inerken beş
kısıttan ikisi düştü, ama modelde hiç yazmayan 114 karar ortaya çıktı. Unutulan iki kısıt
görünürdü, çünkü modelde bir zamanlar yazıyorlardı; uydurulan 114 karar görünmez, çünkü
hiç yazmadılar. **Bir gösterimin en tehlikeli yanı sildiği şey değil, hiç söylemediği
şeydir.**

Kurs boyunca hiçbir diyagram çizilmedi. Her gösterim, taşıdığı bilgi ögelerinin listesi
olarak kuruldu ve sayıldı; ölçülen şey resmin güzelliği değil, resmin **kaç sistemi tek
resme düşürdüğüydü**. Hangi diyagram türünün hangi soruya uyduğu ve bir diyagram kümesini
güncel tutmanın neye mal olduğu bu kursun soruları değildi; ikisi de Yazılım Mimarlığı
müfredatının Mimari Karar ve Dokümantasyon kursunda ölçüldü ve buraya taşınmadı.

Bir sonraki kurs, **İleri Algoritmalar ve Problem Çözme**, aynı disiplini başka bir
gösterim üzerinde sürdürür. Orada bir problemi tanınmış bir algoritmik kalıba indirgemek
öğretilir — böl ve yönet, açgözlü seçim, dinamik programlama, geri izleme. İndirgeme de
bir gösterim seçimidir: problemi bir kalıba oturtmak onun bazı yanlarını görünmez yapar,
ve kalıbın koşulları sağlanmıyorsa yanıt sessizce yanlış çıkar. Bu yüzden o kursun
merkezinde bir gerekçelendirme durur: optimal alt yapı ve örtüşen alt problem koşullarının
**sağlandığının gösterilmesi**. Buradaki kural orada da geçerlidir — bir indirgemenin neyi
düşürdüğü yazılmadıkça, indirgeme ölçülmemiş sayılır.
