无法确定识别或非识别关系

Kdg*_*Dev 23 mysql identification identifying-relationship

我读过这个问题:识别和非识别关系之间有什么区别?

但我还是不太确定......我拥有的是三张桌子.

  1. 用户
  2. 对象
  3. 图片

用户可以拥有许多对象,也可以为每个对象发布许多图片.我的直觉告诉我这是一个识别关系,因为我需要在对象表中的userID,我需要在图片表中的objectID ...

还是我错了?另一个主题的解释仅限于数据库在已经编码后解释它的方式的理论解释,而不是对象在现实生活中如何连接.在考虑如何构建数据库时,我对如何做出识别与非识别的决定感到困惑.

Nic*_*ole 54

两者听起来都像是在与我建立关系.如果您听说过的条款一到一对一或一对多,和许多一对多,一对一关系确定关系,并多到许多关系都是非识别关系.

  • 如果孩子识别其父母,那么这是一种识别关系.在您提供的链接中,如果您有电话号码,您就知道它属于谁(它只属于一个).

  • 如果孩子没有识别其父母,那么这是一种非识别关系.在链接中,它提到了国家.将状态视为表示情绪的表中的行."快乐"并不是一个特定的人,而是很多人.

编辑:其他现实生活中的例子:

  • 物理地址是非识别关系,因为许多人可能驻留在一个地址.另一方面,电子邮件地址(通常被认为)是识别关系.
  • 社会安全号码是一种识别关系,因为它只属于一个人
  • 对Youtube视频的评论是识别关系,因为它们只属于一个视频.
  • 一幅画的原作只有一个所有者(识别),而许多人可能拥有该画的重印(非识别).

  • 看看你的解释,为什么MySQL Workbench Model/EER/UML编辑器(一个官方的MySQL产品)允许你创建"一对一识别","一对一非识别","一对一" - 很多识别`,`一对多非识别'关系?您可以在编辑器中创建的唯一类型的"多对多"关系是"识别"关系.根据你解释的背景,根本没有意义...... (18认同)
  • 将它重新设置为1:1和m:m,因为我有同样的疑问. (5认同)

小智 9

我认为更简单的可视化方法是问自己,如果没有父母,子记录是否可以存在.例如,订单行项目需要存在订单标题.因此,订单行项目必须具有订单标题标识符作为其密钥的一部分,因此,这是标识关系的示例.
另一方面,虽然一个人可能有多个电话号码,但电话号码可以在没有人的所有权的情况下存在.在这种情况下,拥有电话号码的人是非密钥或非识别关系,因为电话号码可以存在而与所有者不同(因此,电话号码所有者人可以为空,而在订单行项目示例中,订单头标识符不能为空.


Mah*_*hdi 6

NickC Said:一对一关系是识别关系,多对多关系是非识别关系

这个解释对我来说似乎完全错了.你可以有:

  • 一对一的非识别关系
  • 一对多非识别关系
  • 一对一识别关系
  • 一对多识别关系
  • 多对多识别关系

想象一下,你有如下表:customer,productsfeedback.所有这些都基于桌面上customer_id存在的内容cutomer.因此,根据NickC定义,不应存在任何类型的多对多识别关系,但在我的示例中,您可以清楚地看到:只有当相关产品存在且已被客户购买时,才能存在反馈,因此客户,产品和反馈应该是识别.

您可以查看MySQL手册,解释如何在MySQL Workbench上添加外键.