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

Database 在体育数据库中设计时间表,database,ms-access,database-design,relational-database,Database,Ms Access,Database Design,Relational Database,我将尽可能具体,但我在概念化这个问题上遇到了困难。作为一种爱好,我正试图设计一个NFL数据库,该数据库将原始统计数据存储起来,以备将来对梦幻联赛分析进行评估。我想看到的主要事情之一是,某些球员/球队在对抗特定球队时是否表现出色,以及哪些防守可能会传球/跑动。我遇到的问题是如何设计时间表/事件表。我目前的模式如下 TEAMS TeamID, Team SCHEDULE ScheduleID, TeamID, OpponentID, Season, Week, Home_Away, PointsF

我将尽可能具体,但我在概念化这个问题上遇到了困难。作为一种爱好,我正试图设计一个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中执行此操作


编辑 我遇到的问题是,当我查询两个表时:Team(TeamID,Team)和Event(TeamHomeID,TeamAwayID),它们在TeamID-TeamHomeID和TeamID-TeamWayID之间建立了关系,我在ms Access中构建查询时遇到了问题

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语句的所有和部分发现了这一点,并且能够返回所有获奖团队的名称。

这是一个有趣的概念,也是一个良好的实践

首先—听起来您需要准确地缩小您想要的数据类型,以便知道存储什么。我是说,见鬼,储存天气状况怎么样

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

我会用GameID、HomeTeamID、AwayTeamID、ScheduleDate列保存游戏(时间表)

我将有另一个表Results,其中包含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
a球队获胜,他们在主场、客场、季前赛或常规赛期间的胜利,他们对特定球队的胜利,等等


我想,如果你想获得真正的技术性,你甚至可以创建一个存储季节ID、StartDate、EndDate的季节表。这将确保您100%能够知道在哪个赛季(在什么日期之间)进行了哪些比赛,并且从中可以推断天气统计数据,是否有球员在该时间段内缺席,等等。

我仍然无法访问的问题是,我正在同一张表之间进行多个连接。我一直觉得将一个表连接到另一个团队中的两个或多个字段是不合适的数据库设计。这总是发生在团队------>活动中,其中不可避免地有团队1和团队2。这可能真的没问题,我不确定。在这种情况下,MS Access在查询设计方面做得不好,因此SQL语句可能需要手工完成。也许我应该在postgresql这样更专业的网站上做这件事,这可能不是什么问题。你是说你不能在多个列上创建连接?我知道这在Access中有效。感谢您的回复。我可以加入。这些疑问似乎永远都不会正确。但至少我知道我离基地不远,我可以继续努力,所以这才是你真正的问题所在。这些疑问似乎永远都不会正确。您可以编辑您的问题并粘贴您的查询吗?