我尝试在其中一个表上创建一个外键,引用另一个模式中的表的列。
类似的东西:
ALTER TABLE my_schema.my_table ADD (
CONSTRAINT my_fk
FOREIGN KEY (my_id)
REFERENCES other_schema.other_table(other_id)
)
由于我获得了必要的补助金,所以这很好。
现在我想知道是否有理由不在不同的模式中引用表,或者需要注意什么?
答案 0 :(得分:43)
这样做没问题。在表之间建立外键关系时,Schema确实没有任何影响。只需确保相应的人员具有您打算使用的架构所需的权限。
答案 1 :(得分:5)
这将完全作为引用其自己的架构中的表的外键。
与常规外键一样,如果父键被更新或者从父表中删除条目,请不要忘记索引my_id
(未编入索引的外键可能是大量争用的来源和索引通常是有用的。)
答案 2 :(得分:4)
我遇到的唯一问题是确保其他架构上存在权限。通常的东西 - 如果这些许可因任何原因而消失,你会听到它。
答案 3 :(得分:4)
如果您所在的组织中不同的人对不同的模式具有权限,我认为最好让其他模式禁用,甚至删除和重新创建约束。
例如,他们可能需要删除或截断他们的表,然后重新加载它来处理一些(非常奇怪的)支持问题。除非你想在半夜打电话,否则我建议让他们暂时删除你的约束。 (我还建议您设置自己的警报,以便您知道是否有任何外部约束被禁用或丢弃)。当您跨越组织/架构线时,您希望与其他人一起玩。文森特提到的指数是另一部分。
答案 4 :(得分:1)
这可能导致问题的一个原因是您需要小心以正确的顺序删除内容。这可能是好的也可能是坏的,这取决于你的桌子上永远不会有孤儿的重要性。