Dodawanie atrybutów do towarów

0

Od dwóch dni zastanawiam się jak zorganizować bazę danych, aby do niektórych towarów można było przypisać atrybuty. W jednej bazie chcę mieć wszystko (tzn. materiały budowlane, ubrania, piłeczki do pingponga...). I tak np. dla ubrań chcę mieć atrybut rozmiar (S, M, L, XL, XXL) oraz atrybut kolorów.

Użytkownik kiedy wchodzi na stronę www i wybiera określoną kategorię powinien mieć wtedy z lewej strony opcje filtrowania po atrybutach, cenach, kolorach (pod warunkiem że wyświetlane w danym momencie produkty mają przypisany ten sam atrybut). Jak takie coś zrobić? Jak to zorganizować w sql?

2

Model bazy EAV będzie pasował, zresztą w tym między innymi celu jest wykorzystywany (vide Magento).

0
Patryk27 napisał(a):

Model bazy EAV będzie pasował, zresztą w tym między innymi celu jest wykorzystywany (vide Magento).

Wspomnijmy tutaj tylko o tym, że załatwi nam to "wyciągnięcie" atrybutów per kategorię / towar ale należy jeszcze pamiętać o tym, że główne zapytanie wyciągające towary z uwzględnieniem atrybutów będzie już nieco bardziej skomplikowane bo trzeba je będzie również odpowiednio połączyć z tymi atrybutami bo np w tabeli towary nie będzie pola "rozmar", po który będziemy mogli filtrować wynik.

0

@woolfik: chyba że oprócz samej tabeli EAV wykorzysta się model płaskiej bazy, co także można zobaczyć w Magento - podczas indeksowania produktów tworzy on sobie tabelę grupującą wszystkie atrybuty produktów (tzn. jedna kolumna = jeden atrybut + dodatkowo pole na id), dzięki czemu znika potrzeba bawienia się w złączenia, kosztem rzecz jasna konieczności implementacji odpowiednich mechanizmów generujących oraz utrzymujących indeks w porządku.

0

Tak tak ale to niestety też nieco komplikuje samo zapytanie. Ja swojego czasu pracowałem przy hurtowni danych i widziałem tabele towarów, które miały prawie 500 kolumn aby właśnie nie tworzyć tego typu mechanizmów i to też działało, fakt po stronie bazy danych z matematycznego punktu widzenia jest to mniej optymalne, ale przy porządnym serwerze bazodanowym i przemyślanej strategii optymalizacji zapytań działa to równie dobrze, a przynajmniej zapytanie końcowe (filtrowane) jest dużo łatwiejsze do wykonania

1

@woolfik tylko, że w takim wypadku dodanie nowego atrybutu wiąże się z dodaniem kolumny w tabeli i przede wszystkim obsłużenia tego po stronie aplikacji, a przy EAV raz oprogramowane nie ma znaczenia ile dana grupa posiada atrybutów

0

No dobrze, a jak przechowywać stan (ilość towarów) w zależności od atrybutu. Powiedzmy, że mam towar o nazwie "bluza". Towar ten może być rozmiaru S, L, XL... Ale również może być czarny, biały itd. Jak przechowywać ilości danego towaru w zależności od atrybutu? Rozumiem, że to znacząco komplikuje sprawę :).

0

Utwórz atrybut stan magazynowy? ;-)

1

jeśli chcesz mieć stan magazynowy dla każdego atrybutu (oraz ich np. części wspólnej) to jedyne rozwiązanie jakie widzę to trzymanie każdego towaru o odmiennych parametrach jako osobnej pozycji magazynowej wraz z ilością konkretnego typu towaru i wiązanie wartości parametru do pozycji magazynu. Towar masz jeden (np. bluza xxx) ale pozycji na magazynie tyle ile tych różnych bluz na stanie. Każda pozycja ma swoje atrybuty. Wtedy nie ma problemu policzyć bluzy czarne, bluzy w rozmiarze XL oraz bluzy zielone w rozmiarze M.

0

Musi być jakiś sposób...

0

jeśli chcesz mieć stan magazynowy dla każdego atrybutu (oraz ich np. części wspólnej) to jedyne rozwiązanie jakie widzę to trzymanie każdego towaru o odmiennych parametrach jako osobnej pozycji magazynowej wraz z ilością konkretnego typu towaru i wiązanie wartości parametru do pozycji magazynu. Towar masz jeden (np. bluza xxx) ale pozycji na magazynie tyle ile tych różnych bluz na stanie. Każda pozycja ma swoje atrybuty. Wtedy nie ma problemu policzyć bluzy czarne, bluzy w rozmiarze XL oraz bluzy zielone w rozmiarze M.

A co gdyby stworzyć coś takiego (patrz rysunek w załączniku)? Raczej nie będzie rozróżnienia produktu 3-stopniowego tzn. ze względu na rozmiar, kolor, i np. materiał. Znacie jakieś produkty, które możnaby tak rozróżnić?

0

a co to jest wartosc_atrybuty_id_1 i wartosc_atrybuty_id_2? i co w przypadku, kiedy ktoś będzie chciał znać stan 3 lub więcej atrybutów?

0

a co to jest wartosc_atrybuty_id_1 i wartosc_atrybuty_id_2? i co w przypadku, kiedy ktoś będzie chciał znać stan 3 lub więcej atrybutów?

Może rzeczywiście za bardzo skrupulatnie chcę to zrobić. Przeprawiłem na Twoją propozycję. Ostatecznie przyjmuję to co w załączniku.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.