如何在mysql中使用动态字段类型?

时间:2015-03-18 11:33:51

标签: php mysql

我想设计一个小型的在线商店。该网站应该有关于产品的每一个细节。由于我是初学者,我坚持设计良好的数据库设计。 有许多不同的产品:手机,笔记本电脑,炉子,袋子等。这些产品中的每一个都需要不同的细节。我不会为每个设计许多不同的表,所以一个表(产品)将拥有所有产品。 但我如何管理细节?我无法在谷歌找到好主题,所以我开始自己的糟糕设计。这是我的草稿设计:opps无法发布图片

  • 产品商店名称。
  • Product_category定义产品类型,例如:mobile或book。每个产品属于一个产品类别
  • Product_category_detail存储产品属性,如颜色,怀特, 电池寿命等每个product_category_details属于一个 产品分类。
  • Product_detail保持3小时的细节值 电池寿命,或400克怀特。每一个都是一个人 产品类别细节和产品。

我可以将所有细节存储在Var-char中。 好吗?任何建议! 拥有细节类型会更好。像varchar for color和int for wight。 我在考虑名为attr_type的product_catefory_datail中的另一个字段,所以我可以在php中更改转换。 任何的想法? TNX

4 个答案:

答案 0 :(得分:1)

我建议您仅使用product表来保留有关产品的一般信息,而不是使用product_attributes表:

ID (INT|Unique) | product_id (INT) | name (VARCHAR) | value (VARCHAR) | type (INT: predefined constant values)

答案 1 :(得分:0)

这是您需要Entity Attribute Value(EAV)模型的地方。如果您需要不同的数据类型,则需要其他列来指定数据类型和每种数据类型:例如,指定为'string'的类型,因此选择string_value列,'number'选择numeric_value列。这意味着CASE各州的政治家。使整个事情变得可怕。

答案 2 :(得分:0)

在线商店非常复杂,并不是真正的初学者任务。它不可扩展,因为你不知道你需要多少变化,你最终会添加新的表和列,直到它变得太复杂。商店通常有一个EAV模型; http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model

答案 3 :(得分:-1)

我在做项目时遇到了类似的问题,并开发了解决我问题的表格。希望这对你也有帮助。

product_table

pt_id,name,category

product_category_table

pct_id,name,desc    

detail_fields

pf_id,field_name

product_detail_fields

pdf_id,pt_id,pf_id,default_value        

product_detail_fields_values

pdfv_id,pdf_id,value,user_id  //here pdf_id is fk of product_detail_fields

如果您有多个用户,请使用user_id,否则请忽略它。