Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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_Sql_Database Design_Data Modeling - Fatal编程技术网

Mysql 数据库中的一对一关系

Mysql 数据库中的一对一关系,mysql,sql,database-design,data-modeling,Mysql,Sql,Database Design,Data Modeling,假设我有一个表users,其中有一个PKid\u user 我还拥有表用户和表雇主之间的识别关系。我可以将PKid\u user用作表employer中的外键,也可以用作此表中的PK(具有唯一约束) 在这种情况下,雇主只有一名工人,工人只有一名雇主。简短回答:是。当外键同时也是子表的主键时,它会将其强制为一对一 更详细的回答:根据我的经验,随着用户的需求得到更好的理解,我所做的每一个1对1都被扩展为1对多或多对多。例如:你最终需要雇主的历史记录,所以突然之间你就有了一个从个人到雇主的多对多的有效

假设我有一个表
users
,其中有一个PK
id\u user

我还拥有表
用户
和表
雇主
之间的识别关系。我可以将PK
id\u user
用作表
employer
中的外键,也可以用作此表中的PK(具有唯一约束)


在这种情况下,雇主只有一名工人,工人只有一名雇主。

简短回答:是。当外键同时也是子表的主键时,它会将其强制为一对一

更详细的回答:根据我的经验,随着用户的需求得到更好的理解,我所做的每一个1对1都被扩展为1对多或多对多。例如:你最终需要雇主的历史记录,所以突然之间你就有了一个从个人到雇主的多对多的有效日期


在这件事发生了几次之后,我强调要深入探究为什么1比1似乎有意义,但总是发现它没有意义。因此,我为自己制定了一条经验法则,避免使用1对1的表,因为它们通常表示对需求的理解不完整。

主键是特殊的唯一键。在这种情况下,我不会在雇主表中链接工人,因为通常一个雇主有多个工人。如果您完全确定它是一个一对一的关系,我不明白为什么您使用两个表而不是一个表。也就是说,将雇主字段添加到worker表中。真正的一对一关系是例如电话号码或电子邮件地址,它们通常与所有者一起存储,而不是存储在单独的表中。

我不确定我是否得到了它,这是不是-“雇主只有一名工人,工人只有一名雇主”。这是您解决方案的一个要求或不想要的产品?在这种情况下,这是一个要求。+1。用户和雇主之间的关系是1:1,这似乎很奇怪。每个雇主真的只能有一个用户吗?