我已经开始为地板产品创建一个数据库,我在这里提问,因为我没有找到一个模式设计/模板,允许产品具有“属性”,如颜色、材料、尺寸、价格类型,如每米等,在我最初的设计中,我为上面的每个属性创建了数据库表,我知道这不是最好的方法,甚至不是正确的方法。
有没有一种不用很多table就能实现的方法?我怀疑它可以用一个或两个表来完成,但我无法思考它们之间的关系,因此我的设计或模板搜索失败。
巴里
我已经开始为地板产品创建一个数据库,我在这里提问,因为我没有找到一个模式设计/模板,允许产品具有“属性”,如颜色、材料、尺寸、价格类型,如每米等,在我最初的设计中,我为上面的每个属性创建了数据库表,我知道这不是最好的方法,甚至不是正确的方法。
有没有一种不用很多table就能实现的方法?我怀疑它可以用一个或两个表来完成,但我无法思考它们之间的关系,因此我的设计或模板搜索失败。
巴里
2条答案
按热度按时间cxfofazt1#
最简单的方法是将属性保存在
products
table。如果一个特定的产品没有属性,那么这个值就是NULL
.有时这种方法是不够的,通常有以下两个原因之一:
有很多属性,它们分为不同的组。
您需要根据需要添加新属性。
在这种情况下,您基本上有两种选择:
将属性存储在实体属性值表(eav)中。这基本上有三列:产品、属性名和值。这样做既方便又灵活,但缺点是“value”列在sql表中只有一种类型。
使用“灵活”的存储机制(如json或xml)存储属性。
我有时会使用混合方法,其中我有一个
products
包含主要属性的表。然后有一个json列用于更灵活/特定的属性。v7pvogib2#
因为你会有不同数量的属性,我会为产品做一个表,另一个表为多对一关系的属性(一个产品有很多属性)。