MySQL设计用于处理具有自定义字段的产品

Mic*_*ith 4 php mysql

我正在构建一个Web应用程序,其中产品可以是几种不同类型(实际上是家具类型),并且根据这些类型,产品具有与之相关的某些字段.

快速背景:我使用MySQL和PHP与CakePHP作为我的框架.我正在寻找的答案不一定需要像"CakePHP一样"; 我更喜欢一般的MySQL最佳数据库设计答案和formost.

所以,我可以想到两个选择:

  1. 单表选项 - 我有一个products包含所有可能字段的表,只留下未用于该特定产品的字段null.这是我认为最简单的设计,但会采取在整合了一下鞋赫宁的(因为我的模型将需要跟踪型的,哪些字段被实际更新基于对这种类型的.)

  2. 多个产品表选项 - 每个产品都有自己的表,其中包含该特定产品类型的正确字段.有一个主表(products)至少有三个字段id(主键),productType(找到正确的表)和productTypeId(将产品表连接到特定的产品表).

我非常依赖#1,但想得到其他人的想法.

如果您需要更多详细信息,请告诉我们!谢谢!

更新:我只期待一套小型的家具类型(<10开始,最大可能是20).

Pas*_*TIN 5

我认为您的问题的解决方案,至少id,您的产品有许多不同类型的属性,可能是使用Entity-attribute-value模型.

基本上,你可以:

  • 一个简单的Product表,每个产品包含一行,并存储每个产品的数据类型(例如:名称,价格,库存数量)
  • 另一个表格,对于每个产品,存储产品可以拥有的属性 - 每行一个属性,这意味着每个产品有几行.

当然,你还需要某种"参考系统",它定义了:

  • 可能的属性列表
  • 对于每个属性,可能的值列表
  • 对于每种类型的产品,可以与其关联的不同属性.


如果你不想建立那种系统,我会选择像你的第二个解决方案:

  • 我不喜欢第一个解决方案的想法 - 那些NULL字段不是很好
  • 使用多表选项,我会使用:
    • 一个Product表,每个产品包含一行
    • 几个ProductTYPE表
      • 并且,作为类/对象说话,这些ProductTYPE表将继承自Product
      • 这意味着,对于每个产品,您Product在相应的ProductType表中有一行和一行.