2013-01-07 15 views
5

Chcę zaimplementować filtrowanie produktów w kategorii i mam pytania dotyczące właściwego schematu DB. Na razie mam poniższych tabelach:Schemat bazy danych dla atrybutów produktów

Kategorie:

1. id 
2. category 
3. description 

Produkty:

1. id 
2. category_id 
3. product 
4. image 
5. price 

Atrybuty:

1. id 
2. attribute 

Category_Attributes:

1. category_id 
2. attribute_id 

I pytanie mam to co mam tworzyć tabele i jakie kolumny krzyczeć muszą przechowywać różne rodzaje wartości, wartości atrybutów, produkty itp wartości atrybutów

Would to normalne, aby utworzyć kolejne 3 tabele:

wartości:

1. id 
2. value 

Attributes_Values ​​:

1. attribute_id 
2. value_id 

Products_Attributes_Values ​​:

1. product_id 
2. attribute_id 
3. value_id 

mam pomieszane w ostatnich tabel. Co byłoby lepiej przechowywać i filtrować?

+0

Czy możesz wyjaśnić więcej o tym, co chcesz osiągnąć przy trzech ostatnich stołach? Co powinien zrobić każdy stół? Czy wartości mają być standardową listą? Czy ta lista zależy od kategorii? Czy produkt może mieć więcej niż jedną wartość dla atrybutu? Trudno udzielić porady bez lepszego zrozumienia twoich wymagań. –

+0

Na przykład mam kategorię "Koraliki", będzie ona miała kilka atrybutów: Średnica, Materiał, Opakowanie. Średnice będą wynosić 8 mm, 10 mm, 12 mm itp. Materiał może również różnić się tworzywem sztucznym, drewnianym, szklanym, metalowym, ceramicznym. W obszarze administracyjnym chcę mieć selekcje dla wszystkich atrybutów i wybrać jedyną opcję. A w katalogu chcę dowolnie filtrować moje towary, na przykład szukam Koraliki o średnicy 10mm, 12mm i materiału ceramicznego. – UAMoto

+0

Tak, każda kategoria będzie miała swoje atrybuty, a te atrybuty będą miały swoje wartości. – UAMoto

Odpowiedz

8

Co próbujesz osiągnąć to Entity-atrybut-wartość (EAV) lub ewentualnie rząd modelowanie rozwiązanie. Zwróć uwagę, że ten typ struktury jest w dużej mierze niezadowolony z wielu różnych powodów.

Jednakże Dowiodłem (np here, here, here i here), która dodana jest złe, z wyjątkiem, gdy tak nie jest. Jednym z tych rzadkich wyjątków jest katalog produktów, w którym śledzisz właściwości produktów i gdzie te właściwości nie są aż tak interesujące (do twojego systemu!) z wyjątkiem tego, że musisz je pobrać i wydrukować. na stronie internetowej produktu lub siatki porównania itp

Rozważmy projekt takiego:

enter image description here

co robisz w modelu jak ten, który opisuje atrybuty produktów w danej kategorii powinna mieć, jakie wartości mogą mieć te atrybuty, a następnie jakie wartości każdy konkretny produkt ma dla ea atrybut ch.

Ten wzór ma wszystkie typowe ograniczenia, które nakłada EAV.Jeśli jednak chcesz zadać pytania typu: "Które kulki mają średnicę 8 mm?" to całkiem proste.

+0

czy nie mamy problemów z wydajnością, jeśli używamy 'eav'? jeśli staniemy w obliczu sugestii, które podasz, aby rozwiązać problemy z wydajnością, czy istnieje jakiś sposób, aby temu zapobiec? – fresher

+0

@PhpBeginner Tak, mogą istnieć różne wyzwania, które wynikają z używania EAV, dlatego tak wiele osób uważa to za wzór. Ja sam nigdy nie użyłbym EAV z wyjątkiem tych bardzo szczególnych okoliczności, w których EAV doskonale się nadaje. Argumentowałem [tutaj] (http://stackoverflow.com/questions/11779252/entity-attribute-value-table-design/11972029#11972029) i gdzie indziej, że katalogi produktów online są jedną z tych aplikacji. W tym scenariuszu EAV nie stanowiłoby problemu z wydajnością i działałoby z dużo prostszym kodem niż gdyby zastosowano pełne semantyczne modelowanie danych. –

Powiązane problemy