教师、学生和管理员作为用户的子类型/超类型

j91ykkif  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(566)

无论是教师、学生管理员还是超级管理员,每个实体都有登录凭据和角色。
所以我决定实现子类型和超类型关系。

Users
------------
id
email
password
roleId

Teachers
-------------
userId -> foreign key as well as primary key
name

Students
--------------
userId
name

School
-------------
userId
name

但学校、教师和学生之间也是相互联系的。所以老师或学生会有另一把外键 school_id .
我应该使用这个模式还是在学生、教师和学校中删除userid的主键约束。
我应该给他们自己唯一的主键。

jv4diomz

jv4diomz1#

例如(示意图):

CREATE TABLE users ( id PRIMARY KEY,
                     name,
                     email,
                     password,
                     role_id FOREIGN KEY roles(id),
                     school_id FOREIGN KEY schools(id),
                     type ENUM('Teacher', 'Student'),
                     teacher_id FOREIGN KEY users(id), -- NULL for teachers
                     CHECK (CASE WHEN type = 'Teacher'
                                 THEN teacher_id IS NULL
                                 ELSE teacher_id IS NOT NULL
                                 END)
                   );

不需要老师和学生的table。

相关问题