Cześć!
Robię coś w rodzaju sklepu internetowego i buduję schemat bazy danych. Mam co do niego wątpliwości, dlatego proszę o pomoc. Oto tabele:
+----------------------------------------------------+
| products |
+----+---------+----------+-------+---------+--------+
| id | type_id | brand_id | model | variant | option |
+----+---------+----------+-------+---------+--------+
+--------------------------------------------------+
| offers |
+----+---------+----------+-------+---------+------+
| id | type_id | brand_id | model | variant | slug |
+----+---------+----------+-------+---------+------+
+----------------------+
| specification_fields |
+----+------+----------+
| id | name | type |
+----+------+----------+
+----------------------------------+
| specification_rows |
+----+----------+----------+-------+
| id | offer_id | field_id | value |
+----+----------+----------+-------+
type_id
to typ produktu, np. procesor, płyta główna, etc.
Teraz moje wątpliwości:
- Tabele products i offers połączone są 4-kolumnowym kluczem obcym. To dużo. Kolumny type_id i brand_id wystarczy, że będą 1-bajtowe, ale model i variant to już varchar. Można to jakoś zoptymalizować czy nie ma się czym przejmować? Produktów na pewno nie będzie milion, co najwyżej kilka tysięcy.
- Specyfikacje. To co pokazałem to prościej chyba się nie da. Tylko zastanawia mnie czy nie ma lepszego rozwiązania. Tych rekordów będzie przybywać baardzo szybko. Myślałem o zapisywaniu specyfikacji całego produktu jako np. JSON. Problem w tym, że będę chciał zrobić filtrowanie wg. określonych pól specyfikacji. Nie kojarzę (przynajmniej w MySQL) mechanizmu, którym mógłbym to zrobić. Czy w takim razie zrobić to po stronie PHP?
- Pola specyfikacji chciałbym móc grupować. Jakiś lepszy pomysł niż kolejna tabela i klucz obcy w specification_rows
group_id
? - Waga. Teoretycznie powinna być częścią specyfikacji, ale może zależeć od
option
, więc wydaje się to słabym pomysłem. - Kolor. Też jako część specyfikacji czy osobno? Dlaczego?
Dodam, że planuję to zrobić na MySQL, ale jeśli inny typ bazy lepiej spełni moje wymagania to wdzięczny będę niezmiernie za informacje.
Jak to się robi w takich sklepach jak morele?