我有这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)
上面的表格,这是实现泛化/专业化的正确方法吗?如果是,则在新学生注册时如何向数据库插入新值
答案 0 :(得分:1)
您通常拥有正确的想法(或者至少是实现此类数据库架构的常用习惯之一)。如果您的rdbms支持它,我会使用role
列的枚举(MySQL,例如,确实.MS SQL Server没有)。如果我没有添加检查约束以达到类似的效果,并确保您没有插入任何垃圾。
首先应对基表(person
)进行插入,然后再对专业化表(student
或lecturer
)进行插入。 E.g:
INSERT INTO person
VALUES (1, 'student', 'hiboss', 'hiboss@example.com');
INSERT INTO student
VALUES (100, 'intake', 'computer science', 1);