我正在使用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对不起,我通过我的帖子对派对方式进行了一些更改,并忘记在某些地方进行更改。我编辑它是一致的。 –