database - 在数据库中建模继承

标签 database inheritance

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

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

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

目前的想法如下:

  1. 创建一个单一的人员表,其中包含每种类型的所有信息,并将包含大量空值,具体取决于存储的类型。 (我怀疑这是否会受到讲师的欢迎,除非我非常令人信服地论证了这个案子)。
  2. 具有三个引用子类型但其中两个将为空的外键的 person 表 - 事实上,我什至不确定这是否有意义或可能?
  3. 根据这个wikipage about django可以按如下方式在子类型上实现主键:

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

所以对于那些以前在数据库中模拟过继承的人来说;你是怎么做到的?您推荐什么方法,为什么?

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

感谢您的宝贵时间!

更新

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

干杯,

亚当

最佳答案

4 表工作人员、学生、家长和普通人员。 员工、学生和家长都有外键,每个外键都指向 Person(而不是相反)。

Person 具有标识此人的子类(即员工、学生或 parent )的字段。

编辑:

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

关于database - 在数据库中建模继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/417363/

相关文章:

c# - Xaml 使用隐藏属性

delphi - 如何覆盖继承的属性?

mysql - 如何从 csv 文件将外键分配给 MySQL 表?

php - 使用 Curl 获取验证码并发送数据并获取结果

sql - 更新 SQL 数据,合并列

python - 为什么继承 `bitstring.BitArray` 时,子构造函数的第一个参数在父构造函数中使用?

c++ - 派生类和模板参数

javascript - 在javascript中动态扩展一个类

php - PDO - 调用非对象的成员函数 fetch()

.net - 将 nNHibernate 与发出的代码一起使用