8 Ağustos 2013 Perşembe

Tablo Kalıtımı (Table Inheritance) Bölüm 2 : Ne Zaman Kullanmalı?

İki tablo arasında kalıtımın kullanılması düşünüldüğünde, tablolardan birinin temel(base) tablo, diğerinin türetik(derived) tablo olduğunu varsaymamız gerekir. Aşağıda belirtilen tüm koşulların hepsi doğru ise iki tablo arasında kalıtım tanımlanabilir:
  • Bu iki tablonun sistemdeki diğer tüm tablolardan hiçbiriyle ilişkisi olmadığını varsayarsak aralarında 1-n ya da n-n ilişki olmaması gerekir. Tek geçerli ilişki 1-1 dir.
  • Temel tablodaki bir satıra karşı gelen türetik tablodaki satırın gerçek dünyadaki aynı maddeye karşılık geliyor olması gerekir. Bu iki satır, aynı maddenin farklı özelliklerini(Attributes) belirtir.
  • Temel(base) tablodaki her bir satır, kesinlikle türetik(derived) tablodaki bir satıra karşılık gelmelidir.Eğer herhangi iki tablodan birinden bir satır silinirse, diğer tabloda karşılık gelen satırda silinmelidir.
  • Temel(base) tablo, büyük olasılıkla en az 2 tane türetik(derived) tabloya sahiptir.Bu türetik tablolar, farklı şeylerin farklı özellikleri için alanlar bulundurmaktadır. Bu türetik(derived) tablolar, Temel(base) tabloda birlikte takip edilen maddenin varyasyonlarına karşılık gelmektedir.
  • Temel(base) tabloda temsil edilen hiçbir madde, türetik tablolarının her birinde birden fazla  temsil edilmemelidir.
    • Not: Dynamics AX'da, sistem temel(base) tablodaki her bir kaydın, türetik tabloların birden fazlasıyla ilşkili olmasına engel olur. Bu, Microsoft ürün takımı tarafından verilmiş bir implemantasyon kararıdır.
  • Türetik(derived) tablo, performans iyileştirmesi için örneğin: ana tablosuna imaj kolonu koymak gibi değildir.
    • Not: Bir tablonun kalıtım ilişkisine sahip olmadığı durumlarda, SupportsInheritance özelliği Yes seçilirse küçük bir performans kaybı yaşanabilir. 

Tablo Kalıtımının Örnek ile Açıklanması


Bir önceki yazımızda verdiğimiz örnek kalıtım şeması şu şekilde idi:

Object>Canli>Insan>Ogretmen

İnsan sınıfından Ögretmen sınıfını türetmiştik. Şimdi de başka bir sınıf daha türetelim.

Object>Canli>Insan>Avukat


Aynı Alan İsimleri İpucu Olabilir

Şimdi diyelim ki Dynamics AX'ta öğretmenlerin ve avukatların takip edileceği bir uygulama geliştirmeniz isteniyor. Öğretmenleri TabOgretmen ve avukatları da TabAvukatlar tablolarında takip edecek şekilde veritabanı isimlendirmesini yaptınız. Sonrasında öğretmenler ve avukatları takip etmek için kullanmanız gereken alanlar için bir liste yaptınız:

İnsan Öğretmen Özellikleri
İnsan Avukat Özellikleri
Doğum Tarihi
Doğum Tarihi
İsim
İsim
Okul
Baro


İlk iki yazdığınız özelliğin, Doğum Tarihi ve İsim özelliklerinin tekrarlandığını farketmişsinizdir. Bu tekrarlama daha genel bir tabloya ihtiyacınız olduğuna dair bir ipucudur. Bunun için de tekrarlanan alanları taşıdığınız tabInsan isimli yeni bir tablo oluşturdunuz.

Üç Tablo için Test Verileri

Bu bölümde bu üç tablo için test verileri gireceğiz.

RecId sistem alanı bu üç tabloya da birincil anahtar(primary key) olarak eklendi. Ayrıca, InstanceRelationTypeId alanı da temel(base) tabloya türetik(derived) tablolarına karşılık gelecek şekilde eklendi. 50011 değeri TabOgretmen tablosuna, 50012 değeri de TabAvukat tablosuna karşılık gelmektedir.

TabInsan Test Verisi

InsanDogumTarihi
InsanAdi
InstanceRelationTypeId
RecId
01.01.1982
Ahmet
50011
1234567890
01.05.1980
Taylan
50012
1234567891
05.08.1985
Emre
50012
1234567892
09.04.1990
Alper
50011
1234567893
13.12.1991
Güven
50011
1234567894
30.11.1970
Kazım
50012
1234567895
* TabInsan.RecId kolonundaki her bir değer TabInsan tablosundan türeyen tablolardaki 
RecId kolonlarındaki değerlere karşılık gelmelidir.

TabOgretmen Test Verisi

Okul
RecId
Ted Koleji
1234567890
Ptt Koleji
1234567893
Microsoft Meslek Lisesi
1234567894

TabAvukat Test Verisi

Baro
RecId
İstanbul
1234567891
Ankara
1234567892
İzmir
1234567895

Hiç yorum yok:

Yorum Gönder