我正在为一个小型学校项目设计一个数据库,但目前正在为用户表及其相关表的设计而奋斗。
基本上:
所以我被两个设计困住了。第一个问题如下:
这个方法允许我在每种类型的表中有唯一的字段(不在图像中列出),但是问题在于字段的复制。
第二种方法是拥有一个用户表和一个第二个User_data表(而不是第一个设计中的三个分开的表),但我认为这会造成另一组问题,比如,如果当前寄存器是一个学生、教师或管理员,则具有空值。
对如何改进这一设计有什么建议吗?
发布于 2020-03-15 21:15:51
以下是我认为非常普遍的一个想法:
CREATE TABLE users
( user_id ... not null PRIMARY KEY
, user_name ... not null UNIQUE
, surname ... not null
, ...
, user_type ... not null
, CHECK (user_type IN ('T','S','A'))
, UNIQUE (user_type, user_id)
);
CREATE TABLE teachers
( user_id ... not null PRIMARY KEY
, license --- not null UNIQUE
, ...
, user_type ... not null
, CHECK (user_type = 'T')
, FOREIGN KEY (user_type, user_id)
REFERENCES users (user_type, user_id)
);
为学生和管理员提供类似的表格。
若要确定教师的姓名,请与用户联系。
检查约束在您的MySQL版本中可能不可用,您可以使用域表的外键实现相同的功能。
以上所有假设-例如,教师和学生-是不相交的。
https://dba.stackexchange.com/questions/262008
复制相似问题