SQL Server 从另一个外键或唯一键中选择外键



在我的场景中,我有一个表tblCity,其中有两列作为外键CompanyRefBranchRef,它们在一起也是唯一的。

我会添加一个唯一键用作主键 [ID]

在另一个名为tblCustomer的表中,我需要使用 tblCity 作为外键。

我的问题是我真的需要该 ID 列还是应该使用两个外键作为主键?在第二种情况下,我必须在tblCustomer中使用三列作为外键(CompanyRef, BranchRef, CityRef)还是什么?

这些方法中哪一种适合我的问题?

所以,只是为了在你的问题中把事情说清楚一点(我希望我做对了):

tblCity

CityId INT                           -- is part of the separate PK option
CompanyRef INT, FK -> tblCompany
BranchRef INT, FK -> tblBranch

tbl客户

CustomerId INT                      -- not interesting here
CityRef INT FK -> tblCity           -- is part of the separate PK option
CompanyRef INT                      -- part of the alternative
BranchRef INT                       -- part of the alternative

我无法判断哪一个在性能方面最好(这更像是一个 DBA 问题),但从开发人员的角度来看,我建议为 City 设置单列 PK:

城市听起来像是一个很通用的概念。将来可能需要它,因此在引用它的彼此表中拖动两列意味着每个 JOIN 都将位于这两列上。

最终的解决方案可能如下所示:

tblCity

CityId INT PRIMARY KEY IDENTITY(1, 1),     
CompanyRef INT, FK -> tblCompany
BranchRef INT, FK -> tblBranch
UNIQUE (CompanyRef, BranchRef)      -- acts as a constraint, but also an index

tbl客户

CustomerId INT                      
CityRef INT FK -> tblCity  

旁注:如今,匈牙利语符号似乎很不鼓励 - 请参阅这个非常流行的问题及其答案。

另外,我建议为同一件事保留相同的列名。 例如

CompanyRef -> CompanyId (or whatever the PK is named)
BranchRef -> BranchId

你需要建立关系

您需要使用哪种类型的关系的基础

主键和外键 = 一到钱

主键

和主键 = 一对一

外键

和外键 = 多对多

相关内容

  • 没有找到相关文章

最新更新