关系数据:实体继承方法。最佳实践

时间:2010-07-18 09:40:14

标签: sql data-structures rdbms

如何在关系数据库中存储实体层次结构有几种方法

例如,有人实体(20个基本属性),学生实体(与人相同但存在几个新的特定字段),员工(与人相同但存在一些新字段)e.t.c。

当您建议使用(而不是使用)以下数据建模方法时:

  • 包含所有可能字段的大表+ personType标记字段(学生或员工)
  • 表继承
  • 一个包含XML字段(或可能是其他数据类型)的表,用于存储所有自定义字段
  • 其他东西,但也是关系......

提前谢谢!

3 个答案:

答案 0 :(得分:6)

数据库模拟事实,而不是对象,每个表应该模拟一组相对自包含的事实。这样做的结果是你的表应该是这样的:

person { person_id PK, name, dob, ... }
student { person_id PK FK(person.person_id), admission_id, year_started, ... }
employee { person_id PK FK(person.person_id), salary_bracket, ... }

另一个后果是,学生也可以是一名雇员,这可能比继承图更接近现实生活。

答案 1 :(得分:3)

查看hibernate inheritance mapping docs。在那里,您可以找到三种常用方法以及每种方法的优缺点列表。

答案 2 :(得分:0)