代码之家  ›  专栏  ›  技术社区  ›  Peter Lang

对另一个架构中表的外键引用

  •  44
  • Peter Lang  · 技术社区  · 15 年前

    我试图在我的一个表上创建一个外键,引用另一个模式中表的一列。

    就像这样:

    ALTER TABLE my_schema.my_table ADD (
      CONSTRAINT my_fk
        FOREIGN KEY (my_id)
        REFERENCES other_schema.other_table(other_id)
    )
    

    因为我有必要的补助金,所以这很管用。

    现在我想知道不引用不同模式中的表是否有原因,或者需要注意什么?

    5 回复  |  直到 15 年前
        1
  •  41
  •   Randy Minder    15 年前

    做这个没问题。在表之间建立外键关系时,模式确实没有影响。只要确保适当的人拥有您想要使用的模式所必需的权限。

        2
  •  5
  •   Vincent Malgrat    15 年前

    这将与引用其自己模式中的表的外键完全相同。

    和普通的外键一样,不要忘记索引 my_id 如果父键曾经被更新过,或者从父表中删除了条目(未索引的外键可能是大量争用的源,而且索引通常还是有用的)。

        3
  •  4
  •   OMG Ponies    15 年前

    我遇到的唯一问题是确保另一个模式上存在权限。通常的事情-如果那些许可证因为任何原因消失了,你会听到的。

        4
  •  3
  •   Jim Hudson    15 年前

    如果您所在的组织中不同的人对不同的模式拥有权限,我认为最好的做法是让另一个模式能够禁用甚至删除并重新创建您的约束。

    例如,他们可能需要删除或截断他们的表,然后重新加载它来处理一些(非常奇怪的)支持问题。除非你想在半夜接到电话,我建议给他们暂时解除你的限制的能力。(我还建议设置您自己的警报,这样您就可以知道您的任何外部约束是否被禁用或删除)。当您跨越组织/模式线时,您希望与其他人相处得很好。文森特提到的索引也是其中的一部分。

        5
  •  1
  •   David Oneill    15 年前

    这可能导致问题的一个原因是您需要小心地按正确的顺序删除内容。这可以是好的也可以是坏的,这取决于在你的桌子上永远不要有孤儿是多么重要。