我需要为我的订阅表创建一个唯一约束,以不允许用户同时拥有两个活动订阅。我创建了迁移并更新了我的实体类:
CREATE UNIQUE INDEX unique_user_id_status ON user_subscription_plan (user_id, status)
但我刚刚意识到状态字段可以有多个值(活动、非活动、已处理),因此我可能只有当两个状态处于活动状态时才应该有此约束,但例如我可以有两个已处理的状态。这是对的吗?那么我该如何在实体类上做到这一点呢?任何建议都将受到高度赞赏。
当您使用 MySQL 时,看看基于函数的索引是否有帮助。
create table test (user_id int, status varchar(20));
create unique index ui1_test on test
(user_id, (case when status = 'active' then status end));
它不会让您插入状态为
active
的两行,但不会阻止您在任何其他状态下插入任意数量的行(您提到了 inactive
和 processed
)。
看看fiddle进行演示。