如何实现和插入值 SQL 特化/泛化

hib*_*oss 5 mysql sql database sql-server database-design

我的桌子上有这 3 个实体:学生、讲师和人。Person 将是拥有学生和讲师共同属性的父母。这是我的数据库设计,这是实现专业化的正确方法吗?

personID int 主键,
角色 varchar(10) ,
姓名 varchar(50),
电子邮件 varchar(255)

学生

studentID int、
intake varchar(50)、
major varchar(50)、
personID int 引用 person(personID)

讲师

LecturerID int ,
Skill varchar(50),
Qualification varchar(50) ,
personID int 引用 person(personID)

上面的表格,这是实现泛化/专业化的正确方法吗?如果是,如何在新学生注册时向数据库插入新值?

Mur*_*nik 4

您通常有正确的想法(或者至少是实现此类数据库模式的常见习惯用法之一)。如果您的支持它,我会为该role列使用枚举(例如,MySQL 支持。MS SQL Server 不支持)。如果没有,我会添加一个检查约束来实现类似的效果,并确保不会在那里插入任何垃圾。

person首先对基表 ( ) 进行插入,然后再对专业化表 (studentlecturer) 进行插入。例如:

INSERT INTO person 
VALUES (1, 'student', 'hiboss', 'hiboss@example.com');

INSERT INTO student
VALUES (100, 'intake', 'computer science', 1);
Run Code Online (Sandbox Code Playgroud)