【发布时间】:2011-07-17 21:37:22
【问题描述】:
您好,
我目前正在尝试应用最有效的方式在关系数据库中存储实体之间的“扩展”关系。
为了举例,假设我们有以下简化实体:
User-
Student(扩展User) -
Teacher(扩展User)
User 包含适用于Student 和Teacher 的属性。 Student 和 Teacher 都包含它们独有的自定义属性。
首先想到的是创建一个包含所有单一数据列的单个表(即除了一对多字段):
User
-------------
User ID
First name
Last name
Student class
Teacher office no.
Teacher description
...
然而,从存储的角度来看,这并不是很有效,因为:
- 大部分行将包含学生,少数教师
- 教师将拥有更多独特的列,这会浪费学生行中的空间
复制实体之间的关系会更有效:
User
-------------
User ID
First name
Last name
...
Student
-------------
User ID
Student class
...
Teacher
-------------
User ID
Teacher office no.
Teacher description
...
所以我的问题是:
- 上述担忧是否太过分了,即我们是否应该将存储效率留给数据库引擎?
- 就规范化而言,将实体拆分为 3 个表仍然可以吗?
- 如果这不是一个好方法,您建议如何处理关系数据库中的“扩展”关系?
谢谢。
【问题讨论】:
标签: database-design performance normalization