SQL Server 2012 MVC3 EF4.3.1 Code First项目。
我有一个Teacher
和Student
表,其中包含一对多的关系。 Teacher
的表Id
将用作帐号,因此其Id
编号需要与Student
分开。我想创建一个Person
表(包含First, Last, Phone, Email
等共享属性)以减少属性的冗余。 Person
也与Address
表格有一对多的关系。
我想过尝试一个每个层次结构表的模型,其中Teacher
和Student
继承自Person
但是Id集合不会是单独的,我必须有一个在Person
表内部的许多关系。我可以通过代码生成ID,但是对于许多可行或实用的内部一个?
另一种方案是将Person
设置为子表,其中Teacher
和Person
之间的一对一以及Student
和{{之间的一对一1}}但是我不确定如何或者是否有可能在桌子上有两个单独的一对一。
是否有实用的方法来做我想要的或者我不应该担心冗余而不使用Person
表?如果我走了那条路线,那么Person
表(Address
和Teacher-Address
可能会有两个独立的一对多关系吗?或者就此而言,一对多(Student-Address
,教师可能有额外的送货地址)和一对一(Teacher-Address
)?
谢谢
答案 0 :(得分:2)
另一种方法是在Person
和Role
表之间保持一对一。 Teacher
和Student
仅仅是这种安排中的角色。许多Role
个实例都可以完成给定的Person
。
答案 1 :(得分:1)
您还可以使用IsTeacher标志执行Person表。
答案 2 :(得分:0)
我可以看到两种可能性:
一:与你的学生和教师一起继承人的基础表而不用担心'冗余'。这不是冗余,因为您将学生和教师与人员联系起来,因此在您的数据库和DOM中,Person表和Person类对于师生关系一无所知,它只知道它是一个人。教师和学生的关系存储在各自的类型中,而不是人员类型。另外,请查看每种类型的表,而不是每个Heiarchy的表。在数据库中看起来更干净,更清晰,并且您无法在一张表格中获得每种类型的所有信息。
二:创建一个表,专门保存学生和教师共享的信息,并分别与学生和教师表相关。你可以称之为“ContactInformation”。
答案 3 :(得分:0)
作为一名教师和成为一名学生是人的角色,而不是人的角色。 您应该有一个人员表,一个表TeachCourse表示一个人是一个课程的老师(在某些情况下是多个教师),一个表辅助课程,说明哪些人作为学生参加课程。您可能有人教授课程并协助其他课程,而且您的第一个版本没有正确建模。
您还可以为人们创建一个ContactInformation或ShippingInformation表来指定他们的所有数据(有些人可能有多部手机或电子邮件)。