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

时间:2016-05-15 09:48:11

标签: mysql sql sql-server database database-design

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

personID int主键,
角色varchar(10),
名称varchar(50),
email varchar(255)

学生

studentID int,
摄入量varchar(50),
主要varchar(50),
personID int reference person(personID)

讲师

LecturerID int,
技能varchar(50),
资格varchar(50),
personID int reference person(personID)

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

1 个答案:

答案 0 :(得分:1)

您通常拥有正确的想法(或者至少是实现此类数据库架构的常用习惯之一)。如果您的支持它,我会使用role列的枚举(MySQL,例如,确实.MS SQL Server没有)。如果我没有添加检查约束以达到类似的效果,并确保您没有插入任何垃圾。

首先应对基表(person)进行插入,然后再对专业化表(studentlecturer)进行插入。 E.g:

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

INSERT INTO student
VALUES (100, 'intake', 'computer science', 1);