我还不能完全理解这些差异。你能描述这两个概念并使用真实世界的例子吗?


当前回答

两个强大的实体之间存在着识别关系。非识别关系不一定是强实体和弱实体之间的关系。可能存在这样的情况:子实体本身具有主键,但其实体的存在可能取决于其父实体。

例如:卖家和一本书之间的关系,其中一本书正由卖家出售,卖家可能有自己的主键,但其实体仅在出售一本书时创建

基于Bill Karwin的参考

其他回答

两个强大的实体之间存在着识别关系。非识别关系不一定是强实体和弱实体之间的关系。可能存在这样的情况:子实体本身具有主键,但其实体的存在可能取决于其父实体。

例如:卖家和一本书之间的关系,其中一本书正由卖家出售,卖家可能有自己的主键,但其实体仅在出售一本书时创建

基于Bill Karwin的参考

标识关系指定子对象不能不存在父对象

非标识关系指定常规关联在对象之间,1:1或1:n基数。

如果父级不是,则可以将非标识关系指定为可选关系通过设置父表基数。。。

对Daniel Dinnyes回答的补充:

在非标识关系中,不能使用相同的值两次使用相同的主键列(例如,“ID”)。

但是,使用identifynig关系,可以为“ID”列显示两次相同的值,只要它具有不同的“otherColumn_ID”外键值,因为主键是两列的组合。

请注意,FK是否为“非空”并不重要!;-)

如果您认为在删除父项时应删除子项,则这是一种识别关系。

如果即使父项已删除,子项仍应保留,则它是一个不可识别的关系。

例如,我有一个包含学员、培训、文凭和培训课程的培训数据库:

学员与培训课程有明确的关系培训与培训课程有明确的关系但学员与文凭的关系并不明确

如果删除了相关的学员、培训或文凭,则只应删除培训课程。

识别关系意味着子实体完全依赖于父实体的存在。

示例帐户表人员表和人员帐户。人员帐户表仅通过帐户和人员表的存在来标识。

非标识关系意味着父表的存在不标识子表。

示例accountType和account.accountType表未标识为存在科目表。