无法理解识别关系的主要观点:
标识关系是指子表中存在的行取决于父表中的行。这可能会令人困惑,因为现在通常的做法是为子表创建伪代码,但不要将外键设置为子代主键的父部分。在形式上,这样做的“正确”方法是使外键成为孩子主键的一部分。但逻辑关系是没有父母就不能存在孩子。
示例:一个人有一个或多个电话号码。如果他们只有一个电话号码,我们可以简单地将其存储在Person列中。由于我们想要支持多个电话号码,我们制作第二个表PhoneNumbers,其主键包括引用Person表的person_id。
但是,如果person_id是主键,那么例如Person可以有多个电话号码?或者,person_id必须是复杂主键的一部分,并且不能单独识别表中的项目?
答案 0 :(得分:2)
或者person_id必须是复杂主键的一部分[...]?
完全。在您引用的示例中,PhoneNumbers
的主键可能类似于(person_id, number)
。这意味着没有两个记录PhoneNumbers
可以具有相同的person_id
和 number
;它们可以具有相同的person_id
,并且它们可以具有相同的number
,但不能同时具有两个person_id
。 (换句话说,number
和PhoneNumbers
合在一起,“唯一地标识”{{1}}中的记录。)