2010-01-19 48 views
34

我試圖在其中一個表上創建外鍵,引用不同模式中表的列。對另一個模式中的表的外鍵引用

類似的東西:

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

因爲我有必要的補助,這工作得很好。

現在我想知道是否有理由不在不同的模式中引用表或任何需要注意的事情?

回答

32

這樣做沒問題。在建立表之間的外鍵關係時,Schema確實沒有影響。只要確保適當的人員具有您打算使用的模式所需的權限即可。

0

這可能會導致問題的一個原因是您需要小心以正確的順序刪除東西。這可能是好的或壞的,取決於在你的桌子上永遠不會有孤兒的重要性。

+1

嗯,但是在我的模式中引用一個表時,這是相同的。對? – 2010-01-19 17:06:55

+0

是的,它是一樣的。不過,這是需要注意的 – 2010-01-19 17:09:46

4

這將完全像在其自己的模式中引用表的外鍵一樣工作。

與常規外鍵如果父關鍵是不斷更新的,不要忘了指數my_id或者如果從父表中刪除的條目(沒有索引的外鍵可以是巨大爭論的來源,該指數通常是有用的無論如何)。

4

我遇到的唯一情況是確保在其他模式中存在權限。通常的東西 - 如果這些許可不管出於什麼原因都會消失,那麼您會聽到它的消息。

2

如果你在一個組織中不同的人對不同模式擁有權限,我認爲讓其他模式能夠禁用甚至刪除並重新創建你的約束是一個好習慣。

例如,他們可能需要刪除或截斷他們的表,然後重新加載它來處理一些(非常奇怪的)支持問題。除非你想在半夜打電話,否則我建議讓他們暫時解除約束。 (我也建議設置自己的警報,以便您知道是否有任何外部約束被禁用或丟棄)。當你跨越組織/架構線時,你想和其他人一起玩。文森特提到的索引是另一部分。