我正在建立一个用于垒球联盟网站的数据库。我对数据库建模没有经验,而且我对未来的问题很难。
现在我有以下表格:
玩家表(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)做一些更有意义的事情,但我想不到。
答案 0 :(得分:3)
这种设计不仅对未来不利。关于过去也是错误的。你没有以适当的方式保持历史。
让我们假设玩家改变了团队:这将如何适应这种设计?得到那种信息应该很容易......
这样做的最佳方式(恕我直言)也将赛季表示为一个实体,作为一个具体的表格。然后你应该在每个关系中复制这些信息。例如,玩家不仅仅属于一个团队的意思:他属于特定赛季的球队 ,并且在赛季变化时可能属于另一支球队。
OTOH,我认为将regular_season
和playoff
保持为不同的表是不明智的:通过添加某种标志以便保留该信息,它们可以很容易地合并为一个。
编辑这就是我的意思:
Season
表。Player
属于Team
a Season
。Playoff
表,因为我认为它不应该存在。如果OP不同意,只需添加即可。通过这种方式,您可以跟踪所有季节,而无需复制整个数据库。我认为这也比使用year
列更好,这个列没有意义,并且不容易受到约束(就像外键一样)。
但是,请随意不同意。
答案 1 :(得分:2)
标准方法是将年份列添加到表中。这样,您可以使用选择查询或视图轻松调用过去。 SQL Server对此有很好的支持。我已经处理了另一条路线的清理工作,经过几年的数据累积后,它并不漂亮。
答案 2 :(得分:0)
我会使用选项A并在赛季表和季后赛表中有一个年级列。
答案 3 :(得分:0)
您已有一个日期列,您可以使用它来查找年份
SELECT * FROM regular_season WHERE YEAR(date) = 2011