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
link nie jest już ważny. Popraw lub usuń tę odpowiedź –