Ders 10 / 10
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.
İçindekiler
Ö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.
"""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.
"""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.
"""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.koduzunluğ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.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.