在数据库中建模继承

Ada*_*lor 5 database inheritance

对于数据库分配,我必须为学校建模系统.部分要求是为员工,学生和家长建模信息.

在UML类图中,我将其建模为这三个类是人类型的子类型.这是因为他们都需要有关地址数据等信息.

我的问题是:我如何在数据库(mysql)中对此进行建模?

到目前为止的想法如下:

  1. 创建一个单片人员表,其中包含每种类型的所有信息,并且根据存储的类型,将包含许多空值.(我怀疑除非我非常有说服力地辩论这个案子,否则这对讲师来说会很顺利).
  2. 一个带有三个外键的人员表,它引用了这些子类型但其中两个是空的 - 实际上我甚至不确定这是否有意义或者是否可能?
  3. 根据关于django的wikipage,可以在子类型上实现主键如下:

    "id" integer NOT NULL PRIMARY KEY REFERENCES "supertype" ("id")
  4. 我还没有想到的其他东西......

对于那些之前在数据库中建模继承的人; 你是怎么做到的?你推荐什么方法?为什么?

非常欢迎链接到文章/博客文章或以前的问题.

谢谢你的时间!

UPDATE

好的,谢谢大家的答案.我已经有一个单独的地址表,所以这不是问题.

干杯,

亚当

Bin*_*ier 5

4桌工作人员,学生,家长和人员为通用的东西.工作人员,学生和家长都有forign键,每个键都会返回Person(而不是相反).

人员有一个字段,用于标识此人的子类(即员工,学生或家长).

编辑:

正如HLGM所指出的,地址应该存在于一个单独的表中,因为任何人都可能有多个地址.(但是 - 我不同意自己 - 你可能希望故意将地址限制为每人一个,限制邮件列表的选择等).