垒球联赛的数据库建模

时间:2011-03-14 19:09:19

标签: sql sql-server

我正在建立一个用于垒球联盟网站的数据库。我对数据库建模没有经验,而且我对未来的问题很难。

现在我有以下表格:

玩家表(player_id,姓名,性别,电子邮件,team_id)

球队表(team_id,名称,队长[player_id],logo,wins_Regular_season,loss_regular_season)

regular_season表(game_id,周,日期,主页[team_id],离开[team_id],home_score,away_score,rain_date)

季后赛桌(pgame_id,日期,主场[team_id],客场[team_id],home_score,away_score,winnerTo [pgame_id],loserTo [pgame_id])

为了使数据在季节之间保持不变,但是如果我也有一种简单的方法来访问数据:

A)在表格中包含年份列,然后按年度过滤我的查询? B)每年创建新表? C)做一些更有意义的事情,但我想不到。

4 个答案:

答案 0 :(得分:3)

这种设计不仅对未来不利。关于过去也是错误的。你没有以适当的方式保持历史。

让我们假设玩家改变了团队:这将如何适应这种设计?得到那种信息应该很容易......

这样做的最佳方式(恕我直言)也将赛季表示为一个实体,作为一个具体的表格。然后你应该在每个关系中复制这些信息。例如,玩家不仅仅属于一个团队的意思:他属于特定赛季的球队 ,并且在赛季变化时可能属于另一支球队。

OTOH,我认为将regular_seasonplayoff保持为不同的表是不明智的:通过添加某种标志以便保留该信息,它们可以很容易地合并为一个。

编辑这就是我的意思:

enter image description here

  • 请注意,有一个Season表。
  • Player属于Team a Season
  • 无需复制任何内容。一个团队在数据库中只有 ONE 记录;玩家只会与 ONE 记录相关联。
  • 我做了 NOT 设计Playoff表,因为我认为它不应该存在。如果OP不同意,只需添加即可。

通过这种方式,您可以跟踪所有季节,而无需复制整个数据库。我认为这也比使用year列更好,这个列没有意义,并且不容易受到约束(就像外键一样)。

但是,请随意不同意。

答案 1 :(得分:2)

标准方法是将年份列添加到表中。这样,您可以使用选择查询或视图轻松调用过去。 SQL Server对此有很好的支持。我已经处理了另一条路线的清理工作,经过几年的数据累积后,它并不漂亮。

答案 2 :(得分:0)

我会使用选项A并在赛季表和季后赛表中有一个年级列。

答案 3 :(得分:0)

您已有一个日期列,您可以使用它来查找年份

SELECT * FROM regular_season WHERE YEAR(date) = 2011