2010-09-09 61 views
3

在我們的項目中,我們從PostgreSQL數據庫的繼承特性中受益匪淺!使用postgresql繼承和外鍵約束?

我們實施不同機構的方案的動態創建。這種結構允許我們解決大量安全問題,在批量表(無分區)的情況下會立即發生。

我們遇到的唯一問題是保證數據庫的完整性,通常(在沒有繼承的結構上)通過外鍵約束來實現。

由於PostgreSQL有一定的限制(見inheritance caveats),我們被迫維護表結構而沒有的約束。

有沒有可能'模擬',即使假設相對性能衰減,通過觸發器和/或檢查的外鍵約束?

任何建議,非常感謝! 謝謝。

+0

正如我所理解的關鍵詞是「以編程方式在PostgreSQL中執行外鍵」 – Igor 2010-09-09 07:12:32

回答

0

在大多數情況下,應該可以在表格上編寫常規觸發器來驗證數據修改時的關係。

+0

同意,但要保證觸發器以合適的方式運行將是相當艱鉅的工作... – Igor 2010-09-09 11:55:05

4

唯一有問題的情況是,您從共享的表中引用parent表。您可以使用共享表parent_ids與一列id int primary key解決此問題。你必須在你的子表上使用觸發器來維護這個表,但它非常簡單—在插入時插入到parent_ids,在刪除時刪除它,在更新時更新它,其更新id

然後,而不是引用您的parent表,您將引用此表parent_ids表。這將確保參考完整性,並且您不會在2個子表中衝突id

它會將用過的ID泄露給任何用戶,但不允許訪問任何其他數據。

+0

好的提示!感謝你的分享。 – Igor 2010-09-13 09:20:21