【发布时间】:2015-03-31 02:41:50
【问题描述】:
我有 3 张桌子 - users、teams 和 team_members。后者是从team(id) 到user(id) 的多对多映射(外键分别为teams 和users)。是否有任何完整性检查可以添加到我的数据库中,可以断言虽然没有成员的团队是可能的,但没有团队的用户是不可能的?为了澄清,我想在数据库层强制所有用户必须属于至少 1 个团队(而没有要求所有团队必须有 1 个用户)。在 MYSQL 或 Postgres 中有效的答案是可以接受的。
【问题讨论】:
-
您使用的是什么数据库? MySQL 还是 Postgres?
-
我愿意。
-
只是一个想法。您的约束意味着当您尝试将
INSERT一行转换为users时,您还必须将INSERT至少一行转换为team_members。因此,整个操作不是原子的,必须推迟约束检查,直到两个表都被更改。它闻起来像一些花哨的触发器。有兴趣看到解决方案。 -
在这个相关答案中解决了同样的问题:stackoverflow.com/questions/8394177/… 和:stackoverflow.com/questions/24813000/…(可能重复)
-
@wrick:我是怎么找到这些的?好吧,我写了它们,所以我知道如何找到它们。搜索
[postgres] [referential-integrity] foreign key deferrable是一个好的开始...
标签: mysql sql postgresql constraints referential-integrity