Próbuję dobrać optymalną metodę dla wiązania tabeli z wieloma tabelami od niej zależnymi
Uproszczę na 2 tabelach zależnych od jednej
tabela Produktów
tabela cen
tabela Dodatków
Oferty jak i dodatki muszą być wycenione, więc w modelu do wyboru mam:
- pole type w tabeli cen
- has_many through … tabele filtrujące dla produktów i dodatków
Siłą rzeczy tabela cen będzie duża i jakoś muszę rozróżnić Produkty i Dodatki w cenie
Która metoda filtrowania jest efektywniejsza dla dużych tabel
ja skłaniam się za rozwiązaniem 2
Kiedy stosujecie polimorfię a kiedy stosujecie tabele pośrednie ?
A zastanawiałeś się nad 3m rozwiązaniem czyli pozbyciem się tabeli cen i trzymaniem ich w dodatkowej kolumnie pozostałych tabel?
Obawiam się,że Twoja tabela cen będzie tak duża jak największa z odwołujących się do niej tabel Produktów lub Dodatków, a w najgorszym przypadku będzie to suma rozmiarów tabel które się do niej odwołuja.
Z tego powodu raczej nie ma sensu trzymać cen w osobnej tabeli.
Jeśli są jakieś inne powody dla których musisz mieć ceny w dodatkowej tabeli to skłaniałbym sie ku rozwiązaniu 2.
Druga
Polimorfia - nigdy :), kiedy tylko się da unikam tabel pośrednich.
ja czasem tylko
Tabele pośrednią stosujesz wtedy gdy chcesz aby złączenie miało jakieś własne atryubuty. Np masz tabele produktów i kategorii, tutaj fajnie jest mieć łączącą ponieważ możesz tam wrzucić pole products_count, czyli ilość produktów w danej kategorii
Historia cen mi się przyda do rozliczania… więc tabela cen jak najbardziej zostanie. w najgorszym wypadku tabela pośrednia albo tabela cen dla każdego obiektu “do wyceny”
Zastanawiam się nad tym czy najbardziej aktualnej ceny nie trzymać w tabeli obiektów których cena dotyczy (wartość). Takie zagnieżdżenie wymaga pilnowania zmian w modelu cen ale nie trzeba zaglądać po aktualną cenę doi cen
Temat polimorfia kontra has_many through uważam za wyczerpany… dzięki chłopaki … takich rzeczowych odpowiedzi się nie spodziewałem
Zobacz sobie jak to rozwiązuje spree - ceny są zachowywane per tranzakcja, i to jest chyba najlepsze wyjście. w ogóle zastanów się czy nie oprzeć tego sklepu na spree.