2011-10-06 34 views
2

我有一個表有兩個可選的外鍵,每個表都有一個不同的表,其中一個表需要填寫,但哪一個不重要。我正在考慮使用觸發器來執行這個「約束」,但是這樣做感覺不對。我無法重新設計表格,所以我堅持不懈。可選外鍵之一必須是強制性的 - 如何?

我們正在使用Oracle 10g

有沒有更好的方式來做到這一點?

編輯:我不小心忽略了一些信息。至少要填寫一​​列,並且只能填寫一列。

回答

6

使用檢查約束。如果他們都可以被再填充:

alter table t add constraint c check (col1 is not null or col2 is not null) 

或者,如果他們是相互排斥的:

alter table t add constraint c check ((col1 is not null and col2 is null 
             or (col2 is not null and col1 is null)) 
+0

我最終這樣做:alter table t add constraint c check(col1不爲null且col2爲null或col1爲null且col2不爲null) – jworrin

0

創建一個表是你此刻正在引用兩個表的母公司。引用新表只有一個外鍵(不可爲空)而不是兩個。換句話說,使用超類型/子類型模式。

相關問題