我正在寻找解决此数据库设计问题的最佳方法。我想我发现了一些正常的东西,但我不知道它是否是最好的方法。我正在使用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
答案 0 :(得分:1)
您已经描述了一个经典的子输入方案,其中PERSON
是您的超类型,并且您已经定义了子类型,包括:STUDENT
,TEACHER
,PARENT
(真正的监护人) ,也可能是其他类型,如员工等。
通常,当您使用这种类型的子类型模型时,因为各种子类型都有自己独特的谓词,即属性或关系。
要建立关系模型,您需要从业务规则的角度决定什么是重要的,以及在架构中强加这些业务规则的价值。如果您想要或者需要挑剔,您可能决定使用GUARDIAN_RELATIONSHIP
表作为PARENT
和STUDENT
表之间的交集。这将有FK对每个人的子类型以及你的关系类型标志/代码/描述。
或者,您可以只有一个PERSONAL_RELATIONSHIP
表,它是两个PERSON
记录之间的交集。您也可以在此处输入关系类型代码。这种方法更宽松,但可能更容易维护。最后,它取决于您需要跟踪的关系类型以及它们对您的业务规则的重要性。