具有多个属性而不是大量数据库表的sql产品数据库

lztngnrs  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(288)

我已经开始为地板产品创建一个数据库,我在这里提问,因为我没有找到一个模式设计/模板,允许产品具有“属性”,如颜色、材料、尺寸、价格类型,如每米等,在我最初的设计中,我为上面的每个属性创建了数据库表,我知道这不是最好的方法,甚至不是正确的方法。
有没有一种不用很多table就能实现的方法?我怀疑它可以用一个或两个表来完成,但我无法思考它们之间的关系,因此我的设计或模板搜索失败。
巴里

cxfofazt

cxfofazt1#

最简单的方法是将属性保存在 products table。如果一个特定的产品没有属性,那么这个值就是 NULL .
有时这种方法是不够的,通常有以下两个原因之一:
有很多属性,它们分为不同的组。
您需要根据需要添加新属性。
在这种情况下,您基本上有两种选择:
将属性存储在实体属性值表(eav)中。这基本上有三列:产品、属性名和值。这样做既方便又灵活,但缺点是“value”列在sql表中只有一种类型。
使用“灵活”的存储机制(如json或xml)存储属性。
我有时会使用混合方法,其中我有一个 products 包含主要属性的表。然后有一个json列用于更灵活/特定的属性。

v7pvogib

v7pvogib2#

因为你会有不同数量的属性,我会为产品做一个表,另一个表为多对一关系的属性(一个产品有很多属性)。

ProductId,
ProductName,
ProductDescription,
etc
AttributeId,
ProductId,
AttributeName,
AttributeValue,
etc

相关问题