【问题标题】:DB design - suggestions. Normalize数据库设计 - 建议。标准化
【发布时间】:2018-01-26 07:46:56
【问题描述】:

我正在尝试改进我的网络系统的数据库设计。基本上,我对存储所有用户数据的表(例如 FirstName、LastName 等)有一些疑问。该表为我的所有不同用户存储相同的数据,在这种情况下,用于 Student、Profesors 和另外两个角色类型。现在我把它作为一个单独的表称之为 PERSON。在那里,我有我的外键的所有关系,甚至当学生有教授作为导师时,“人”之间的关系也是如此。但是我只在 Person 是 Student 时才使用一些列,例如字段 Enrolled 或 PaidUp,而当是其他类型的角色时,我将其保留为 null。

现在,我的问题是划分表 Person 并创建子类并仅在我需要的地方存储外键的优缺点是什么。我应该保留单个表并使用“where”来过滤我的查询,还是将表标准化为几个 当我需要一般数据时,表在 Person 上进行连接?

【问题讨论】:

标签: mysql database database-design relational-database


【解决方案1】:

一个人就是一个人,应该有自己的桌子。学生或教授是一个人扮演的角色。一个人可以扮演很多角色。我是我大学的学生,后来我在那里教书。

一个学生在上课,所以和教授有一种默契的关系。您还可以显式跟踪关系,如下所示

也阅读表继承

你的设计应该是这样的:

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, ...}
...

【讨论】:

  • 那我是不是只把表分成2个表Person和Person_Role呢?即使例如薪水或学生号码保持为空?该系统更侧重于中小学,但您所说的学生成为教授可能会在系统的后续迭代中使用
  • 我不同意。从数据库的角度来看,学生是一种东西,教授是另一种东西。是的,两者都是人,是的,一个人可能既是学生又是教授,但这一事实与数据模型无关。让学生和教授分开(教授和他们的学生的后代说):-)
  • @Strawberry 所以可以有单独的表格吗?如果稍后我将有很多行与只有一个表相比,使用连接进行查询有多大区别?
  • @Elebkey 其他因素将超过此考虑
猜你喜欢
  • 1970-01-01
  • 2011-03-16
  • 2012-01-27
  • 1970-01-01
  • 2011-08-05
  • 2014-10-22
相关资源
最近更新 更多