如果标题不清楚,请注意。我对如何规划数据库模式感到有点困惑,因为我的数据库设计技能水平要求属于高级版本:)我真的可以在这里使用一些帮助。无论如何,这里...... ...
我需要跟踪球队的比赛详情。为简单起见,我想说我需要跟踪比赛日期,结果以及参加比赛的球队。现在,我如何设计我的表,以便确保返回所有相关数据,而不必保留相同匹配的多个记录。我不确定我是否要清楚解释,所以下面是一个例子。
match_id team1 team2 result
________ ________ ________ ________
1 Arsenal Chelsea 5-3
2 Manchester Utd Arsenal 1-0
3 Liverpool Newcastle 2-0
4 Arsenal Everton 1-0
根据这些数据,如果我搜索阿森纳队比赛的match_ids,我应该得到以下结果, 1,2,4。
现在,在我所知道的基本设计中,我通常会搜索团队名称中匹配的团队名称并返回结果。但是这里的团队名称可以在两个不同的列中,两者都可以相关。所以,我需要决定设计水平还是可以通过某种查询来完成的事情。
(注意:根据我的要求,将球队作为主场/客场进行存储不是一种选择。)
答案 0 :(得分:2)
你可以只查询两列,这不是问题:
select match_id
from matches
where team1 = 'Arsenal' or team2 = 'Arsenal';
(你也可以通过将团队放在他们的单独表中并将他们的id留在匹配表中来规范化这个模式,但是这个变化不大,你仍然需要查询两个列。阅读数据库规范化,任何SQL书都涵盖了这个)。
答案 1 :(得分:1)
如果每场比赛总共有两支队伍,那么我认为你在这里做得很好,在查询特定团队时,你会想要搜索一列或另一列(SELECT match_id FROM matches WHERE team1 = "?" OR team2 = "?"
)。
但需要注意的是:我肯定会将得分分成两列:
match_id team1 team2 score1 score2
________ ______________ _________ ______ ______
1 Arsenal Chelsea 5 3
2 Manchester Utd Arsenal 1 0
3 Liverpool Newcastle 2 0
4 Arsenal Everton 1 0
这样,如果需要,您可以稍后查询分数。 (例如Big wins = SELECT match_id FROM matches WHERE ABS(score1 - score2) > 3;
)
如果每场比赛有两支以上的球队,那么你拥有的另一个选项应该更具可扩展性。如果是这种情况,那么您可能希望删除match_id上的唯一性约束,并将团队/得分列从2减少到1:
match_id team score
________ ________ ____
1 Arsenal 5
1 Chelsea 3
2 Manchester Utd 1
2 Arsenal 0
3 Liverpool 2
3 Newcastle 0
4 Arsenal 1
4 Everton 1
当然,你肯定会想要把塞尔吉奥的建议放在单独的表格中。 “团队”可能会有不同的属性(家乡,教练名称等),你不会想要复制这些数据。
答案 2 :(得分:0)
这将为您提供所需的结果,但也可能有更好的设计。
Select *
from table
where (team1 = 'ARSENAL' or Team2 = 'ARSENAL')
您可能希望将Team1Score Team2Score等分数分开,否则您无法轻松地使用它们进行数学计算。
答案 3 :(得分:0)
对于明星我不会存储时间名称,我认为如果将时间存储在其他表中并且linq然后通过id存储它会更好。
然后你可以创建一个包含列id,匹配id和团队ID的表,然后只搜索该表中的团队ID!
答案 4 :(得分:0)
您可以使用此查询,对您的程序没问题:
选择YOUR_ID_FIELDS 来自YOUR_TABLE_NAME 其中YOUR_FIELD_NAME(team1)='阿森纳'或YOUR_FIELD_NAME(team2)='阿森纳';
和exmale(切尔西) 选择YOUR_ID_FIELDS 来自YOUR_TABLE_NAME 其中YOUR_FIELD_NAME(team1)='切尔西'或YOUR_FIELD_NAME(team2)='切尔西';