【问题标题】:Is this a good db architecture and if not what can i change about it这是一个好的数据库架构吗?如果不是,我可以改变什么
【发布时间】:2020-09-16 11:55:32
【问题描述】:

我在一个旧帖子中发现了这个,我正在考虑将它用于一个项目,但我不知道我应该改变它还是离开它,这就是我想要改变的:

  • 删除产品选项并将产品ID选项组ID添加到选项
  • 删除订单详情并将其信息放在订单

是我做错了吗?另外,如果您能告诉我一些此类事情的最佳做法,我将不胜感激。

感谢您的宝贵时间。

【问题讨论】:

  • 你好 salah1337,欢迎来到 Stack Overflow。这个问题确实缺乏细节。我们无法回答您的问题,除非您提供更多详细信息,说明您正在尝试实施的内容以及您目前遇到的问题。
  • 您好,感谢您的回答,基本上我不知道表 productoptionsorderdetails 是否真的有目的,是否构建数据库这个以后有什么帮助吗?或者我可以将 optionsproductoptionsorderdetailsdetails 结合起来吗
  • 如果你看到订单和订单明细表是一对多的关系,同样的产品选项表是为了规范化产品和选项之间的多对多关系,这个实体关系图有规范化的表表示,所以最好不要改变它。
  • @AnshulSharma 对于数据库规范化,请使用database-normalization 而不是normalization。 PS 将值替换为其他某种更 id-ish 的值不是规范化。然而,在这里结合 order 和 orderdetails 可以合理地称为非规范化。
  • use text, not images/links, for text--including tables & ERDs。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。无法搜索或剪切和粘贴图像。在图片中包含图例/键和说明。

标签: mysql database database-design many-to-many database-normalization


【解决方案1】:

两个表都存在是有充分理由的。

productoptionsoptionsproducts之间的映射表:这是一个多对多的关系,一个给定的产品可能有多个选项,一个选项可能被多个产品使用。如果删除此表,您最终会将optionName 添加到与同一选项相关的productoptions 中的每一行,这是低效的,并且可能会破坏数据完整性(如何确保给定选项始终同名?)。

至于order_details:这是与orders 的多对一关系。一个订单可能有多个详细信息行,每个都涉及不同的产品。删除此表意味着失去这种可能性。

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2021-09-18
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多