我们正在为工作中的所有SQL表使用GUID,并且由于表之间的多对多关系,我被要求在2个现有表之间创建查找表。假设原始表是Account和AccountOwner。帐户可以拥有多个所有者,而AccountOwners可以拥有多个帐户。
所以我创建了查找表:
AccountOwnerAccount :
AccountId , GUID, (not null)
AccountOwnerId, GUID, (not null)
几天后,我被要求在此表中添加主键字段。这似乎完全是多余的,因为AccountId
和AccountOwnerId
的组合始终是唯一的。
新表格如下所示:
AccountOwnerAccount :
Id, GUID, (not null)
AccountId , GUID, (not null)
AccountOwnerId, GUID, (not null)
我能看到的唯一合乎逻辑的原因是,这将允许此表通过执行此操作显示在我们的实体框架.EDMX
中。没有它,EDMX已经确切地知道如何使用查找表,但是不允许你获得AccountOwnerAccount
个实体。对我而言应该是这样的。
我想知道其他人是否认为在我被要求时添加新的主要关键字段是好的还是坏的想法,或者我是否应该要求我们停止这种做法?我不是要求人们站在我这一边,我只是想知道这里的最佳做法。
提前谢谢。
答案 0 :(得分:0)
在纯SQL术语中,连接键是完美的。
但是你提到的PK还有其他非SQL考虑因素。我遇到了各种软件的问题,您可以使用它们来构建用于数据库部署的自动脚本。我遇到的主要问题是如果根本没有定义PK(visual studio数据库项目模式比较工具将忽略没有PK的任何表,甚至没有告诉你),但我看到连接键导致脚本问题或获得完全跳过。如果您手动编写数据库转出脚本或充分了解发布工具以纠正不需要的行为,这是一个没有实际意义的点。