identifying realtionship与non-identifying relationship区别与转换(标识关系与非标识关系)
MySQL Workbench 或者是 E-RWin等进行数据库建模时,通常会对数据表进行关联操作,即设置表与表之间的关系 1:1 1:n m:n,而它们具有 identifying realtionship 与non-identifying relationship之分:
即 标识关系与非标识关系之分
1. identifying relationship 标识关系
建模工具图形为:实线
父表的主键成为子表主键的一部分,以标识子表,即子表的标识依赖于父表;
表示的是子表格和母表格之间有很强的联系。 子表格里的每一行都必须和母表格里的某一行相关。
图中的子表computerbook 和 book的关系就是 identify的, 因为computer book必须是book。
在table里表达identify的关系时,需要子表的primary key的一部分必须在主表中作为 foreign key 且不可以是NULL.
图中的computerbook table的 primary key book_id 也是 book table 的 foreign key
子表不可以在没有主表的情况下存在。
2. non-identifying relationship非标识关系
建模工具图形为:虚线
父表的主键成为子表的一部分,不标识字表,即子表的标识不依赖于父表;
这个表示的是子表和母表的关系比较弱, 子表可以在母表中存在也可以不在。
图中publisher 和 book的关系是non-identify.
因为book可以被publish, 也可以不被publish, 所以book 和 publisher 的关系是非强制的。
在数据库中, 表达non-idenfity relationship也是将子表的primary key作为母表中 foreign key, 但是由于关系不强制, 所以母表中的foreign key可以是null
两者转换实例:
Answer:
1, We need to make the original key attributes mandatory. To be more specific, whenever a tuple is entered in volunteering, we need to ensure PatientID and TestID are entered.
2, We need to set up the referential integrity for the original key attributes. That means whenever the original key attribute is entered, we should look up the value in the related parent entity to ensure it is a good value.
3, We need to make sure the combination of the original key attributes is unique. We can create a unique index on the combination of the orginal key attributes to enforce it.
参考:https://www.cnblogs.com/iTlijun/p/5035898.html
这篇很好:https://blog.csdn.net/mythabc1987it/article/details/24206661
https://blog.csdn.net/WHEgqing/article/details/108998283