我正在尝试为产品属性(尺寸、重量、清洁方法等)及其变体(颜色、尺寸等)设计一个数据库
Posted
技术标签:
【中文标题】我正在尝试为产品属性(尺寸、重量、清洁方法等)及其变体(颜色、尺寸等)设计一个数据库【英文标题】:I'm trying to design a database for products attributes (dimensions, weight, method of cleaning, etc..) and their variants (colors, sizes, etc..) 【发布时间】:2022-01-21 06:09:26 【问题描述】:我是初学者,这是我的第一个真正的项目。 下图显示了我一直试图达到的目标。但它变得如此复杂,如此之快,令人困惑。所以我问是否有不同的方法来设计表格更容易记住几个键:
属性不会重复。
颜色、尺寸、材料表具有不同的结构,例如(颜色 有 name_ar、name_en 和颜色图像的路径)。
一开始我没有使用 SKU,但现在我想我可能需要 他们分开。
不同的颜色可能有不同的尺寸等等
This is what I have reached so far
#Edit-1: 我试图考虑另一种设计方式,但它比以前增长得更多,多了一张桌子 。 但在那之后,我想不出另一种方法来达到我想要的结果。
提前谢谢大家的回答
【问题讨论】:
在我看来,你已经实现了“过度标准化”。您会发现该模式的编程非常繁琐且性能缓慢。阅读有关 EAV 的其他问答,以找到有关如何改进架构的部分解决方案。 【参考方案1】:看起来你正在尝试在这里做 EAV 架构,但并不真正理解它的重点\问题。
EAV 架构的重点是垂直与水平构建数据库。看起来您只是在创建一堆旋转属性,而不是实际上的 EAV 设计。这在实践中的意思是,而不是:
Table: Shirts
Columns: ID, Label, Size, Color, Weave, Fabric, Made in, Class, Discount blah blah blah
你想要的:
Entity:
ID:1, [Label:'Cool Shirt', Price: 19.00, Other required properties]
然后是你的属性表
attribute:
entity: 1
attribute:type
value: shirt
attribute:
entity: 1
attribute:color
value: red
attribute:
entity: 1
attribute:size
value: large
这种架构风格的要点是,并非所有实体都需要所有属性,而且您不想制作一个包含实体可能拥有的所有潜在属性的超长表格。
您可以进一步深入透视表,这看起来就像您在此处尝试使用透视 ID \ 命名所做的那样:
attribute_values:
entity: 1
attribute:3
value: 5
Table attribute_map:
id: 3
value:"color"
Table property_map:
id:5
attribute:3
value:"red"
不管几件大事。
父级应该是子表本身的属性,即“实体”部分。不需要另一个表映射关系。还可以更轻松地运行递归调用以获得您想要的最终答案)
价格之类的东西(通常)不适合这个模型,也应该作为顶层实体的列进行分配。在决定如何构建***实体时请记住这一点。
确保将复合索引添加到所有枢轴。
编辑你想做的事情:
所以请记住,每个实体都只是属性的集合。
Enitity 3: Shirt, White, XL
Enitity 4: Shirt, White, X
Shirt-White-X is the "SKU" as far as your database is concerned in EAV.
你只是递归地向下遍历所有树,直到所有属性\子属性都被完全表达。
请记住,“实体”只是属性的合并,在这种情况下,您还希望将其作为唯一键(基本上是 SKU)进行操作。奖励您可以使用唯一索引来强制执行它。
根据(确切地说)您所说的,您只是想计算库存,这可以通过几种方式完成。一般来说,你只需要再做一层(我猜我不知道你到底想做什么)。
Table: Inventory
Id (store): 1
Attribute (product_id): 4
Value (inventory): 7
您可以创建像商店这样的更高层实体,并实际创建分配给商店的产品对象。真的取决于你的系统是如何建模的,以及你想去兔子洞多远。
这有点抽象\你实际在做什么\你的整体架构是如何工作的。
成为 EAV 纯粹主义者很少有用。将附加到每个产品实体的价格等属性通常更容易直接添加到***实体。你不是想在这里重新构建 magento,纯 EAV 架构有一些主要缺点,因为它变得更加复杂。它可以非常灵活。它还可以创建效率极低的系统,具体取决于它的构建方式(你好医疗行业)。
【讨论】:
感谢您的回答@mason-stedman。您的回答是我试图实现的目标之一。还有另一部分是属性大小还取决于产品的颜色和材料。我想说的是,我还希望根据颜色改变尺寸,例如(白色 T 恤只有小号、中号和大号)等等。请原谅我不擅长解释东西 编辑以说明这一点 非常感谢您的解释。欣赏它以上是关于我正在尝试为产品属性(尺寸、重量、清洁方法等)及其变体(颜色、尺寸等)设计一个数据库的主要内容,如果未能解决你的问题,请参考以下文章