我有一个有很多孩子的父母,这很好。针对每个父母,我试图存储default_child。我想强制使用default_child,但是我想不出怎么做。
首先创建父级意味着违反强制性default_child条件。首先创建孩子意味着违反它的FK条件。
其他人如何处理这件事?谢谢!
答案 0 :(得分:2)
约束通常可以标记为“可延迟”,这意味着您可以要求数据库推迟检查它们直到提交时间。这使您可以解决类似这样的情况,即在构建事务时需要临时违反约束,但在您准备提交时将再次满足。
答案 1 :(得分:0)
父母必须在生孩子之前存在。生活中真实;在数据库中是真的。
如果要确保在表中插入的每个项目都默认为子项,请使用在插入父记录后立即执行的触发器来执行此操作。
但是要小心:如果您的父母和子女记录在同一张桌子上,那么每次插入一个孩子时,触发器将再次触发,创建该孩子的孩子;这将触发孩子的孩子的插入......
答案 2 :(得分:0)
不确定每个DBMS是否都这样做,但我希望我可以在事务中破坏不变量,并且它只需要在提交点正确。
答案 3 :(得分:0)
SQL的一个基本限制是它无法支持这一点。最接近的是临时禁用一个或多个约束 - 例如使用可延迟约束。
可能的折衷方法是将引用列移除到自己的表中,以便它引用两个当前表。然后,只有在填充其他表后才向该新表插入一行。当然,约束仍然是可选的 - 只是你不需要一个可以为空的列来实现它。