我还不能完全理解这些差异。你能描述这两个概念并使用真实世界的例子吗?
当前回答
识别关系意味着子实体完全依赖于父实体的存在。
示例帐户表人员表和人员帐户。人员帐户表仅通过帐户和人员表的存在来标识。
非标识关系意味着父表的存在不标识子表。
示例accountType和account.accountType表未标识为存在科目表。
其他回答
对Daniel Dinnyes回答的补充:
在非标识关系中,不能使用相同的值两次使用相同的主键列(例如,“ID”)。
但是,使用identifynig关系,可以为“ID”列显示两次相同的值,只要它具有不同的“otherColumn_ID”外键值,因为主键是两列的组合。
请注意,FK是否为“非空”并不重要!;-)
两个强大的实体之间存在着识别关系。非识别关系不一定是强实体和弱实体之间的关系。可能存在这样的情况:子实体本身具有主键,但其实体的存在可能取决于其父实体。
例如:卖家和一本书之间的关系,其中一本书正由卖家出售,卖家可能有自己的主键,但其实体仅在出售一本书时创建
基于Bill Karwin的参考
标识关系指定子对象不能不存在父对象
非标识关系指定常规关联在对象之间,1:1或1:n基数。
如果父级不是,则可以将非标识关系指定为可选关系通过设置父表基数。。。
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%删除作者,并且仍然可以识别书本!。
比尔的回答是正确的,但令人震惊的是,在所有其他答案中,没有人指出最重要的方面。
人们一再强调,在一种确定的关系中,没有父母,孩子是不可能存在的。(例如用户287724)。这是真的,但完全没有抓住重点。外键为非空就足够了。它不需要是主键的一部分。
因此,真正的原因是:
识别关系的目的是,外键永远不会更改,因为它是主键的一部分。。。因此识别!!!