user287724's answer 给出了以下书籍和作者关系的例子:
然而,一本书是由一个作者写的,而这个作者可能写了多本书。但是这本书需要作者写,没有作者就不可能存在。因此书和作者之间的关系是一种识别关系。
这是一个非常令人困惑的示例,对于identifying relationship,绝对不是一个有效的示例。
是的,如果没有至少一个author,就无法编写book,但是book 的author(它的外键)是不能识别book在books 表中!
您可以从book 行中删除author (FK),并且仍然可以通过其他字段(ISBN、ID、...等)识别书行,但不能这本书的作者!!
我认为identifying relationship 的一个有效示例是(产品表)和(特定产品详细信息表)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 被认为是引用 products.id 表的 FK 和 printers_details 表中的 ALSO PK,这是一种识别关系,因为打印机表中的Product_ID(FK) IS IDENTIFYING 子表中的行,我们无法从子表中删除product_id,因为我们无法再识别该行因为我们丢失了它的主键
如果你想把它放在 2 行中:
识别关系是当 FK 在
子表被视为子表中的 PK(或标识符),而
仍然引用父表
另一个示例可能是当您在某个国家/地区数据库的导入和导出中有 3 个表(进口 - 产品 - 国家)时
import 表是具有这些字段的子表(product_id(FK)、country_id(FK)、进口量、价格、进口单位、运输方式( air, sea) )
we may use the (product_id, thecountry_id`) 以识别进口的每一行“如果它们都在同一年”,这两个列可以在子表(进口)中组成一个主键,并且引用那里的父表。
我很高兴我终于理解了 identifying relationship 和 non identifying relationship 的概念,所以请不要告诉我我对所有这些投票都错了完全无效的例子强>
是的,从逻辑上讲,没有作者就不能写一本书,但是没有作者就可以确定一本书,实际上它不能与作者确定!
您可以 100% 从书行中删除作者,但仍然可以识别该书!。