考虑以下模型,其中 Customer
应该有一个且只有一个 Address
并且 Address
应该属于一个且只有一个 客户
:
要实现它,正如几乎每个 DB 领域的人所说,Shared PK
是解决方案:
但是我认为这是一个假的一对一关系。 因为就数据库关系而言,实际上没有什么可以阻止删除表 Address
中的任何行。所以真的,它是 1..[0..1] 而不是 1..1
我说的对吗?有没有其他方法可以实现真正的 1..1 关系?
更新:
为什么级联删除不是解决方案:
如果我们将级联删除视为一种解决方案,我们应该将其放在任一表中。比方说,如果从表 Address
中删除一行,它会导致表 Customer
中的相应行被删除。没关系,但解决方案的一半。如果 Customer
中的一行被删除,Address
中的相应行也应该被删除。这是解决方案的后半部分,显然形成了一个循环。
最佳答案
在我的评论旁边
- 您可以实现
DELETE CASCADE
参见HOW
我意识到插入也有问题。
- 您必须先插入
Customer
,然后再插入Address
所以我认为,如果您真的想要 1:1
,最好的方法是创建一个表。
客户
CustomerID
Name
Address
City
关于sql - 是否可以实现真正的一对一关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33021247/