表上的多个关系

时间:2012-07-05 16:59:47

标签: asp.net-mvc-3 database-design ef-code-first

SQL Server 2012 MVC3 EF4.3.1 Code First项目。

我有一个TeacherStudent表,其中包含一对多的关系。 Teacher的表Id将用作帐号,因此其Id编号需要与Student分开。我想创建一个Person表(包含First, Last, Phone, Email等共享属性)以减少属性的冗余。 Person也与Address表格有一对多的关系。

我想过尝试一个每个层次结构表的模型,其中TeacherStudent继承自Person但是Id集合不会是单独的,我必须有一个在Person表内部的许多关系。我可以通过代码生成ID,但是对于许多可行或实用的内部一个?

另一种方案是将Person设置为子表,其中TeacherPerson之间的一对一以及Student和{{之间的一对一1}}但是我不确定如何或者是否有可能在桌子上有两个单独的一对一。

是否有实用的方法来做我想要的或者我不应该担心冗余而不使用Person表?如果我走了那条路线,那么Person表(AddressTeacher-Address可能会有两个独立的一对多关系吗?或者就此而言,一对多(Student-Address,教师可能有额外的送货地址)和一对一(Teacher-Address)?

谢谢

4 个答案:

答案 0 :(得分:2)

另一种方法是在PersonRole表之间保持一对一。 TeacherStudent仅仅是这种安排中的角色。许多Role个实例都可以完成给定的Person

答案 1 :(得分:1)

您还可以使用IsTeacher标志执行Person表。

答案 2 :(得分:0)

我可以看到两种可能性:

一:与你的学生和教师一起继承人的基础表而不用担心'冗余'。这不是冗余,因为您将学生和教师与人员联系起来,因此在您的数据库和DOM中,Person表和Person类对于师生关系一无所知,它只知道它是一个人。教师和学生的关系存储在各自的类型中,而不是人员类型。另外,请查看每种类型的表,而不是每个Heiarchy的表。在数据库中看起来更干净,更清晰,并且您无法在一张表格中获得每种类型的所有信息。

二:创建一个表,专门保存学生和教师共享的信息,并分别与学生和教师表相关。你可以称之为“ContactInformation”。

答案 3 :(得分:0)

作为一名教师和成为一名学生是人的角色,而不是人的角色。 您应该有一个人员表,一个表TeachCourse表示一个人是一个课程的老师(在某些情况下是多个教师),一个表辅助课程,说明哪些人作为学生参加课程。您可能有人教授课程并协助其他课程,而且您的第一个版本没有正确建模。

您还可以为人们创建一个ContactInformation或ShippingInformation表来指定他们的所有数据(有些人可能有多部手机或电子邮件)。