0

我正在寻找解决这个数据库设计问题的最佳方法。我想我找到了一些很好的方法,但我不知道这是否是最好的方法。如果这对您意味着什么,我正在使用 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

“类型”可以是母亲、父亲、法定监护人、看护人、阿姨、祖母等。这种设计对我来说很有意义,但同时它似乎需要相当多的工作和表格来描述看起来应该的东西更容易描述。有一个更好的方法吗?我不断地猜测自己,并认为拥有一张全新的桌子只是为了将一个人标记为学生或老师,或者以某种方式似乎不太过分。

4

1 回答 1

2

您已经描述了一个经典的子类型场景,PERSON您的超类型在哪里,并且您已经定义了子类型,包括:、、STUDENT(真正的监护人)以及可能还有其他类型,例如员工等。TEACHERPARENT

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

要为您的关系建模,您需要从业务规则的角度来决定什么是重要的,以及在您的模式中强加这些业务规则的值得做的事情。如果您想要或需要挑剔,您可能会决定有一个表,它是您的和表GUARDIAN_RELATIONSHIP之间的交集。这将对每个相关人员子类型以及您的关系类型标志/代码/描述具有 FK。PARENTSTUDENT

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

于 2012-04-11T23:52:23.980 回答