5

我想知道哪种方法更适合设计数据库?

我目前有一个大表(每行 97 列),其中可以引用查找表。

将一些列分组到较小的表中并添加关键列以引用整行不是更好吗?

4

3 回答 3

3

如果您将表格分成几个部分,您将需要额外的连接来获取单行的所有列 - 这将花费您的时间。

97 列并不多,真的 - 我见过超过 100 列。

这完全取决于您的数据是如何被使用的——如果你的行一直只有 97 列,并且需要 97 列——那么将它们分成不同的表几乎没有意义。

如果:

  • 您可以将一些“大”列(例如XMLVARCHAR(MAX))移动到一个单独的表中,如果您一直不需要这些列 -> 在这种情况下,您的“基本”行会变小并且您的基本表会表现得更好 -只要你不需要那些超大的列

  • 您可以将一些列移到一个单独的表中,这些列并不总是存在,例如,可能是“可选”的列并且仅存在于例如 20% 的行中 - 在这种情况下,您可能会为剩余的 80 行节省一些处理不需要这些列的情况的百分比。

于 2012-06-07T17:26:27.897 回答
0

最好将相关列分组到不同的表中。这将提高您的数据库的性能以及您作为程序员的易用性。您应该首先尝试找到列之间的所有不同关系,然后您应该尝试将所有内容分解为表格,同时牢记这些关系(使用主键、分叉键、引用等)。尝试将图表创建为这个http://www.simple-talk.com/iwritefor/articlefiles/354-image008.gif从那里拿走。

于 2012-06-07T17:25:53.450 回答
0

除非您的数据是非规范化的,否则最好将所有列保留在同一个表中。SQL Server 将各个表中的页面读入缓冲池。因此,即使访问的页面已经在缓冲池中,您也将承担每次访问的连接成本。如果您使用一个键在每个查询中仅访问几行数据,那么索引将在同一个表中的所有列上很好地为该查询提供服务。即使您将扫描大部分行(> 大表的 1%)但仅扫描 97 列中的少数列,您仍然最好将列保留在同一个表中,因为您可以使用覆盖的非聚集索引查询。但是,如果数据被严重非规范化,则对其进行规范化,根据定义,这会根据规范化规则将其分成许多表以消除冗余,

于 2012-06-07T23:02:38.037 回答