1

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

我应该将它们保留为具有 100 列的单个表,还是应该将它们拆分为 1..1 关系,然后在我的代码中组合 Employee 对象?

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

4

2 回答 2

2

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

我假设您目前正在经历规范化和实体关系图的过程。如果您是,那么我建议您查看 SuperType/SubType 方法,Employees 通常是一个很好的候选者。

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

这有几个好处。

  • 首先,例如,如果员工也是客户,那么您可以减少数据冗余。
  • 您可能会获得更好的压缩比。这是因为当您的列数越少时,页面上存储的行数就越多,这意味着名称“Smith”将更频繁地出现在同一页面上。
  • 从主数据的角度来看,如果引入了电子邮件列数据类型的公司标准,那么您可以在一个地方更改它,而不是三个地方。(请原谅这里稍微做作的例子,但希望它能说明这一点)。
  • 由于 Super Table 和 Sub Table 的列都较少,因此可以更快地单独读取每个列。如果加入同一个查询,并放置在不同的磁盘上,则可以并行读取 2 个表。
于 2012-10-15T14:47:46.350 回答
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

于 2012-10-15T14:58:57.250 回答