将所有关系汇总到一个表SQL Server中

时间:2019-01-06 12:18:09

标签: sql-server database erd

我正在尝试设计企业级数据库体系结构。在ERD级别,我有一个问题。

我的许多表之间都有相互关系。将来可能会有一些发展,我的设计应该灵活并且可以快速收集结果。

最近几天,我创建了一个名为 Node 的父表,并且我所有的功能表都与此表具有一对一的关系。 (功能表是那些保留诸如内容,用户,文件夹,角色等真实数据的人,而不是那些与应用程序生命周期相关的人) 因此,在向每个表添加记录之前,我们必须在 Node 表中添加一个Node,并使用新的NodeId将其添加到辅助表中。

Node 表本身具有“多对多”关系。所以我设计了这张表,以保留我所有的关系担忧。

enter image description here

所有其他实体都类似于 User ,并且与Node表相关,如上所示。

问题是:这种设计是否会使我在 NodeAssoc 表上的关系查询更快,还是最好单独保留关系?

1 个答案:

答案 0 :(得分:0)

您说:

  

将来可能会有一些发展,我的设计应该灵活并且可以快速收集结果。

灵活性和性能是两回事。它们有不同的方法来解决它们或解决它们。设计数据库时,必须考虑数据库原理。要记住,规范化非常重要。一对一和多对多的关系在设计上并不常见。在您的情况下,您提到的是一对一关系和多对多关系,对此我感到担心。

  • 建议一->将一对一表归一化(合并)到一个表。 这减少了连接的数量。
  • 建议二->在多对多表上引入一个桥接表, 因为可能有多个匹配项。修复多个匹配项意味着 复杂的查询,导致性能下降。
  • 建议三->使用适当的索引以提高性能

可以通过使用数据库视图(查询)来提高灵活性。数据库的结构将来可能会改变,而修改视图的速度也可能非常快。