【发布时间】:2016-08-31 04:36:18
【问题描述】:
考虑到订单记录的数量比标签大很多:
-
我已经阅读了一个 SO question's comment,其中插入 order# 68 如图所示不会造成任何麻烦,但如果我想按某些标签查询订单,多对多更合适/方便/高效,否则在一对多的情况下,必须检查每个订单以了解其标签,这是真的吗?
一个。我还记得读过多对多关系在资源上的成本最高并且表现不佳,但还读过声称性能损失可以忽略不计并且不值得处理多对多孤儿记录的风险和开销关系,有什么关系吗?
b.根据其他阅读材料,如果不再存在多对多而是 2 个一对多表,我确信通过制作 2 个具有 FK 联合表的一对多表来建模多对多是否避免了上述多对多的缺点?
- 在我在另一个论坛上发布的类似问题中,有人告诉我我什至无法插入订单# 68,这样做会导致引用完整性问题,这几乎没有意义,这也是真的吗?
我想摆脱我读过的相互矛盾和自相矛盾的帖子。
【问题讨论】:
-
@leo 我为你上传了。
-
只是为了明确一点:只有当你规范化时,你才需要一个连接表来实现多对多关系。在第二个 NF 中,您可以轻松地在数据库中使用大量冗余。关于问题:您可以插入任何不会与您的表约束和引用约束(PK、FK、UNIQUE ...)冲突的记录。一种关系表明存在 FK 约束,这将禁止插入其他带有已存在 tagId 的订单。但是,并非所有数据库都有 FK 约束(尽管它们确实加快了速度,因为 FK 列大多被索引)
-
我建议规范化您的表并设置外键。这是您可以真正确定数据永远不会损坏的唯一方法,它可以为您节省大量编码,因为您不必检查自己的插入、更新或删除是否遵循规则,数据库可以做到。这比你快得多。你的观点 b 是正确的,这就是要走的路。
标签: sql sql-server database entity-framework