无法理解识别关系的主要思想:
识别关系是指子表中的行是否存在取决于父表中的行。这可能会令人困惑,因为现在的常见做法是为子表创建伪键,但不为子表主键的父部分创建外键。正式地,执行此操作的“正确”方法是使外键成为子主键的一部分。但逻辑关系是,如果没有父级,子级就无法存在。
示例:一个人有一个或多个电话号码。如果他们只有一个电话号码,我们可以简单地将其存储在 Person 的一列中。由于我们想要支持多个电话号码,因此我们创建了第二个表 PhoneNumbers,其主键包括引用 Person 表的 person_id。
但是,如果 person_id 是主键,那么 Person 如何可以拥有多个电话号码呢?或者可能的person_id必须是复杂主键的一部分并且不能单独识别表中的项目?
最佳答案
Or possible person_id must be part of complex primary key […]?
正是如此。在您引用的示例中,PhoneNumbers
的主键可能类似于 (person_id, number)
。这意味着没有两个记录 PhoneNumbers
可以具有相同的 person_id
和 number
;他们可以拥有相同的 person_id
,也可以拥有相同的 number
,但不能同时拥有两者。 (换句话说,person_id
和 number
一起“唯一标识”PhoneNumbers
中的一条记录。)
关于java - 识别和非识别关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9750514/