如何在mysql中存储商品的属性?

时间:2015-11-28 19:50:18

标签: php mysql database database-design entity-attribute-value

现在我正在规划数据库产品的结构。存在存储选项/商品参数的问题。 例如,如果它是商品的大小 - 就足以在宽度/高度/深度上创建三个字段,但是如果有几十个参数呢? 假设参数列表可以更改,我看到这个结构:     1 - 宽度     2 - 身高     ...     11 - 颜色

但我不能像商品一样把它绑起来 - 可以用json类型

创建字段

{1:" 20",2" 30",...,11:" white"} 然后在商品样品处理,但我不知道如何过滤参数

谁可以在正确的道路上提出建议?

2 个答案:

答案 0 :(得分:1)

基本上有两种方法 - 你可以创建一系列" udf"您的表中的(用户定义的字段)列,如udf1,udf2等 - 然后在您的应用中的其他位置,您说" udf1 == color,udf2 == weight"。

另一种方法是创建一个productmeta表,其结构如下:

id BIGINT AUTO_INCREMENT PRIMARY KEY
product_id INT
property VARCHAR(16)
propvalue VARCHAR(64)

那么对于产品ID 137,您可能有几条记录:

|------------------------------------------|
| ID   | product_id | property | propvalue |
|------------------------------------------|
| 3137 | 137        | size     | large     |
| 3138 | 137        | color    | green     |
| 3139 | 137        | height   | 11.3      |
|------------------------------------------|

缺点是这些表格可以变得非常大,非常快。

答案 1 :(得分:1)

这件事可以用三种方法实现

  1. separate columns
  2. 中添加所有products table
  3. extras末尾添加带有longtext类型的products table列,以通过 json-encoding 序列化
  4. 最后一个是使用一个单独的元表来存储该表中的key,value对以及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)
    );
    
  5. 那么对于产品ID 137,您可能有几条记录:

    |------------------------------------------|
    | id   | product_id | meta_key | meta_value|
    |------------------------------------------|
    | 3137 | 137        | size     | large     |
    | 3138 | 137        | color    | green     |
    | 3139 | 137        | height   | 11.3      |
    |------------------------------------------|