在我的场景中,我有一个表tblCity
,它有两列作为外键CompanyRef
和BranchRef
,它们也是唯一的。
我会添加一个唯一的密钥用作主键[ID]
在另一个名为tblCustomer
的表中,我需要使用tblCity
作为外键。
我的问题是我真的需要那个ID列,或者我应该使用两个外键作为主键?在第二种情况下,我必须在CompanyRef, BranchRef, CityRef
中使用三列作为外键(tblCustomer
)或者什么?
这些方法中哪一种适合我的问题?
答案 0 :(得分:1)
所以,只是为了让你的问题清楚一点(我希望我做对了):
CityId INT -- is part of the separate PK option
CompanyRef INT, FK -> tblCompany
BranchRef INT, FK -> tblBranch
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问题),但从开发人员的角度来看,我建议为城市提供单列PK:
城市听起来像一个非常通用的概念。将来可能需要它,因此在引用它的每个其他表中拖动两列意味着每个JOIN将在这两列上。
最终解决方案可能如下所示:
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
CustomerId INT
CityRef INT FK -> tblCity
旁注:匈牙利语符号现在似乎非常沮丧 - 请参阅this非常受欢迎的问题及其答案。
另外,我建议保留相同的列名称。 E.g。
CompanyRef -> CompanyId (or whatever the PK is named)
BranchRef -> BranchId
答案 1 :(得分:0)
你需要创造关系
您需要使用什么类型的关系的基础
主键和外键=一对钱
主键和主键=一对一
外键和外键=多对多