在体育数据库中设计时间表

时间:2015-09-28 21:43:14

标签: database ms-access database-design relational-database

我会尝试尽可能具体,但我无法概念化问题。作为一个爱好,我正在尝试设计一个NFL数据库,该数据库采用原始统计数据并将其存储在未来的幻想联盟分析评估中。我想看到的主要事情之一是,某些球员/球队是否能够在特定球队中表现出色以及哪些防守队员可以传球/跑动。我遇到的问题是尝试设计计划/事件表。我目前的模型如下。

TEAMS
TeamID, Team

SCHEDULE
ScheduleID, TeamID, OpponentID, Season, Week, Home_Away, PointsFor, PointsAgainst

在这种情况下,我将复制每个游戏,但是当我使用事件表我使用TeamAway和TeamHome时,我发现我的查询无法运行,因为我必须查询AwayTeam和HomeTeam以查找特定团队的事件

一般情况下,虽然我无法使用查询来处理从表到表的两个关系,即使在调度表中,我的查询也不起作用。

我还考虑删除团队表,只为团队和对手字段存储NE,PIT等,所以我不必处理回到团队表的交叉关系。

我如何设计这个,所以我没有运行TeamID = OpponentID和TeamID的查询?

我在MS Access中这样做。

修改

我遇到的问题是当我查询两个表时:团队(TeamID,团队)和事件(TeamHomeID,TeamAwayID),它们在TeamID之间建立了关系 - TeamHomeID和TeamID - TeamWayID我遇到了构建查询的问题ms访问。

SQL看起来像:

SELECT Teams.ID, Teams.Team, Event.HomeTeam
    FROM Teams INNER JOIN (Event INNER JOIN Result ON Event.ID = Result.EventID)    
    ON (Teams.ID = Result.LosingTeamID) AND (Teams.ID =   Result.WinningTeamID) 
    AND (Teams.Team = Event.AwayTeam) AND (Teams.Team = Event.HomeTeam);

正在寻找拥有失败球队和胜利球队ID(不存在)的球队。

我想我可能已经解决了这个问题。我没有意识到数据库设计中的关系只是默认值,而在“查询”构建器中我可以更改构建特定查询的连接。我通过删除返回的SQL语句的所有AND部分来发现这一点,并且能够返回所有奖金团队的名称。

1 个答案:

答案 0 :(得分:1)

这是一个有趣的概念 - 也是一种良好的做法。

首先 - 听起来您需要缩小您想要的确切数据类型,以便了解要存储的内容。我的意思是,地狱,存储天气状况怎么样?

我会保留团队,但我也会添加城市(因为团队可以切换城市)。

我会使用GameID,HomeTeamID,AwayTeamID,ScheduleDate等列保留游戏(时间表)。

我会有另一个表结果,包含ResultID,GameID,WinningTeamID,LosingTeamID,Draw(Y / N)。

数据看起来像

TeamID | TeamName | City
------------------------
  1    |   PATS   | NE
------------------------
  2    |  PACKERS | GB


GameID | HomeTeamID | AwayTeamID | ScheduleDate | Preseason
-----------------------------------------------------------
  1    |      1     |      2     |    1/1/2016  |     N

ResultID | GameID  | WinningTeamID | LosingTeamID  |  Draw
------------------------------------------------------------
  1      |    1    |      1        |      2        |   N

鉴于此,您可以轻松地为任何预定比赛和日期提供任何W / L / D,您可以轻松SUM一支球队获胜,他们在主场,客场,季前赛或常规赛期间获胜,他们对特定球队的胜利等等。

我想如果你想获得真正的技术,你甚至可以创建一个存储SeasonID,StartDate,EndDate的Season表。这样可以确保你100%能够分辨哪些游戏在哪个季节(在哪些日期之间)播放,从那里你可以推断出天气统计数据,无论玩家是否在该时间段内出局等等。