此数据库是否已标准化

时间:2012-10-02 01:51:46

标签: mysql database database-design database-schema

我正在尝试构建一个规范化的强大数据库,并在需要时有扩展空间。这看起来像我可能有问题吗?这会更有效吗?最重要的是,这个数据库是否可以最佳规范化?谢谢你看看!

enter image description here

编辑我

我会尝试解释我的多对多关系。

属性:这个网站计划携带枪支,弹药,配件等......每个产品可以有许多属性,有些可以有一个属性。例如,边缘火焰,手枪和中心火焰的弹药将具有相同的属性,而霰弹枪具有不同的属性。所以我的想法是,为了使属性变得灵活,我需要像我在我的例子中那样设置表格。希望这是有道理的 - 我确实很挣扎。

供应商:产品可以有多个供应商。

图像 - 产品将包含主图片和未知数量的其他图像。

类别:产品可能出现在多个类别中。例如,枪支可能出现在半自动步枪以及战术枪械中。

评论:单个产品将有多个评论。

请取消产品表中的“新字段”字段。这是无人看管的,我忘了在屏幕截图之前删除它们。

编辑II

我使用每个人的建议重新设计了架构。请看看我是否越来越近了。我非常感谢大家的时间;)

enter image description here

2 个答案:

答案 0 :(得分:2)

为什么Products表中有两个“new field”?当产品表中的review_id和attribute_id看起来是通过联结表链接时,为什么这样?

单个图片真的显示多个产品吗?如果没有,您不需要或不需要product_images,只需将product_id放入images表即可。同样的问题与评论;单个评论涵盖多个产品吗?如果没有,请删除联结表。

产品真的既有供应商又有制造商?每个制造商只提供一种产品是真的吗?

您对为属性设置的键值机制背后的想法是什么?

您是否有任何特殊原因决定在类别和属性等表格中使用其他ID列而不是使用自然键?

答案 1 :(得分:1)

为什么productattributes之间需要多对多关系?属性是否也属于多个产品?如果没有,请删除product_attributes表。在表attribute_id上创建一个名为product的列,并将其引用到列attributes上的表attribute_id

我还认为productimages表之间的关系只是一对多。删除表images并在表product_images中创建一个名为image_path的新列。也可以使用productreviews执行此操作。

我在您的架构中发现了许多多对多的关系。

永远记住,加入表格对于应用程序级别来说非常昂贵。