【问题标题】:Make identity field as primary key or composite key of four columns [closed]将标识字段作为四列的主键或复合键[关闭]
【发布时间】:2017-08-17 13:48:24
【问题描述】:

我正在设计一个新系统的数据库,其中我们有大约 5 个主表,即 ClientDwg、DwgMaster、ChildDwg、DwgMaterial、DwgComponent。所有这些表都有相同的 4 个键(在某种程度上也是主键),它们是 DwgNo、DwgType、DwgPart、DwgVersion。

现在我的问题是,我应该在每个表中都有上述四列的复合主键,还是应该有一个身份字段(id)作为主键?两者的起起落落会是什么?我真正担心的是,如果我创建了上述复合主键,那么在我的应用程序和数据库中,我将不得不在任何地方引用所有四个字段(进行连接、获取/更新数据等)。

编辑:我们基本上是从头开始为使用复合密钥思想的现有遗留应用程序编写新应用程序(应用程序是 vb6 和 oracle db)。在那种环境下实在是太让人头疼了。现在我们正在用 ASP.Net MVC 5 和 SQL Server 2016 重新编写应用程序。

【问题讨论】:

  • 试过了吗?

标签: asp.net sql-server asp.net-mvc sql-server-2016


【解决方案1】:

我(几乎)总是会投票给单个代理键 - 如果您需要将该表加入其他表,那就简单多了。

如果您有复合键,则引用您的表的所有表必须具有所有这些列才能建立 FK 连接。并且每次编写 JOIN 查询时,都必须指定所有这些列

如果您的复合索引中有两个以上的列,这会真的很累并且很快就会很烦人......

【讨论】:

  • 阿门,我非常同意 - 代理键是要走的路!
  • 完全。组合键的唯一合理使用几乎是在连接表中,其中您的键是两个外键的组合。除此之外,像瘟疫一样避开它们。
猜你喜欢
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
相关资源
最近更新 更多