如何构建数据库中的人员类型

时间:2012-04-11 21:20:38

标签: database-design

我正在寻找解决此数据库设计问题的最佳方法。我想我发现了一些正常的东西,但我不知道它是否是最好的方法。我正在使用CakePHP,如果这对您来说意味着什么。

我的数据库是为音乐课程而制作的。我有所有人,无论他们是父母,学生,老师,行政人员还是下面列出的人员中的任何人:

People
id first_name last_name email created modified

现在我开始遇到的问题是如何识别一个人作为教师,学生家长等。我有理由为每个小组分别设置一个表。例如

Teachers
id person_id

Students
id person_id

Payers
id person_id

这种方式理论上教师也可以是学生。支付课程费用的“付款人”也可以是学生,名单也会继续。

现在我还需要知道一个人和一个学生之间的关系。所以我会有一个像这样的单独的表:

Relationships:
id person_id student_id type
“type”可以是母亲,父亲,法定监护人,看护人,阿姨,祖母等。这种设计对我来说很有意义,但与此同时,似乎有一些工作和表格来形容似乎喜欢它应该更容易描述。有一个更好的方法吗?我继续猜测自己,并且想要有一个全新的表格,只是为了将一个人标记为学生或老师,或者某种方式看起来有点过分。

1 个答案:

答案 0 :(得分:1)

您已经描述了一个经典的子输入方案,其中PERSON是您的超类型,并且您已经定义了子类型,包括:STUDENTTEACHERPARENT(真正的监护人) ,也可能是其他类型,如员工等。

通常,当您使用这种类型的子类型模型时,因为各种子类型都有自己独特的谓词,即属性或关系。

要建立关系模型,您需要从业务规则的角度决定什么是重要的,以及在架构中强加这些业务规则的价值。如果您想要或者需要挑剔,您可能决定使用GUARDIAN_RELATIONSHIP表作为PARENTSTUDENT表之间的交集。这将有FK对每个人的子类型以及你的关系类型标志/代码/描述。

或者,您可以只有一个PERSONAL_RELATIONSHIP表,它是两个PERSON记录之间的交集。您也可以在此处输入关系类型代码。这种方法更宽松,但可能更容易维护。最后,它取决于您需要跟踪的关系类型以及它们对您的业务规则的重要性。