0

SQL Server 2012 MVC3 EF4.3.1 代码优先项目。

我有一个TeacherStudent表具有一对多的关系。的TeacherId将用作帐号,因此它的编号需要与'sId分开。Student我想创建一个Person表(包含共享属性,例如First, Last, Phone, Email)以减少属性的冗余。Person也将与表具有一对多关系Address

我曾考虑过尝试使用 Table per Hierarchy 模型TeacherStudent从中继承,但 Id 集不会是分开的,我必须在表Person内部建立一对多的关系。Person我可以通过代码生成 ID,但内部一对多可行还是实用?

另一种情况是设置Person为一个子表,在 andTeacherPersonand 之间是一对一的StudentPerson但我不确定如何或是否可以在一张桌子上有两个单独的一对一。

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

谢谢

4

4 回答 4

2

Person另一种方法是在 a和Roletable 之间建立一对一的关系。Teacher并且Student只是这种安排中的角色。一个给定的Role可以通过许多Person实例来实现。

于 2012-07-05T17:02:52.997 回答
1

您还可以使用 IsTeacher 标志创建 Person 表。

于 2012-07-05T18:53:59.903 回答
0

我可以看到两种可能性:

一:与从 Person 基表继承的 Student 和 Teacher 一起去,不用担心“冗余”。这不是冗余,因为您将 Student 和 Teacher 而不是 Person 与 Person 相关联,因此在您的数据库和 DOM 中,Person 表和 Person 类对 Teacher 与 Student 的关系一无所知,它只知道它是一个人。教师和学生关系存储在各自的类型中,而不是人员类型。另外,查看每个类型的表而不是每个层次结构的表。在数据库中查找更加清晰明了,并且您不会在一个表中获得层次结构中每种类型的所有信息。

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

于 2012-07-05T19:00:33.100 回答
0

教师和学生是人的角色,而不是人的类型。你应该有一张 People 表格,一张 TeachCourse 表格表示一个人是一门课程的老师(在某些情况下是多个老师),一张 AssistCourse 表格表示哪些人作为学生上课。您可能会有人教授一门课程并协助另一门课程,而这在您的第一个版本中没有正确建模。

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

于 2012-07-05T19:31:17.200 回答