Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 如何在数据库中组织人员类型_Database Design - Fatal编程技术网

Database design 如何在数据库中组织人员类型

Database design 如何在数据库中组织人员类型,database-design,Database Design,我正在寻找解决这个数据库设计问题的最佳方法。我想我找到了一些很好的方法,但我不知道这是否是最好的方法。如果这对你有什么意义的话,我正在使用CakePHP 我的数据库是为音乐课而建的。我将所有人——无论是家长、学生、教师、管理员还是其他人——都列在一张名为“人”的表格中,如下所示: People id first_name last_name email created modified 现在我开始讨论的问题是如何确定一个人是教师、学生家长等。对我来说,为每个小组设立一个单独的表格是有意义的。比

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

“类型”可以是母亲、父亲、法定监护人、看护人、阿姨、祖母等。这种设计对我来说很有意义,但同时,它似乎需要大量的工作和表格来描述一些似乎更容易描述的东西。有更好的方法吗?我一直在猜测自己,并在想,有一个全新的表格只是为了给一个人贴上学生或老师的标签,或者什么似乎不过分的标签。

您描述了一个经典的子类型场景,其中
person
是您的超类型,您定义了子类型,包括:
student
teacher
家长
(真正的监护人),可能还有其他类型,如员工等

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

要对关系进行建模,您需要从业务规则的角度确定什么是重要的,以及在模式中实施这些业务规则需要做什么。如果您想要或需要挑剔,您可以决定在您的
家长
学生
表之间建立一个
监护人关系
表。这将有FK的每个人的子类型的问题,以及您的关系类型标志/代码/描述


或者,您可以只拥有一个
个人关系
表,它是两个
个人
记录的交集。您也可以在此处放置关系类型代码。这种方法更为宽松,但可能更易于维护。归根结底,这取决于您需要跟踪的关系类型以及它们对业务规则的重要性。

您需要为不同类型的人建立不同类型的关系,还是只需要一种通用关系就足够了?例如,老师和学生之间的关系和家长和学生之间的关系相比有什么特殊之处吗?我需要不同的关系。只是为了让我知道人们是谁。我需要知道,当我联系某人时,他们是母亲或祖母,或者只是要支付课程费用的人。我不需要额外的表格来解释父母或祖父母等的关系。我只需要知道付款人和学生是谁,以便进行实际计算。所有其他关系都将在“关系”表中定义,该表不需要任何计算,只用于联系人员。如何在personal_relationship表和两人记录之间进行交集?我不能在个人关系表中有两次个人id。。。这听起来是最好的方法,但我不知道该怎么做。@Brian-你可以很容易地让
个人id
两次,你只需要给每列一个不同的名字,比如
第一个人id
第二个人id
。使用FK约束将每个FK链接到
PERSON.PERSON\u id
。这应该不是问题,除非CakePHP中有一些约束要求所谓的“自然连接”(通过相等的列名连接)。@Brian您可能会发现这很有趣。你需要决定这些理由是否适用于你的情况。