考虑我有两个具有两个不同角色的用户——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