Witam
na studiach na zaliczenie wybrałem sobie projekt stworzenie sklepu internetowego czy też aukcyjnego. Będzie to sklep elektroniczny i tak się zastanawia jak sobie poradzić z bazą danych. Otóż np. jak rozwiązać problem z parametrami urządzeń? Monitor ma inne parametry niż np. procesor. W bazie danych zrobić do każdej kategorii dodać tabelę z parametrami? Nie chciałbym tych wszystkich parametrów wrzucić do jednej kolumny pod nazwą opis.
To zobacz jak np. wygląda prawdziwy sklep. Zwykle, nieważne jaki produkt otworzysz, to masz ładną tabelkę z parametrami. Oznacza to, że musi to być trzymane w jeden spójny sposób.
I tak, zrób tabelę parameteres z 3 kolumnami (id, key, value). Każdy produkt powinien mieć listę takich parametrów.
Ale czy na pewno wrzucanie np. monitorów i tabletów do innych tabel jest dobrym pomysłem? Bo dla mnie to podchodzi stricte pod produkt na sklepie.
Jest kilka opcji:
- Już wspomniane - tworzysz tabelę z parametrami: ID, OBJECT_ID, KEY, VALUE.
- Tworzysz tabelę z produktami, kolumny: ID, TYPE, MANUFACTURER, NAME, PARAMETERS i do PARAMETERS wrzucasz JSONa/XMLa.
- Tworzysz różne tabele na różne kategorie.
Rozwiązania 1 i 2 są elastyczne, ale wymagają jakiejś formy kontroli spójności danych (co jeśli ktoś doda do myszki parametr "głębia kolorów"?). W przypadku rozwiązania 2 można po prostu walidować o XSD obiekt po typie, w przypadku nr 1 można dorzucić słownik parametrów i sprawdzać, czy nikt przypadkiem nie dorzuca parametrów, których brakuje w słowniku.
Rozwiązanie 3 jest wygodne dla mniejszych ilości kategorii i wydajne.
Dzięki za szybką odpowiedź, chyba zrobię osobną tabelę PARAMETRY w której wrzucę IdParametru, IdKategorii, NazwaParametru, WartoscParametru, CzyAktywna
Teoretycznie dostęp do dodawania Parametru będzie miał ktoś odpowiedzialny więc i on będzie sprawował kontrolę co tam się znajduję, użytkownik nie będzie mógł tego edytować.
Czy przez idKategorii rozumiesz kategorię produktu czy parametru? Bo jeżeli to pierwsze, to źle zakładasz. Parameter to cecha produktu a nie kategorii. W razie gdybyś chciał znaleźć wszystkie parametry które są przypisane do jakiejś kategorii to zawsze możesz zrobić dodatkowego joina do produktu.
W sumie myślałem o kategorii do jakiej należy produkt, bo każdy laptop ma takie same parametry (ilość ramu, rodzaj procesora). A produktem dopiero jest np. Laptop Asus W232X
A no tak musi być do produktu bo przecież każdy laptop ma inne taktowanie a w tabeli Parametry przechowuje również wartości tych parametrów. Dzięki
Po co wynajdować koło na nowo?
Wzorzec EAV opisałem już tutaj: http://4programmers.net/Forum/Newbie/251523-konfigurator_pc_-_jak_zorganizowac_klasy?p=1137496#id1137496
Tu będzie o tyle łatwiej, że nie potrzebny jest zestaw
, za to definicja jakie coś może mieć parametry jest w Kategorii, więc nie ma możliwości, że ktoś doda wartość dla "głębii kolorów" do myszki.
No też chce to rozdzielić na 3 tabele.
Produkt - nazwa np. Intel i5
Kategoria - CPU, DDR itd
Parametr - przechowywany parametr i jego wartość np. taktowanie - 2,2Ghz