识别和非识别有什么区别

我无法完全掌握分歧。 你能描述两个概念并使用现实世界的例子吗?


  • 一个识别关系是何时一个子表中的行的存在取决于父表中的一行。 这可能会引起混淆,因为现在很普遍的做法是为子表创建伪密码,但不要将子键的外键设置为子键的父键。 从形式上来说,这样做的“正确”方式是将孩子的主键作为外键。 但逻辑关系是,孩子没有父母就不能生存。

    例如:一个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