0
我在這裏有一個問題,我無法找到一個適當的解決方案在我的研究,也許這是因爲我找不到確切的術語來搜索它,所以如果這是重複我將刪除它。約束,以避免外鍵的組合
我的問題是我想知道是否有可能避免兩個字段之間的數據組合。我將展示我想避免的結構和數據類型。這將更容易理解。
Table_A Table_B
------------------------ -------------------------------
id integer (PK) id integer (PK)
description varchar(50) title varchar(50)
id1_fromA (FK A->id)
id2_fromA (FK A->id)
我試圖驗證上表Table_B
(組合是id1_fromA和id2_fromA之間)
id title id1_fromA id2_fromA
1 Some Title 1 2 --It will be permmited
2 Some other 1 2 --It is a duplicate NOT ALLOWED
3 One more 1 1 --It is equals NOT ALLOWED
4 Another 2 1 --It is same as registry id 1 so NOT ALLOWED
5 Sample data 3 2 --It is ok
利用上述數據I可以很容易地解決註冊表ID=2
問題以下數據
ALTER TABLE table_B ADD CONSTRAINT UK_TO_A_FKS UNIQUE (id1_fromA, id2_fromA);
而註冊表ID=3
與
ALTER TABLE table_B ADD CONSTRAINT CHK_TO_A_FKS CHECK (id1_fromA != id2_fromA);
我的問題是ID=4
我想避免組合1,2
= 2,1
的這種重複的註冊表。是否有可能通過CONSTRAINT
或INDEX
或UNIQUE
來完成,或者我需要創建一個觸發器或程序來執行此操作?
在此先感謝。
工作優雅,謝謝:) – 2014-09-03 17:05:11