首页 文章

在mysql中保存单个表或多个表中的不同属性类型

提问于
浏览
-1

我们计划用PHP构建一个电子商务网站 .

有不同类型的产品,如 mobiles, tshirts, watches, books.

  • Mobile拥有类似 "ram , model_name, os" 的属性,

  • T恤有 "color, size" 等属性

问题如下:

  • 将所有属性保存在名为 Products 的单个表中是否更好(即使会有/它会创建大量“ NULL" 值”)?

  • 在不同的表格中保存不同类型的产品,例如 mobiletshirts 等...

在第二种情况下,将创建更多的表(参见下面的2张图片) .

enter image description here

要么

enter image description here

Update

正如答案和评论中所建议的,我正在使用EAV模型并绘制以下设计,如果您发现任何错误,请通知我....

enter image description here

2 回答

  • 1

    您描述的问题非常常见 - 通常称为"storing polymorphic data in a relational schema" . 它发生在Stack Overflow quite regularly上 .

    你问“什么更好” - 这当然取决于你打算使用数据的方式 .

    如果您事先不知道将要存储哪些属性 - 例如,如果您的电子商务网站将来可能会推出更多产品类型 - 纯粹的关系模型不太可能有效,因为您必须制作每次引入新类型的产品时,架构都会更改 .

    如果您事先不知道需要支持哪种查询,那么关系模型可能也是一个问题 . 例如,如果您有一个过滤机制,允许用户从品牌“xyz”中搜索蓝色,尺寸较小的T恤,您可能需要动态创建SQL查询 . 这不是特别容易 .

    EAV模型绕过了第一个问题,但不是第二个问题 . 实际上,即使对EAV数据模型进行简单查询也很难 .

    我会考虑一种解决方案,其中将"known upfront"属性存储在SQL表(SKU,price,is_sellable,description等)中,以及关系(供应商,类别,仓库等) . 另一个可变数据可以存在于数据库中的JSON documents中 . 我会特别注意MySQL full text search indexing - 您可以使用它来代替"pure" SQL来运行许多常见查询 .

  • 1

    创建产品表,

    创建表属性

    领域:

    Id    
    Name    
    ...
    

    创建表类别

    领域:

    Id     
    Name    
    ...
    

    创建表category_product和category_property ...

    创建表property_product_value

    领域:

    Id     
    Property_id
    product_id    
    Value    
    ...
    

    如果你有更多问题,请通过手机写信告诉我 .

相关问题