代码之家  ›  专栏  ›  技术社区  ›  Andrew Florko

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

  •  5
  • Andrew Florko  · 技术社区  · 14 年前

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

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

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

    提前谢谢!

    3 回复  |  直到 14 年前
        1
  •  6
  •   Marcelo Cantos    14 年前

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

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

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

        2
  •  3
  •   Alexander Torstling    14 年前
        3
  •  0
  •   Ying    14 年前

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

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