我正在尝试改进我的网络系统的数据库设计。基本上我对我存储所有用户数据的表有一些疑问,比如FirstName,LastName等。这个表为我所有不同的用户存储相同的数据,在这种情况下为学生,教授和另外两个用户存储角色类型。现在我将它作为一个单独的表称为PERSON。在那里,我拥有外键的所有关系,甚至在" Persons"之间。当学生有教授作为导师时。但是我只在Person是学生时使用了一些colums,例如是注册字段或者PaidUp,并且当其他类型的角色时我将它保持为null。
现在,我的问题是划分表Person的缺点和优点是什么,并创建子类并仅存储我需要它的外键。我应该保留单个表并使用"其中"过滤我的查询,或者我将表格标准化为几个 当我需要一般数据时,表在Person上进行连接?
答案 0 :(得分:0)
一个人是一个人,应该有自己的桌子。学生或教授是一个人扮演的角色。一个人可以扮演很多角色。我是我大学的学生,后来我在那里教书。
一名学生参加了一个班级,因此以这种方式与教授建立了默契关系。您还可以明确地跟踪关系,如下所示
了解表继承
你的设计应该是这样的:
PERSON
id
name
dob
...
PERSON_ROLE
person_id references PERSON(id)
type {student, prof, etc}
student_number (nullable)
salary (nullable)
...
PERSON_RELATIONSHIPS
from_person_id references PERSON(id)
to_person_id references PERSON(id)
type {tutorOf, studentOf, ...}
...