【问题标题】:Performance in database design数据库设计中的性能
【发布时间】:2014-09-24 10:15:57
【问题描述】:

我必须实现一个测试平台。我的数据库需要以下表格:StudentsTeachersAdminsPersonnel 等。我想知道在每个表中使用FirstNameLastName 是否更有效,或者使用另一个表Persons,并且每个其他表都使用@987654329 链接到这个表@。

就个人而言,我喜欢这种方式,虽然实现起来比较棘手,因为我认为它更简洁,尤其是从面向对象的角度来看。这会给数据库增加不必要的开销吗?

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

【问题讨论】:

标签: sql-server performance database-design overhead table-structure


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果提到的表格之间存在人员重叠,那么是的,您应该将它们分开到Persons 表格中。

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

    另一方面,如果每个角色都有自己独特的字段,那么您应该继续保持原样,并使用PersonID 的外键将这些表中的每一个分开。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        是的,这是构建数据库的一种非常糟糕的方式。 DB结构应该基于Normalizations来设计。

        请检查规范化表格。

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

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

        【讨论】:

          猜你喜欢
          • 2011-09-17
          • 2012-01-20
          • 1970-01-01
          • 2011-06-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-22
          相关资源
          最近更新 更多