11

Czytam o dziedziczeniu z tabeli klas (CTI) i stwierdzeniu, że wolę to ogólnie. Mam pytanie, czy istnieje jakiś konkretny przypadek użycia w przypadku dziedziczenia z pojedynczej tabeli (STI), w którym używa się go w porównaniu z CTI?Dziedziczenie pojedynczego stołu lub dziedziczenia tabeli klas?

Czytam http://rhnh.net/2010/07/02/3-reasons-why-you-should-not-use-single-table-inheritance i o ile wiem, jest solidny. Przypadek użycia STI to różnica w zachowaniu, ale nie dane.

Odpowiedz

7

Chciałbym zwrócić uwagę na świetny artykuł, który znalazłem, który wyjaśnia z jasnością, dlaczego i kiedy używać CTI. LINK

+0

dziękuję za to – apneadiving

+1

Również innym linkiem, który do mnie prowadzisz był http://peterhamilton.github.com/citier/, który ma wiele linków na blogu na ten temat. Dziękuję Ci. – SpaceGhost

+0

@SpaceGhost Tu nie ma strony GitHub Pages. –

0

Używaj STI do różnic w zachowaniu, tak jak powiedziałeś. Przykład użyłbym:

Masz zakup, a masz PartialPurchase, jedyną różnicą w danych jest to, że po zakończeniu PartialPurchase, dostaje związek z nowo utworzonym zakupem.

Tak więc zachowanie jest inne, także są przypadki, w których chciałbym, aby PartialPurchase i Purchase pojawiły się w tym samym zapytaniu. Dla przedstawiciela handlowego chcą widzieć wszystkie swoje zakupy i częściowe zakupy w tym samym czasie, więc ma sens, aby te dane znalazły się w tej samej tabeli. W przeciwnym razie wszystkie atrybuty są takie same dla każdego modelu.

W takim przypadku użyłbym STI ponad CTI.

Choć gdyby dane zaczęły się znacznie różnić, prawdopodobnie utworzyłbym inną tabelę, która odnosi się do tabeli STI, a w przypadku wielu różnych dziedzin prawdopodobnie pomyślałem o CTI.

Powiązane problemy