這是我的玩具設置。我有3張桌子。一張桌子是客人名單(姓,名,無論),食物清單(豆,糊,米,蔬菜)和訂單清單(客人ID,食物ID)。訂單清單是我感興趣的。我想限制它的以下條件。如何在Oracle中創建這個約束無需PL/SQL
客人必須有3個訂單。 客人可以有空訂單。 每位客人的訂單不能相同,除非訂單爲空。
因此,爲了表將如下所示(用繩子代替FK IDS):
steve, beans
steve, rice
steve, veggies
joey, rice
joey, beans
joey, <null>
sarah, rice
sarah, <null>
sarah, <null>
sam, <null>
sam, <null>
sam, <null>
顯然薩姆不喜歡的食物...但是這將是一個有效的表。每個用戶有3個條目,並且沒有用戶有重複(沒有雙重豆給你!)。
事情我已經試過
create table order (
guest_uid FK,
food_uid FK,
CONSTRAINT order_unique UNIQUE (guest_uid, food_uid)
)
這工作得很好驗證沒有雙豆,但雙/三零不會飛。我希望oracle獨特的null在這裏適用,但我想不是(違反唯一約束order_unique)。
我嘗試了一些其他的檢查約束,但我找不到一個方法來指定跨行的唯一性,而不做子查詢(當然這是不允許的)。有什麼想法嗎?謝謝
ps。如果唯一有效的答案是「使用PL/SQL或觸發器」,我將確保標記出正確的答案。
雙雙哦!我認爲聯邦調查局不贊成。即使我的玩具例子使用了一個保留字。 Oooffff。謝謝你的幫助。 – howsyouredge 2012-04-09 19:56:54