在这种情况下,数据库标准在消除数据冗余方面。首先,我不确定在这种情况下如何定义数据冗余。它通常被定义为出现在多个表中的相同数据。但是,是否不需要显式地将其保存到数据库中就可以访问任何数据?举个例子:
有一个足球投注数据库。有2张桌子:
- betting_tickets
- 赌注
“betting_tickets”表用于保存整个投注单。“bets”表用于保存比赛中的每个单独投注,因此该表中的每个单独投注(行)都引用“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 |
------------------------------
现在让我们说“bets”表中有超过一百万条记录,“betting_tickets”大约是其中的五分之一。如果我想知道有多少投注票因为只有 1 次未投注而被错过,我必须遍历超过 100 万条记录,计算并检查它们是否是只有 1 场游戏破坏了投注票的记录。即使在 C# 中也会很慢。但是,如果我要在“betting_tickets”表中创建一个列来说明错过了多少赌注或类似的东西,这不会极大地提高我正在尝试执行的任务的速度吗?
另外,这个专栏会被认为是多余的吗?即使数据没有出现在多个表中,它仍然是可以访问的数据,而不必占用数据库中自己的列。
如标签中所述,这是 SQL Server 和 C# 的情况。