对于数据库作业,我必须为学校建模系统。部分要求是为员工、学生和家长建模信息。
在 UML 类图中,我将其建模为这三个类是一个人类型的子类型。这是因为他们都需要地址数据等信息。
我的问题是:如何在数据库 (mysql) 中对其建模?
目前的想法如下:
- 创建一个单一的人员表,其中包含每种类型的所有信息,并将包含大量空值,具体取决于存储的类型。 (我怀疑这是否会受到讲师的欢迎,除非我非常令人信服地论证了这个案子)。
- 具有三个引用子类型但其中两个将为空的外键的 person 表 - 事实上,我什至不确定这是否有意义或可能?
根据这个wikipage about django可以按如下方式在子类型上实现主键:
"id" integer NOT NULL PRIMARY KEY REFERENCES "supertype" ("id")
- 其他我没想到的...
所以对于那些以前在数据库中模拟过继承的人来说;你是怎么做到的?您推荐什么方法,为什么?
非常欢迎链接到文章/博客文章或以前的问题。
感谢您的宝贵时间!
更新
好的,谢谢大家的回答。我已经有一个单独的地址表,所以这不是问题。
干杯,
亚当
最佳答案
4 表工作人员、学生、家长和普通人员。 员工、学生和家长都有外键,每个外键都指向 Person(而不是相反)。
Person 具有标识此人的子类(即员工、学生或 parent )的字段。
编辑:
正如 HLGM 所指出的,地址应该存在于单独的表中,因为任何人都可能有多个地址。 (但是 - 我即将不同意我自己 - 你可能希望故意将地址限制为每个人一个,限制邮件列表的选择等)。
关于database - 在数据库中建模继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/417363/