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

Sql 关系数据:实体继承方法。最佳做法,sql,data-structures,rdbms,Sql,Data Structures,Rdbms,有几种方法可以在关系数据库中存储实体层次结构 例如,有person实体(20个基本属性)、student实体(与person相同,但存在几个新的特定字段)、employee(与person相同,但存在一些新字段)e.t.c 当您建议使用(或不使用)以下数据建模方法时: 一个包含所有可能字段的大表+personType标记字段(学生或员工) 表继承 一个带有XML字段(或者可能是另一种数据类型)的表来存储所有自定义字段 一些其他的但也是相关的 提前谢谢你 数据库建模的是事实,而不是对象,每个表

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

例如,有person实体(20个基本属性)、student实体(与person相同,但存在几个新的特定字段)、employee(与person相同,但存在一些新字段)e.t.c

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

  • 一个包含所有可能字段的大表+personType标记字段(学生或员工)
  • 表继承
  • 一个带有XML字段(或者可能是另一种数据类型)的表来存储所有自定义字段
  • 一些其他的但也是相关的

提前谢谢你

数据库建模的是事实,而不是对象,每个表都应该建模一组相对独立的事实。这样做的结果是,您的表应该如下所示:

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

另一个结果是,学生也可以是员工,这可能比继承图更接近现实生活。在这里,您可以找到三种常见的方法以及每种方法的优缺点列表。

如果您使用ORM来实现您的类,您使用的ORM工具将为您提供选项,通常有两种选项,一个类一个表或一个父类一个表以及每个子类的每个表。我正在使用Devexpress.com上的XPO,一个ORM框架。它提供了这两种选择

如果您使用ORM,恐怕没有其他通用选项