我正在使用Hibernate 4和Oracle 11g在Web應用程序上工作。如何在多個表中創建條件唯一約束?
我在這種情況下正在使用以下表格。爲了保護無辜者,表格已被更改和簡化。
entry
ID | name |
1 | thing1 |
2 | thing2 |
entry_number
ID | value | entry_id| type_id |
1 | 11111 | 1 | 1 |
2 | 22222 | 1 | 2 |
3 | 33333 | 1 | 2 |
4 | aaaaa | 2 | 1 |
5 | bbbbb | 2 | 2 |
6 | ccccc | 2 | 2 |
type
ID | name |
1 | unique |
2 | regular |
3 | etc. |
...
的想法是,我希望有條件地限制入口號的插入,這樣只能有型「獨特的」分配給任何給定條目的一個數字。不幸的是,許多簡單的約束方法不適用於這種情況。經過一番研究,我發現以下解決方案工作:
create unique index unique_entry_number on entry_number(CASE WHEN TYPE_ID = 1 THEN entry_id ELSE null END);
我不喜歡這個唯一的一點是,我引用id爲「TYPE_ID」,我不相信我可以必然依賴於一致。而且Oracle不會讓我在唯一索引內部使用子查詢來加入「type.name」,我可以依靠它來保持一致。
有沒有不同的方法,我應該使用,我不知道或有任何建議,我可以緩解這個問題?最好在代碼更改或數據模型更改方面儘可能不干擾?或者這只是我必須學會處理的一個現實?
您討論的是什麼'item_number'?我沒有在你的數據模型中看到它。 –
您想要實現的「獨特性」聽起來像是不適合在關係數據庫中作爲約束條件的東西,但是就像應該在您的代碼/ UI中強制實施的東西。 –
@KlausByskovPedersen對不起,我通過我的帖子對派對方式進行了一些更改,並忘記在某些地方進行更改。我編輯它是一致的。 –