2009-05-30 15 views
13

Obecnie czytam o możliwości wykorzystania dziedziczenia z Entity Framework. Czasami używam aplikacji do wpisywania rekordów danych i nie jestem pewien, czy użyłbym TPT lub TPH, czy nie ...Dziedziczenie dziedziczenia struktury: TPT, TPH lub brak?

Na przykład ... Mam sklep e-commerce, który dodaje wysyłkę, fakturowanie i adres dostawy

mam tablicę adresów:

RecordID 
AddressTypeID 
Street 
ZipCode 
City 
Country 

i stół AddressType

RecordID 
AddressTypeDescription 

konstrukcja tabeli różni się g erneral konstrukcja kiedy ludzie popisać TPT lub TPH ... Czy jest sens myśleć o dziedziczenie kiedy o podejście tak ..

Mam nadzieję, że sens ...

dzięki za pomoc ...

Odpowiedz

9

Zastanawiając się, jak reprezentować dziedziczenie w bazie danych, należy wziąć pod uwagę kilka rzeczy.

Jeśli masz wiele różnych podklas, możesz mieć wiele dodatkowych sprzężeń w zapytaniach dotyczących bardziej złożonych typów, które mogą zaszkodzić wydajności. Jedną dużą zaletą TPH jest to, że wyszukujesz jedną tabelę dla wszystkich typów w hierarchii i jest to dobrodziejstwem dla wydajności, szczególnie dla większych hierarchii. Z tego powodu mam tendencję do faworyzowania tego podejścia w większości scenariuszy:

Jednak TPH oznacza, że ​​nie można już mieć pól NOT NULL dla podtypów, ponieważ wszystkie pola dla wszystkich typów znajdują się w pojedynczej tabeli, przesuwając odpowiedzialność za integralność danych w kierunku Twoje zgłoszenie. Chociaż może to brzmieć okropnie w praktyce, nie uważam tego za zbyt duże ograniczenie.

Jednak zazwyczaj korzystałabym z TPT, gdyby było dużo pól dla każdego typu i że liczba typów w hierarchii była prawdopodobnie mała, co oznacza, że ​​wydajność nie stanowiła problemu z połączeniami, i masz lepszą integralność danych.

Zauważ, że jedną z zalet EF i innych ORMów jest to, że możesz zmienić zdanie na torze bez wpływu na aplikację, więc decyzja nie musi być całkowicie wyryta w kamieniu.

W przykładzie, nie wydaje się mieć związek dziedziczenia, wygląda jak jeden do wielu z typu adresu na adresy

To byłby reprezentowany między klasami coś jak następuje:

Address.AddressType 
AddressType.Addresses 
4

Jako wskazówki Keith, to article sugeruje TPT w EF Wagi strasznie, ale nie próbowałem go siebie.

-3

Poszukaj this article. Uwzględniono niektóre aspekty wykorzystania dziedziczenia.

+0

link nie jest już ważny. Popraw lub usuń tę odpowiedź –