识别和非识别有什么区别
我无法完全掌握分歧。 你能描述两个概念并使用现实世界的例子吗?
一个识别关系是何时一个子表中的行的存在取决于父表中的一行。 这可能会引起混淆,因为现在很普遍的做法是为子表创建伪密码,但不要将子键的外键设置为子键的父键。 从形式上来说,这样做的“正确”方式是将孩子的主键作为外键。 但逻辑关系是,孩子没有父母就不能生存。
例如:一个Person
有一个或多个电话号码。 如果他们只有一个电话号码,我们可以将其存储在Person
一列中。 由于我们希望支持多个电话号码,因此我们制作第二个表PhoneNumbers
,其主键包括引用Person
表的person_id
。
我们可能会将电话号码视为属于某个人,即使他们被建模为单独表格的属性。 这是一个强烈的线索,这是一个确定的关系(即使我们不从字面上包括person_id
中的主键PhoneNumbers
)。
非标识关系是父级的主键属性不能成为子级的主键属性的时候。 一个很好的例子就是查找表,比如引用Person.state
主键的States.state
上的外键。 Person
是一个关于States
的子表。 但Person
的一行并不由其state
属性标识。 即state
不是主键的一部分Person
。
非标识关系可以是可选的或强制的 ,这意味着外键列分别允许NULL或不允许NULL。
另请参阅我的答案仍然困惑关于识别与非识别关系
还有来自现实世界的另一种解释:
一本书属于一个所有者,而一个所有者可以拥有多本书。 但是,这本书也可以在没有所有者的情况下存在,并且它的所有权可以从一个所有者变为另一个所有者。 书与业主之间的关系是一种非识别关系。
然而,一本书是由作者撰写的,作者本可以写多本书。 但是,这本书需要由作者撰写 - 没有作者就不可能存在。 因此,本书与作者的关系是一种识别关系。
识别关系指定在没有父对象的情况下子对象不能存在
非识别关系指定对象之间的常规关联,1:1或1:n基数。
通过设置父表基数,可以将非标识关系指定为可选,其中父代不是必需的,或者在需要父代时是非必需的。
链接地址: http://www.djcxy.com/p/65253.html上一篇: What's the difference between identifying and non
下一篇: How to make CSS3 rounded corners hide overflow in Chrome/Opera