要为数据库中的不同角色存储相同的详细信息,但需要不同的字段(非空字段)



考虑我有两个具有两个不同角色的用户——user1:role1,user2:role2

两种角色类型的许多列都是相同的,例如考虑出生数据。但对于角色1,保存出生数据是必需的(不为空(,而对于角色2,它是可选的(可为空(。所以,是为两个角色维护两个不同的表更好,还是保留同一个表并在后台维护逻辑更好。

但对于角色1,保存出生数据是必需的(不为null(,而对于角色2,它是可选的(可为null(。

使用表级CHECK约束:

CREATE TABLE user_role (
user_name VARCHAR(255) NOT NULL,           -- common user info
role_id INT NOT NULL,                      -- reference to role table 
birth DATE,                                -- day of birth
CHECK (role_id <> 1 OR birth IS NOT NULL)  -- if role=1 then check that birth date is set
);

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=a1ae67dd4dc31d446b65f41e54f59431

最新更新