将主键添加到查找 table

Adding a primary key to a lookup table

我们在工作中为所有 SQL table 使用 GUID,我被要求在 2 个现有 table 之间创建查找 table因为 table 之间存在多对多关系。假设原始 table 是帐户和帐户所有者。帐户可以有多个所有者,AccountOwners 可以拥有多个帐户。

所以我将查找 table 创建为:

AccountOwnerAccount:

AccountId , GUID, (not null)
AccountOwnerId, GUID, (not null)

几天后,我被要求为此 table 添加一个主键字段。这似乎完全多余,因为 AccountIdAccountOwnerId 的组合将始终是唯一的。

新的 table 看起来像这样:

AccountOwnerAccount:

Id, GUID, (not null) 
AccountId , GUID, (not null) 
AccountOwnerId, GUID, (not null)

我能看到的唯一合乎逻辑的原因是,这样做可以让这个 table 出现在我们的 Entity Framework .EDMX 中。没有它,EDMX 已经确切地知道如何使用查找 table,但不允许您获取 AccountOwnerAccount 实体。对我来说,这就是应该的方式。

我想知道其他人是否认为按要求添加新的主键字段是好主意还是坏主意,或者我是否应该要求我们停止这种做法?我不是要求人们站在我这边,我只是想知道这里的最佳实践。

提前致谢。

在纯粹的 SQL 术语中,连接键是完美的。

但是正如您提到的,对于 PK 还有其他非 SQL 考虑因素。我 运行 遇到了各种软件的问题,您可以使用它们来构建用于数据库部署的自动化脚本。我 运行 遇到的主要问题是,如果根本没有定义 PK(visual studio 数据库项目模式比较工具将忽略任何没有 PK 的表,甚至不会告诉你),但我已经看到连接的键会导致脚本问题或被完全跳过。如果您手动编写数据库推出脚本或足够了解您的发布工具以纠正不需要的行为,那么这是一个有实际意义的问题。