Jeśli używam Class Table Inheritanceznaczenia:
jedna tabela dla produktów, przechowująca atrybuty wspólne dla wszystkich typów produktów. Następnie jedna tabela dla każdego typu produktu, przechowująca atrybuty specyficzne dla tego typu produktu. -Bill Karwin
Które z sugestii Billa Karwina podoba mi się najbardziej. Mogę przewidzieć jedną wadę, którą spróbuję wyjaśnić, jak nie stać się problemem.
Jaki plan awaryjny powinienem mieć na miejscu, gdy atrybut, który jest wspólny tylko dla 1 typu, następnie staje się wspólny dla 2, potem 3 itd.?
Na przykład: (to tylko przykład, a nie mój prawdziwy problem)
Jeśli sprzedajemy meble, możemy sprzedawać krzesła, lampy, sofy, telewizory itp. Typ telewizora może być jedynym typem, jaki posiadamy, który ma pobór mocy. Więc umieściłbym power_consumptionatrybut na tv_type_table. Ale potem zaczynamy oferować zestawy kina domowego, które również mają swoją power_consumptionwłaściwość. OK, to tylko jeden inny produkt, więc dodam to pole stereo_type_tablerównież, ponieważ w tym momencie jest to prawdopodobnie najłatwiejsze. Ale z biegiem czasu, gdy zaczynamy nosić coraz więcej elektroniki, zdajemy sobie sprawę, że power_consumptionjest na tyle szeroka, że powinna znajdować się w main_product_table. Co mam teraz zrobić?
Dodaj pole do main_product_table. Napisz skrypt, który przejdzie przez elektronikę i umieść poprawną wartość z każdego type_tableelementu w pliku main_product_table. Następnie upuść tę kolumnę z każdego type_table.
Teraz, gdybym zawsze używał tej samej GetProductDataklasy do interakcji z bazą danych w celu pobrania informacji o produkcie; wtedy jeśli jakiekolwiek zmiany w kodzie wymagają teraz refaktoryzacji, powinny dotyczyć tylko tej klasy.