我正在尝试构建一个规范化的强大数据库,并在需要时有扩展空间。这看起来像我可能有问题吗?这会更有效吗?最重要的是,这个数据库是否可以最佳规范化?谢谢你看看!
编辑我
我会尝试解释我的多对多关系。
属性:这个网站计划携带枪支,弹药,配件等......每个产品可以有许多属性,有些可以有一个属性。例如,边缘火焰,手枪和中心火焰的弹药将具有相同的属性,而霰弹枪具有不同的属性。所以我的想法是,为了使属性变得灵活,我需要像我在我的例子中那样设置表格。希望这是有道理的 - 我确实很挣扎。
供应商:产品可以有多个供应商。
图像 - 产品将包含主图片和未知数量的其他图像。
类别:产品可能出现在多个类别中。例如,枪支可能出现在半自动步枪以及战术枪械中。
评论:单个产品将有多个评论。
请取消产品表中的“新字段”字段。这是无人看管的,我忘了在屏幕截图之前删除它们。
编辑II
我使用每个人的建议重新设计了架构。请看看我是否越来越近了。我非常感谢大家的时间;)
答案 0 :(得分:2)
为什么Products表中有两个“new field”?当产品表中的review_id和attribute_id看起来是通过联结表链接时,为什么这样?
单个图片真的显示多个产品吗?如果没有,您不需要或不需要product_images,只需将product_id放入images表即可。同样的问题与评论;单个评论涵盖多个产品吗?如果没有,请删除联结表。
产品真的既有供应商又有制造商?每个制造商只提供一种产品是真的吗?
您对为属性设置的键值机制背后的想法是什么?
您是否有任何特殊原因决定在类别和属性等表格中使用其他ID列而不是使用自然键?
答案 1 :(得分:1)
为什么product
和attributes
之间需要多对多关系?属性是否也属于多个产品?如果没有,请删除product_attributes
表。在表attribute_id
上创建一个名为product
的列,并将其引用到列attributes
上的表attribute_id
。
我还认为product
和images
表之间的关系只是一对多。删除表images
并在表product_images
中创建一个名为image_path
的新列。也可以使用product
和reviews
执行此操作。
我在您的架构中发现了许多多对多的关系。
永远记住,加入表格对于应用程序级别来说非常昂贵。