我对 Oracle 和数据库世界很陌生。我不确定标题是否有意义,所以我会继续解释我的情况。
我目前手头有一张记录订单交易的表。此表中的列是 TRANSACTION_TYPE、ORDER_ID、QUANTITY、DATE、CREATED_BY、CREATION_DATE。交易类型是“购买”和“退款”。到目前为止,我们只有全额退款,因为购买的大部分商品都是单一数量。我们希望使它成为多个,在这种情况下,我们可能不得不执行多次退款。
表唯一键约束是 TRANSACTION_TYPE、ORDER_ID 的组合。我可以打破这个限制,通过将组合扩展到 TRANSACTION_TYPE、ORDER_ID、TRANSACTION_REFERENCE(这个引用来自于进行实际购买或退款的服务)来进行多次退款。但事情是这样的,这意味着我可以对同一个订单进行多次退款,如果是购买也是可能的。我想创建一个约束,使得 'PURCHASE' + ORDER_ID 的组合在表中是唯一的,这样对于给定的 ORDER_ID 约束只能进行一次购买。
我试着寻找这种可能性,甚至在这个网站上尝试过。我可能在这里使用了错误的术语。但是,如果这里有人对此有答案,我很乐意听到。
任何帮助甚至将我推向正确方向的帮助都将不胜感激。
您可以创建基于函数的索引。如果表被命名TRANSACTION
CREATE UNIQUE INDEX only_one_purchase
ON transaction( (case when transaction_type = 'PURCHASE'
then order_id
else null
end) );
Run Code Online (Sandbox Code Playgroud)
这利用了 Oracle 不会在索引中存储完全 NULL 行的事实,因此只有作为事务order_id一部分的值PURCHASE才会存储在索引中。
| 归档时间: |
|
| 查看次数: |
446 次 |
| 最近记录: |