PostgreSQL有可能有條件地添加一個外鍵嗎?有條件的PostgreSQL外鍵
喜歡的東西:ALTER TABLE table1 ADD FOREIGN KEY (some_id) REFERENCES other_table WHERE some_id NOT IN (0,-1) AND some_id IS NOT NULL;
具體來說,我的參考表中有所有的正整數(1+),但我需要添加外鍵的表可以包含零(0),零和負一(-1 )而是,所有的含義都有所不同。
注:
我深知,這是窮人表設計,但它是建立10+年前,當我們可以在這一點上不存在的功能和資源巧招。這個系統正在運行數百家零售店,所以要回去改變這個方法可能需要幾個月的時間,這是我們沒有的。
我不能使用觸發器,這必須用外鍵完成。
天才!你是對的,它有點難看,但數據庫仍然自我管理,所以它應該做的伎倆! – trex005
啊,你有沒有研究過Postgres源代碼?這可能是一個很酷的功能,您可以通過在幕後完成此操作來添加。 – trex005
@ trex005:我還沒有在PG源上工作過。但是,我時時刻刻都在黑客的名單上冒險,這樣的特點不會受到歡迎。如果你推廣_your_例子(除了'0'和'-1'之外的任何其他內容)並考慮涵蓋所有可能情況的通用語法,你會得到一個非常複雜的語法結構。在規模的另一方面:現有的工具已經無法做到。最終結果是:稀缺資源(開發人員時間/預算)將在其他TODO項目上得到更好的回報。但這只是我的印象。隨時與他們聯繫。 –