我有一个表来跟踪分配给存储区中插槽的用户:
BUCKET_ID SLOT_ID USERNAME
0 0 bob
0 1 bob
0 2 bob
1 0 suzy
1 1 suzy
2 0 chris
3 0 bob
用户可以占用多个插槽。实际上,用户可以占用多个桶。但我需要强制一个桶只能有一个用户。也就是说,Bob和Suzy不能在同一个存储桶中占用插槽0和1。
有没有办法在数据库中强制执行此逻辑?也就是说,使违规的插入事务失败。
我知道事务失败的唯一方法是它是否违反了唯一索引。所以我正在研究一个更新某些辅助表的触发器,一个仅存在于包含唯一索引的辅助表。
其他建议?
答案 0 :(得分:0)
您可以在插入之前执行select查询以验证插入然后有条件地插入记录吗? 喜欢
select username from table where bucket_id = 0 and username <> 'suzy'
如果上面的查询没有返回记录,那么insert是有效的,否则另一个用户已经拥有一个存储桶并且插入无效