我正在尝试创建一个电子商务网站,一种基本的阿里巴巴。最终目标是创建n类彼此不严格相关的产品(即鞋子和酒)。
我的主要问题是找出一种处理与产品表相关的类别表/实体的方法。
product表将具有通用属性,而productCatagoryEntity中的属性将特定于Category。
如何创建足够灵活的ERD来应对这一目标?
我考虑创建product_TO_productCategoryEntity表来链接product表和productCategoryEntity表,当产品链接到类别时,与Category表相关的product_TO_productCategoryEntity外键属性将具有非null值,而对于类别与产品无关的FK将为空。
显然,在product_TO_productCategoryEntity表中,我应该列出所有n个类别表,这个模型可能会导致难以维护。
我正朝着正确的方向前进?
请提供我最终可以学习的任何主题,模式,书籍或参考资料。
@Dan Bracuk的回答,我根据他的建议加入了ERD:
答案 0 :(得分:1)
您提出的设计存在严重缺陷。每次添加新类别时,都必须重新设计数据库。通过简单地添加记录来实现这一点会更好。我建议这个设计。
表产品将具有ProductID,名称,而不是其他。
表类别将具有CategoryID,名称,而不是其他。
表属性将具有AttributeID,Type和value。例如,类型为颜色,值为蓝色。
然后你需要表来建立多对多的关系。一个是产品和类别之间,另一个是产品和属性之间。
要真正规范化此设计,您可以为AttributeTypes创建一个单独的表,并在Attribute表中使用外键引用。
编辑从这里开始
上面的模式会导致属性表包含如下记录:
1|colour|blue
2|colour|red
3|size|small
4|size|medium
由于重复的字符串颜色和大小,这没有规范化。要对此进行规范化,您将拥有一个AttributeType表,其中包含AttributeTypeId字段,Type Records将如下所示:
1|colour
2|size
您的属性记录将成为:
1|1|blue
2|1|red
3|1|small
4|1|medium
我实际上是这样做的。我只是在原来的答案上懒得。