为更快的应用程序牺牲数据库标准?

时间:2013-11-06 13:02:07

标签: c# sql-server database performance normalization

在这种情况下,数据库标准在消除数据冗余方面。首先,在这种情况下,我不确定如何定义数据冗余。它通常定义为出现在多个表中的相同数据。但是,如果不将其显式保存到数据库冗余中,是否可以访问任何数据?请看以下示例:

有一个足球博彩数据库。有2个表:

  • betting_tickets
  • 投注

“betting_tickets”表用于保存整个投注票。 “投注”表用于保存比赛中的每个单独投注,因此该表中的每个单独投注(行)在“betting_tickets”表中引用来自其的特定投注票。以下是“下注”表格在缩短版本中的显示方式:

-----------------------------------------------------------------
| bet_id | ticket_id* |  home_club  |  away_club  | bet_outcome |
-----------------------------------------------------------------
|    1   |      1     |   Chelsea   |   Arsenal   |     Hit     |
-----------------------------------------------------------------
|    2   |      1     |  Tottenham  |    Stoke    |     Hit     |
-----------------------------------------------------------------
|    3   |      2     |    Fulham   |   Everton   |     Miss    |
-----------------------------------------------------------------
|    4   |      2     |  Liverpool  |   West Ham  |     Hit     |
-----------------------------------------------------------------
|    5   |      2     |  Sunderland |  Hull City  |     Hit     |
-----------------------------------------------------------------

缩小版中的“betting_tickets”表:

------------------------------
| ticket_id | ticket_outcome |
------------------------------
|     1     |      Hit       |
------------------------------
|     2     |      Miss      |
------------------------------

现在让我们说“赌注”表中有超过一百万条记录,“bet_tickets”大约有五分之一。如果我想知道因为只有1次错过的赌注错过了多少投注票,我必须循环超过一百万条记录,计算并检查它们是否只有1个游戏破坏了投注票。即使在C#中也会很慢的东西。但是,如果我要在“betting_tickets”表中列出一个列,其中列出了错过了多少投注或类似的投注,那么这不会大大提高我正在尝试执行的任务的速度吗?

此外,此列是否会被视为多余?即使数据没有出现在多个表中,它仍然是可以访问的数据,而不必占用数据库中自己的列。

如标签中所述,这是SQL Server和C#的情况。

0 个答案:

没有答案