这是我的部分数据库的图形表示。 BrandNo
是Suppliar
表中的主键,在其他表中用作外键。
在LotDetails
表中我需要BrandName作为外键。这听起来很荒谬,因为我可以做到
将用作外键。
我知道我可以使用BrandNo作为外键并显示BrandName,但是为了知识(并且是EASE ofcourse)我想知道
是否可以在不同的表中分别使用表的两个属性作为外键?
EDITTED
BrandNo只是一个序列号,品牌名称可以是任何品牌的名称。 如图所示,4个表中需要BrandNo,而只有一个表需要BrandName。 谢谢!
答案 0 :(得分:3)
是的! FK不需要引用PK,你甚至不需要引用索引列,但为了关系完整性(和健全性),你必须引用一个唯一值列(这就是为什么我们“喜欢”引用PK或至少一个唯一的非聚集索引列。)
这听起来有点奇怪,但您可以构建一个关系表AB,其中包含IdA,IdB和tableA以及引用tableAB各列的tableB。
顺便说一句:一张桌子不需要拥有PK但不能存在两个PK。一般来说,这个表是按PK物理排序的。答案 1 :(得分:2)
是的,这很有可能。假设BrandName本身就是候选键,那么原则上你可以像BrandNo一样引用它。在这种情况下,BrandName和BrandNo不会是复合键,它们都是单独的候选键。
按照惯例,为了简单和易于使用,通常每个表只选择一个密钥用于外键引用。通常(并非总是)指定为“主要”密钥的密钥,但如果您找到合理的理由,则不一定如此。
答案 2 :(得分:0)
创建外键引用时,引用表中的键应为主键。有一个“部分”引用是没有意义的。
相反,您应该有一个Brands
表,其中包含一个主键(可能是BrandId
,也许是BrandName
- 我更喜欢前者。然后需要有关品牌信息的表格可以直接参考此表格。