Как хранить свойства товара в mysql?

Сейчас я планирую структуру базы продуктов. Возник вопрос вариантов хранения / параметров товара.
Например, если бы это был размер товара — было бы достаточно создать три поля шириной / высотой / глубиной, но что делать, если десятки параметров?
Предполагается, что список параметров может быть изменен, и я вижу об этой структуре:
1 — ширина
2 — высота

11 — цвет

но я не могу связать это как товар — можно сделать поле с типом json

{1: «20», 2 «30», …, 11: «белый»}
а потом лечится на выборке товара, но я не знаю, как тогда сделать параметры фильтра

кто может посоветовать правильный путь?

0

Решение

Этого можно добиться тремя способами

  1. Добавление всего separate columns в products table,
  2. Добавление extras столбец с длинным текстом в конце products table хранить все дополнительные / динамические параметры в нем JSON-кодирование или же сериализация.
  3. Последний — использовать отдельную мета-таблицу для хранения пары ключ-значение вместе с 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      |
|------------------------------------------|
1

Другие решения

В принципе, есть два способа сделать это — вы можете создать серию столбцов «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      |
|------------------------------------------|

Недостатком является то, что эти таблицы могут стать действительно большими, очень быстрыми.

1

По вопросам рекламы [email protected]