0

我必须实现一个测试平台。我的数据库需要以下表格:StudentsTeachersAdminsPersonnel其他。我想知道在这些表中的每一个中使用FirstNameand是否更有效,或者在另一个表中使用.LastNamePersonsPersonID

就个人而言,我喜欢这种方式,尽管实现起来比较棘手,因为我认为它更干净,特别是如果您从面向对象的角度来看它。这会给数据库增加不必要的开销吗?

不知道提及我想使用 SQL Server 和 ADO.NET Entity Framework 是否有帮助。

4

4 回答 4

1

正如您明确提到的 OO 并且您正在使用 EntityFramework 一样,也许值得从框架的工作方式来解决问题 - 而不是仅仅构建数据库结构然后尝试对其进行建模?

Entity Framework Code First Inheritance : Table Per Hierarchy 和 Table Per Type很好地介绍了您可以选择的各种策略。

至于向数据库添加不必要的开销的注释 - 我现在还不会担心。EF 通常是为了更快地构建产品,因为它必须处理更一般的情况,并不总是产生最有效的 SQL。如果在您的应用程序构建、工作和纠正之后性能出现问题,您可以重新访问并修复最低效的东西。

于 2014-08-01T09:08:29.507 回答
0

如果提到的表格之间有一个人重叠,那么是的,您应该将它们分开成一个Persons表格。

如果您只跟踪每个角色的角色Person(即Studentvs.Teacher等),那么您可能会考虑只使用以下三个表:PersonsRoles和桥接表PersonRoles

另一方面,如果每个角色都有自己独特的字段,那么您应该照常进行,并使用PersonID.

于 2014-08-01T09:00:53.363 回答
0

如果attributes这些(即学生、教师、管理员和人员)中的(即名字、姓氏、性别等)entities完全相同,那么您只需为所有添加PersonTypeRole属性的实体制作一个表格以区分每个人的角色. 但是,如果实体有很多不同的属性,那么最好创建单独的表,否则会遇到normalization问题。

于 2014-08-01T09:08:55.533 回答
-2

是的,这是构建数据库的一种非常糟糕的方式。数据库结构应基于规范化设计。

请检查规范化表格。

尽量避免重复数据,否则查询会变慢。

主要问题是当您尝试获取与一个或两个以上表相关联的数据时。

于 2014-08-01T08:59:41.177 回答