has_many through, polimorfia?

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:

  1. pole type w tabeli cen
  2. 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 :slight_smile:

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 :smiley:

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.