对于数据库分配,我必须为学校建模系统.部分要求是为员工,学生和家长建模信息.
在UML类图中,我将其建模为这三个类是人类型的子类型.这是因为他们都需要有关地址数据等信息.
我的问题是:我如何在数据库(mysql)中对此进行建模?
到目前为止的想法如下:
创建一个单片人员表,其中包含每种类型的所有信息,并且根据存储的类型,将包含许多空值.(我怀疑除非我非常有说服力地辩论这个案子,否则这对讲师来说会很顺利).
一个带有三个外键的人员表,它引用了这些子类型但其中两个是空的 - 实际上我甚至不确定这是否有意义或者是否可能?
根据关于django的wikipage,可以在子类型上实现主键如下:
"id" integer NOT NULL PRIMARY KEY REFERENCES "supertype" ("id")
我还没有想到的其他东西......
对于那些之前在数据库中建模继承的人; 你是怎么做到的?你推荐什么方法?为什么?
非常欢迎链接到文章/博客文章或以前的问题.
谢谢你的时间!
UPDATE
好的,谢谢大家的答案.我已经有一个单独的地址表,所以这不是问题.
干杯,
亚当
4桌工作人员,学生,家长和人员为通用的东西.工作人员,学生和家长都有forign键,每个键都会返回Person(而不是相反).
人员有一个字段,用于标识此人的子类(即员工,学生或家长).
编辑:
正如HLGM所指出的,地址应该存在于一个单独的表中,因为任何人都可能有多个地址.(但是 - 我不同意自己 - 你可能希望故意将地址限制为每人一个,限制邮件列表的选择等).