【问题标题】:Performance in database design数据库设计中的性能
【发布时间】:2014-09-24 10:15:57
【问题描述】:
我必须实现一个测试平台。我的数据库需要以下表格:Students、Teachers、Admins、Personnel 等。我想知道在每个表中使用FirstName 和LastName 是否更有效,或者使用另一个表Persons,并且每个其他表都使用@987654329 链接到这个表@。
就个人而言,我喜欢这种方式,虽然实现起来比较棘手,因为我认为它更简洁,尤其是从面向对象的角度来看。这会给数据库增加不必要的开销吗?
不知道是否有助于提及我想使用 SQL Server 和 ADO.NET Entity Framework。
【问题讨论】:
标签:
sql-server
performance
database-design
overhead
table-structure
【解决方案2】:
如果提到的表格之间存在人员重叠,那么是的,您应该将它们分开到Persons 表格中。
如果您只跟踪每个Person 的角色(即Student 与Teacher 等),那么您可以考虑只使用以下三个表:Persons、Roles 和一个桥接表PersonRoles。
另一方面,如果每个角色都有自己独特的字段,那么您应该继续保持原样,并使用PersonID 的外键将这些表中的每一个分开。
【解决方案3】:
如果这些entities(即学生、教师、管理员和人员)的attributes(即名字、姓氏、性别等)完全相同,那么您可以为所有实体创建一个表添加PersonType 或Role 属性以区分每个人的角色。但是,如果实体有很多不同的属性,那么最好创建单独的表,否则您将遇到normalization 问题。
【解决方案4】:
是的,这是构建数据库的一种非常糟糕的方式。 DB结构应该基于Normalizations来设计。
请检查规范化表格。
尽量避免重复数据,否则查询会变慢。
主要问题是当您尝试获取与多于一个或两个表相关联的数据时。