sql - 是否可以实现真正的一对一关系?

标签 sql database-design relational-database one-to-one

考虑以下模型,其中 Customer 应该有一个且只有一个 Address 并且 Address 应该属于一个且只有一个 客户:

enter image description here

要实现它,正如几乎每个 DB 领域的人所说,Shared PK 是解决方案:

enter image description here

但是我认为这是一个的一对一关系。 因为就数据库关系而言,实际上没有什么可以阻止删除表 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/

相关文章:

MySQL 多外键

sql - 如何在 SQL Server 2005 中模拟 BEFORE DELETE 触发器

php - 无法添加或更新子行

sql - 删除一个表中存在而另一个表中不存在的数据?

php - 检查数据库中的事件计费服务

MySql 数据库设计——对于可能为空的列最有效?

更改列格式的 SQL 函数

mysql - 在 SQL 中设计灵活的模式设计

MySQL 连接 3 个表未返回所有结果

java - hibernate - 持久化策略模式的组合接口(interface)