违反一对多关系的后果是什么?什么时候使用多对多?

时间:2016-08-31 04:36:18

标签: sql sql-server database entity-framework

考虑到订单记录的数量比标签大很多:

enter image description here

  1. 我已经阅读了SO问题的评论,如图所示插入#68的订单不会造成任何麻烦,但如果我想通过某些标签查询订单,那么多对多就更合适/方便/高效,因为否则在一对多的每一个订单中都必须检查它的标签是什么,这是真的吗?

    • 一个。我还记得曾经读过,多对多的关系在资源上花费最多而且表现不佳但还读取了声称性能损失可以忽略不计并且不值得处理多对多孤儿记录的风险和开销关系,任何评论?

    • 湾基于其他读数,我确信通过制作2个一对多表格和FK联合表来模拟多对多,如果不再有多对多但只有2个一对多表格上述多对多避免的缺点是什么?

  2. 在一个类似的问题中我发布了另一个论坛,我被​​告知我甚至无法插入#68的订单,这样做会引起参考完整性问题,这几乎没有意义,这也是真的吗? / LI>

    我想摆脱我读过的冲突和自相矛盾的帖子。

2 个答案:

答案 0 :(得分:0)

世界是一个复杂的地方,你的问题假设所有问题都有一个答案。事实上,对于你提出的问题,答案是一对一的。

  1. 您描述的插件可能导致问题,或者无法导致问题。这取决于您是否向数据库添加了规则以强制实施参照完整性。有些人喜欢做这样的事 - 我没有。我有一个数据模型,表明关系是1对多,我假设人们会遵循它,因为如果他们没有,它会破坏。使数据库强制执行此规则只会减慢速度。在我看来,最好每年打破一次,追查问题,用湿面条鞭打新程序员继续前进。
  2. 至于其余的1.这只取决于你正在使用的数据有什么意义 - 在一般情况下谁可以说。

    1. 请参阅1.是的,可以让数据库阻止您插入,但我不建议以这种方式设置数据库。除非订单#是一个定义为唯一的索引 - 在这种情况下,它会在尝试重复插入时出错。

答案 1 :(得分:0)

根据你的图像,我会说你在tblTAG和tblOrder之间有一对多的关系。 我没有在这张图片中看到多对多的关系,添加记录根本不会产生任何问题。

tblTAG.TagID 1可以在tblORDER中多次存在,没有问题。 还有像

这样的查询
select * from tblORDER where TagID = 1

执行速度非常快,因为tblORDER中的外键会创建一个索引。

那么为什么这里确实需要多对多的关系?