我不确定我是否将此问题命名为正确。
想象一下有两个表:一个表示用户,另一个表示地址。 一个用户只能有一个地址:
CREATE TABLE User (
id INT NOT NULL,
full_name VARCHAR(255),
PRIMARY KEY(id)
);
CREATE TABLE Address (
id INT AUTO_INCREMENT NOT NULL,
address_line_1 VARCHAR(255),
address_line_2 VARCHAR(255),
PRIMARY KEY(id)
);
问题是:将外键引用放在哪里的正确位置?我应该通过创建引用Address.id的“address_id”列将引用列放入User表中吗?或者我应该将user_id列放入引用User.id的地址表?
答案 0 :(得分:2)
当你有1-1关联时,你需要问问自己为什么它首先在那里?大多数情况下,它表明设计不完整或不准确。有时1-1是正确的,不要误解我的意思,但你必须证明它的存在是正确的。
话虽如此,在您的情况下,您可能会以主表的形式访问用户。您的最终用户可能正在按用户ID查找用户个人资料,然后向下钻取或导航到更多个人资料信息,例如地址。如果是这种情况,FK将属于地址表。但是,如果您的业务主要是您的最终用户将主要浏览地址信息,然后深入查看用户信息,那么FK将属于用户表。
此处需要完成的另一件事是FK是强制的还是可选的(非空或可为空),因为这会影响RI。如果我删除用户会怎么样?相应的地址应该消失吗?
答案 1 :(得分:0)
这里有可能在同一地址获得更多用户,因此将外键放在地址表中将是我的选择。