数据建模有助于多角色系统

时间:2017-07-12 11:47:03

标签: database-design data-modeling

我已经坚持了很长一段时间,试过不同的设计,但总有一些事情发生了。我正在为艺术学校/舞蹈或健身中心设计一个数据库。 我只是想设计实体关系和信息。 假设我们有person课程 - 由以下类型的“学生”,“监护人”,“老师”组成。每个人可能不止一种。 未成年人将有一个监护人(父母,可能有多个)来保存联系信息,处理登记等。一些成年人也可能有监护人(比如老人或残疾人),老师也可以是另一个班级的学生/服务。

我一直在打破如何设置它(尤其是联系信息)而不破坏正常形式。我的最后一次尝试在下图中。 我不知道在哪里打联系信息,整件事似乎不对。

感谢任何帮助/指导。

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为你在你的模型中过度抽象了。将您的不同角色实现为具体类型而不是通用,将允许您为每个角色指定唯一属性,关系和约束。

考虑下表:

School table diagram

我将teacherstudent建模为person的具体子类型。它们可以重叠,即一个人可以是两种类型。录制学生时,需要student_number。录制教师时,会录制employee_number。我添加这些属性只是为了表明特定于子类型的属性。

Guardian被建模为人与人之间的多对多关系。这可以创建递归关联。根据您希望如何使用监护人,可以进一步完善关系。

我在person添加了联系信息。这意味着学生可以从监护人处获得不同的联系信息,您可以选择在查询中使用的内容。一个限制是每个人只能有一个addressphonemobileemail;你可以考虑支持每个的多个。

class有一个名字和一名教师,student_classclass之间存在多对多关系(student)。

要记住的一个总体限制是该模型不能解决时间问题。这些系统总是需要跟踪每学期,每学期或每年的课程,每年的学生注册等。

答案 1 :(得分:0)

这很困难的原因是关系数据库模型并不能完全支持继承。它当然不支持多重继承。

你可以在这个主题上找到关于SO的很多问题; this one是一个很好的起点。

@ reaanb的回答是"每个子类一个表"的一个例子。它是一个很好的模型,并为您提供了一个清晰的模式 - 但这意味着您的应用程序必须进行逻辑映射" person"到所有可能的子类,然后获取数据属性。

简而言之 - 没有干净的解决方案。尽可能保持一致,尽可能保持清洁,但不要期望完美。