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


当前回答

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

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

基于Bill Karwin的参考

其他回答

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

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

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

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

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

user287724的回答给出了以下书籍与作者关系的示例:

然而,一本书是由一位作者写的,而且作者可能已经写了多本书。但这本书需要作者来写,没有作者就不可能存在。因此,这本书和作者之间的关系是一种识别关系。

这是一个非常令人困惑的例子,绝对不是识别关系的有效例子。

是的,如果没有至少一位作者,一本书就无法写作,但这本书的作者(是外键)无法在图书表中识别这本书!

您可以从书本行中删除作者(FK),并且仍然可以通过其他字段(ISBN、ID等)来识别书本行,但不能识别书本的作者!!

我认为识别关系的一个有效示例是(产品表)和(特定产品详细信息表)1:1之间的关系

products table
+------+---------------+-------+--------+
|id(PK)|Name           |type   |amount  |
+------+---------------+-------+--------+
|0     |hp-laser-510   |printer|1000    |
+------+---------------+-------+--------+
|1     |viewsonic-10   |screen |900     |
+------+---------------+-------+--------+
|2     |canon-laser-100|printer|200     |
+------+---------------+-------+--------+

printers_details table
+--------------+------------+---------+---------+------+
|Product_ID(FK)|manufacturer|cartridge|color    |papers|
+--------------+------------+---------+---------+------+
|0             |hp          |CE210    |BLACK    |300   |
+--------------+------------+---------+---------+------+
|2             |canon       |MKJ5     |COLOR    |900   |
+--------------+------------+---------+---------+------+
* please note this is not real data

在本例中,printers_details表中的Product_ID被视为FK引用products.ID表,同时也是printers_dedetails表中的PK,这是一种标识关系,因为printers表中的Product _ID(FK)正在标识子表中的行,我们无法从子表中删除product_id,因为我们无法再标识该行,因为我们丢失了它的主键

如果要将其分为两行:

识别关系是FK在当仍然引用父表

另一个例子可能是在某个国家/地区的进出口数据库中有3个表(进口-产品-国家)

导入表是具有这些字段的子表(product_id(FK)、country_id(FK)、导入数量、价格、导入单位、运输方式(空运、海运))我们可以使用(product_id,thecountryid`)来标识导入的每一行“如果它们都在同一年”,这里这两列可以一起组成子表(imports)中的主键,也可以引用父表。

拜托,我很高兴我终于理解了认同关系和非认同关系的概念,所以请不要告诉我,我对一个完全无效的例子的所有投票都错了

是的,从逻辑上讲,一本书没有作者是写不出来的,但是一本书如果没有作者是可以被识别的,事实上,它不能被识别为作者!

您可以从书本行中100%删除作者,并且仍然可以识别书本!。

现实世界还有另一种解释:

一本书属于所有者,所有者可以拥有多本书。但是,这本书也可以在没有所有者的情况下存在,它的所有权可以从一个所有者变为另一个所有者。书籍和所有者之间的关系是一种不可识别的关系。

然而,一本书是由一位作者写的,而且作者可能已经写了多本书。但是,这本书需要作者来写——没有作者,它就不可能存在。因此,这本书与作者之间的关系是一种认同关系。

正如下面的链接中很好地解释的,识别关系有点像ER概念模型中的父实体的弱实体类型关系。用于数据建模的UML风格CAD不使用ER符号或概念,并且关系类型为:识别、非识别和非特定。

识别关系是父/子关系,其中子实体是一种弱实体(即使在传统的ER模型中称为识别关系),其自身属性没有真正的主键,因此无法通过自身属性唯一识别。在物理模型上,对子表的每一次访问都将依赖于(包括语义上的)父级主键,该主键会变成子级主键的一部分或全部(也是外键),通常会在子级生成一个复合键。子项本身的最终现有键仅是伪键或部分键,不足以识别该类型实体或实体集的任何实例,而不需要父项的PK。

非标识关系是完全独立的实体集的普通关系(部分或全部),其实例不依赖于彼此的主键来唯一标识,尽管它们可能需要外键用于部分或全部关系,但不作为子实体的主键。孩子有自己的主键。父幂等。两者都是独立的。根据关系的基数,其中一个的PK作为FK传递到另一个(N侧),如果是部分,则可以为空,如果是总计,则必须不为空。但是,在这样的关系中,FK永远也不会是孩子的PK,就像在确定关系时一样。

http://docwiki.embarcadero.com/ERStudioDA/XE7/en/Creating_and_Editing_Relationships

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

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

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

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