关于外键、SQL的澄清

关于外键、SQL的澄清,sql,database-design,foreign-keys,Sql,Database Design,Foreign Keys,如果我使关系A中的一个属性引用另一个关系B的外键,那么A中的属性是否必须是A的主键(或A的主键的一部分) 另外,我的理解是,为了引用属性,引用的属性必须是键或唯一的。那么,我说得对吗?我们不能引用主键的一部分(即,如果主键有两个属性,我们需要同时引用它们或两者都不引用,因为它们本身都不能保证是唯一的)?外键必须引用某种类型的唯一键,无论它是否是主键。不能仅引用复合唯一键的一部分,除非它本身是唯一键 引用字段可以是唯一的键(使关系成为1:0..1关系,但不一定是一个关系)。是的,您的理解是正确的。

如果我使关系A中的一个属性引用另一个关系B的外键,那么A中的属性是否必须是A的主键(或A的主键的一部分)


另外,我的理解是,为了引用属性,引用的属性必须是键或唯一的。那么,我说得对吗?我们不能引用主键的一部分(即,如果主键有两个属性,我们需要同时引用它们或两者都不引用,因为它们本身都不能保证是唯一的)?

外键必须引用某种类型的唯一键,无论它是否是主键。不能仅引用复合唯一键的一部分,除非它本身是唯一键


引用字段可以是唯一的键(使关系成为1:0..1关系,但不一定是一个关系)。

是的,您的理解是正确的。假设您存储了关于狗在狗疗室清洗的信息,并且您有两个表(tbl_dog,tbl_DogsWashed)

tbl_Dog具有列(DogId、DogsName、Fred、OwnersIdentityNumber)

tbl_DogsWashed具有列(DogsWashedId、DogsName)

如果您使用狗的名称将两个表链接在一起,您将面临两条同名的不同狗洗过澡的风险

相反,tbl_Dog会有列(DogsWashedId、DogId),您可以使用DogsName、Breed、OwnersIdentityNumber等查找DogId,并使用tbl_Dog的主键填充tbl_DogsWashed表