我可以在房间中添加检查约束吗?

问题描述 投票:0回答:1

在我的数据库中,我有3个表:problemsusersrolesroles表具有2个值:clientcoach

数据库规则:

  1. 一个用户只有一个角色(客户或教练)。
  2. 一个问题有一位教练和一位客户。

problems实体具有指向users表的两个外键:coach_idclient_id。我可以使用Android Room添加检查约束以确保问题遵守此规则吗?

我想避免问题有两个客户或两个教练的情况。

数据库概念图

enter image description here

android sqlite relational-database android-room
1个回答
0
投票

当前ROOM不支持添加CHECK约束。

但是,您可以通过删除表然后创建表来引入CHECK约束(这可能是不希望的,因为这可能会带来持续的复杂性,例如在迁移时)。但是,CHECK约束是有限的,不能包含子查询,我认为这会使事情复杂化,甚至可能排除存在合适/可用的CHECK约束。

  • [我相信您会看到类似coach INTEGER CHECK((SELECT authority FROM user JOIN role ON role.roleid = user.role) = 0) REFERENCES user(userid) ON DELETE CASCADE ON UPDATE CASCADE,的信息(假设由于不清楚哪一列表示角色类型,教练必须拥有一个权限为0的角色)。但是,不能使用CHECK,因为它会导致CHECK约束中禁止的子查询错误。

因此,在插入问题的过程中,以编程方式进行这种检查可能会更简单。也就是说,对于每种类型(教练/客户),从用户那里获得角色,并且如果指定了错误的角色,则拒绝实际插入数据库。这更类似于Room的OO立场(即表支持并根据对象创建)。

© www.soinside.com 2019 - 2024. All rights reserved.