我还不能完全理解这些差异。你能描述这两个概念并使用真实世界的例子吗?
当前回答
标识关系指定子对象不能不存在父对象
非标识关系指定常规关联在对象之间,1:1或1:n基数。
如果父级不是,则可以将非标识关系指定为可选关系通过设置父表基数。。。
其他回答
如果您认为在删除父项时应删除子项,则这是一种识别关系。
如果即使父项已删除,子项仍应保留,则它是一个不可识别的关系。
例如,我有一个包含学员、培训、文凭和培训课程的培训数据库:
学员与培训课程有明确的关系培训与培训课程有明确的关系但学员与文凭的关系并不明确
如果删除了相关的学员、培训或文凭,则只应删除培训课程。
对Daniel Dinnyes回答的补充:
在非标识关系中,不能使用相同的值两次使用相同的主键列(例如,“ID”)。
但是,使用identifynig关系,可以为“ID”列显示两次相同的值,只要它具有不同的“otherColumn_ID”外键值,因为主键是两列的组合。
请注意,FK是否为“非空”并不重要!;-)
假设我们有这些桌子:
user
--------
id
name
comments
------------
comment_id
user_id
text
这两个表之间的关系将确定关系。因为,评论只能属于其所有者,而不能属于其他用户。例如每个用户都有自己的评论,当用户被删除时,该用户的评论也应被删除。
非识别关系
非识别关系意味着孩子与父母有亲属关系,但可以单独识别。
PERSON ACCOUNT
====== =======
pk(id) pk(id)
name fk(person_id)
balance
ACCOUNT和PERSON之间的关系无法识别。
确定关系
认同关系意味着需要父母给予孩子身份。孩子只因父母而存在。
这意味着外键也是主键。
ITEM LANGUAGE ITEM_LANG
==== ======== =========
pk(id) pk(id) pk(fk(item_id))
name name pk(fk(lang_id))
name
ITEM_LANG和ITEM之间的关系正在识别。以及ITEM_LANG和LANGUAGE之间的关系。
两个强大的实体之间存在着识别关系。非识别关系不一定是强实体和弱实体之间的关系。可能存在这样的情况:子实体本身具有主键,但其实体的存在可能取决于其父实体。
例如:卖家和一本书之间的关系,其中一本书正由卖家出售,卖家可能有自己的主键,但其实体仅在出售一本书时创建
基于Bill Karwin的参考
推荐文章
- 使用{merge: true}设置的Firestore与更新之间的差异
- mysql_connect():[2002]没有这样的文件或目录(试图通过unix:///tmp/mysql.sock连接)在
- 使用电子邮件地址为主键?
- MongoDB在v4之前不兼容ACID意味着什么?
- 在日历应用程序中建模重复事件的最佳方法是什么?
- 第一次设计数据库:我是否过度设计了?
- 我应该在SQL varchar(长度)中考虑电话的最长的全球电话号码是什么
- MySQL查询转储
- phpMyAdmin错误>格式参数错误?
- 在PostgreSQL表已经创建后,我可以添加UNIQUE约束吗?
- 如何在MVC应用程序中缓存数据
- 在Laravel安全地移除迁移
- 使用MySQL Workbench创建一个新数据库
- GUID / UUID数据库键的优缺点
- “防止保存需要重新创建表的更改”的负面影响