设计大型实体的最佳实践

时间:2012-10-15 14:31:26

标签: sql-server database database-design

设计一个包含100多个属性的Employee表这样的大型实体的最佳做法是什么?

我应该将它们保存为包含100列的单个表,还是应该将它们拆分为1..1关系,然后在我的代码中编写Employee对象?

有什么意见吗?各种方法的优缺点是什么?

2 个答案:

答案 0 :(得分:2)

这里的答案不在于Employees表,而在于更广泛的数据库设计。如果所有属性肯定是1-1,那么我肯定会有一个实体。当您进入物理设计时,SQL Server可以使用优化,例如对于具有许多NULL值的列的SPARSE列。

我假设您正在进行规范化和实体关系图的过程。如果你是,那么我建议你看看SuperType / SubType方法,员工通常是一个很好的候选人。

在这种方法中(例如),您可能有一个“联系人”表,其中包含名字,姓氏,电话号码等。然后这将链接到您的员工表,您的客户表,您的供应商表,您的员工表将只包含员工特有的属性,例如员工编号,开始日期等。

这有几个好处。

  • 首先,如果员工也是客户,那么您可以减少数据冗余。
  • 您可能会获得更好的压缩比。这是因为当您的列数较少时,页面上会存储更多行,这意味着名称“Smith”将更频繁地出现在同一页面上。
  • 从主数据的角度来看,如果引入了电子邮件列数据类型的公司标准,那么您可以在一个地方而不是三个地方进行更改。 (原谅这里略显人为的例子,但希望它说明了这一点)。
  • 由于超级表和子表的列数较少,因此可以单独更快地读取每个列。如果加入相同的查询,并放在单独的光盘上,则可以并行读取2个表。

答案 1 :(得分:0)

尝试阅读Star-Schema和Snowflake-Schema。这些是在设计数据仓库模式时使用的术语,优点和缺点可能与您在此处面临的非常相似。

http://en.wikipedia.org/wiki/Star_schema

http://en.wikipedia.org/wiki/Snowflake_schema

http://www.diffen.com/difference/Snowflake_Schema_vs_Star_Schema