Сейчас я планирую структуру базы продуктов. Возник вопрос вариантов хранения / параметров товара.
Например, если бы это был размер товара — было бы достаточно создать три поля шириной / высотой / глубиной, но что делать, если десятки параметров?
Предполагается, что список параметров может быть изменен, и я вижу об этой структуре:
1 — ширина
2 — высота
…
11 — цвет
но я не могу связать это как товар — можно сделать поле с типом json
{1: «20», 2 «30», …, 11: «белый»}
а потом лечится на выборке товара, но я не знаю, как тогда сделать параметры фильтра
кто может посоветовать правильный путь?
Этого можно добиться тремя способами
separate columns
в products table
,extras
столбец с длинным текстом в конце products table
хранить все дополнительные / динамические параметры в нем JSON-кодирование или же сериализация.Последний — использовать отдельную мета-таблицу для хранения пары ключ-значение вместе с product_id в этой таблице.
CREATE TABLE product_meta()
id BIGINT AUTO_INCREMENT PRIMARY KEY, // Primary key of this table
product_id INT, // For joining purpose and reference
meta_key VARCHAR(16),
meta_value VARCHAR(64)
);
Итак, для продукта с идентификатором 137 у вас может быть несколько записей:
|------------------------------------------|
| id | product_id | meta_key | meta_value|
|------------------------------------------|
| 3137 | 137 | size | large |
| 3138 | 137 | color | green |
| 3139 | 137 | height | 11.3 |
|------------------------------------------|
В принципе, есть два способа сделать это — вы можете создать серию столбцов «udf» (пользовательское поле) в вашей таблице, например, udf1, udf2 и т. Д., А затем где-нибудь в вашем приложении вы скажете, что «udf1 == color, udf2». == вес «.
Другой способ — создать таблицу productmeta, которая имеет такую структуру:
id BIGINT AUTO_INCREMENT PRIMARY KEY
product_id INT
property VARCHAR(16)
propvalue VARCHAR(64)
Итак, для продукта с идентификатором 137 у вас может быть несколько записей:
|------------------------------------------|
| ID | product_id | property | propvalue |
|------------------------------------------|
| 3137 | 137 | size | large |
| 3138 | 137 | color | green |
| 3139 | 137 | height | 11.3 |
|------------------------------------------|
Недостатком является то, что эти таблицы могут стать действительно большими, очень быстрыми.