Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 难以确定是否确定关系_Mysql_Identification_Identifying Relationship - Fatal编程技术网

Mysql 难以确定是否确定关系

Mysql 难以确定是否确定关系,mysql,identification,identifying-relationship,Mysql,Identification,Identifying Relationship,我读过这个问题: 但我还是不太确定。。。 我有三张桌子 使用者 物体 照片 用户可以拥有许多对象,也可以为每个对象发布许多图片。 我的直觉告诉我这是一种识别关系,因为我需要objects表中的userID和pictures表中的objectID 还是我错了?另一个主题中的解释仅限于理论上解释数据库在编码后的解释方式,而不是对象在现实生活中的连接方式。在考虑如何建立数据库时,我有点困惑于如何决定识别还是不识别。对我来说,两者听起来都像是识别关系。如果您听说过术语一对一或一对多和多对多,一对关系是识

我读过这个问题:

但我还是不太确定。。。 我有三张桌子

  • 使用者
  • 物体
  • 照片
  • 用户可以拥有许多对象,也可以为每个对象发布许多图片。 我的直觉告诉我这是一种识别关系,因为我需要objects表中的userID和pictures表中的objectID


    还是我错了?另一个主题中的解释仅限于理论上解释数据库在编码后的解释方式,而不是对象在现实生活中的连接方式。在考虑如何建立数据库时,我有点困惑于如何决定识别还是不识别。

    对我来说,两者听起来都像是识别关系。如果您听说过术语一对一或一对多和多对多,一对关系识别关系,而多对多关系非识别关系

    • 如果子对象标识其父对象,则这是一种标识关系。在你给出的链接中,如果你有一个电话号码,你知道它属于谁(它只属于一个)

    • 如果子项未标识其父项,则为非标识关系。在链接中,它提到了国家。将状态视为表中表示情绪的一行。“快乐”不是指某个人,而是指很多人

    编辑:其他现实生活示例:

    • 物理地址是一种不可识别的关系,因为许多人可能居住在一个地址。另一方面,电子邮件地址(通常被认为)是一种识别关系
    • 社会保险号码是一种身份关系,因为它只属于一个人
    • Youtube视频上的评论可以识别关系,因为它们只属于一个视频
    • 一幅画的原作只有一个所有者(可识别),而许多人可能拥有这幅画的重印品(不可识别)

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

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

    我觉得这个解释完全错了。你可以:

    • Ono-to-One非识别关系
    • 一对多非识别关系
    • 一对一识别关系
    • 一对多识别关系
    • 多对多识别关系
    假设您有以下表格:
    customer
    products
    feedback
    。所有这些表格都基于
    customer
    表格中存在的
    customer\u id
    。因此,根据NickC定义,不应该存在任何类型的多对多识别关系,但是在我的例如,您可以清楚地看到:只有当相关产品存在并且已经被客户购买时,反馈才可能存在,因此客户、产品和反馈都应该得到识别


    你可以看一看,解释如何在MySQL工作台上添加外键。

    Mahdi,你的直觉是正确的。这是一个重复的问题,这个投票结果不正确或不完整。 请看这里的前两个答案:

    认同与不认同与身份无关。 简单地问问你自己,孩子的记录在没有父母的情况下能存在吗?如果答案是肯定的,那么它是不可识别的

    核心问题是子级的主键是否包含父级的外键。在非标识关系中,子级的主键(PK)不能包含外键(FK)

    问你自己这个问题
    • 子记录是否可以在没有父记录的情况下存在
    如果孩子可以在没有父母的情况下生存,那么这种关系是不确定的。(谢谢你更清楚地说明)

    一对一识别关系 社会保障号码正好符合这一类别。例如,让我们想象一下,没有一个人,社会保障号码就不可能存在(也许他们在现实中可以存在,但在我们的数据库中不可能存在)person\u id将是person表的主键,包括名称地址等列(让我们保持简单)社会保障号表将包括ssn列和个人id列作为外键。由于此FK可用作社会保障号表的主键,因此它是一种识别关系

    一对一非识别关系 在大型办公综合体中,您可能会有一个办公室表,其中包括按楼层和带有PK的建筑编号列出的房间号,以及一个单独的员工表。员工表(子表)有一个FK,它是office表PK中的office\u id列。而每个员工只有一个办公室和(在本例中)ev