我目前在足球資料庫中有以下三個表:
teams(name)
season(name, beginning, end)
game(id, Date, season, hometeam, awayteam, HomeTeamScore, AwayTeamScore)
(hometeam, awayteam and season are foreign keys)
現在我想要一個新的表格,我可以在上面記錄每支球隊的進球數和失球數,以及他們每個賽季的得分(每場平局一個,每場勝利三個)。這樣就可以輕松獲得排名。
我曾想過制作這樣的表格:
stats(season, team, goalsscored, goalsconcedded, points)
然后我也會在每次插入新游戲時更新它。該表將包含每個團隊 賽季組合的一行。我不確定這是最好的解決方案,因為我知道我正在引入冗余,但由于需要經常計算這些資訊,我認為它可能有用。我想創建一個觸發器來更新此資訊,但我真的不知道如何執行此操作:我必須更新統計表中的兩行,具體取決于哪些團隊正在玩該游戲,并且取決于事實他們在主場或客場比賽我需要更新那些具有不同價值觀的人。理想情況下,如果球隊還沒有被插入到比賽所指的賽季,這個觸發器應該在這個新表中創建一個條目,但我什至不確定這種情況在 mysql 中是否可能。我知道我沒有提供我做過的任何測驗,但這是因為我真的無法在網上找到類似的請求,并且迫切需要這個觸發器(或者更普遍的是能夠輕松查詢請求的資訊)。另外,如果有人對如何處理這種情況有更好的想法,請隨時向我提出建議!我希望已經足夠清楚,并且非常感謝一些幫助。
uj5u.com熱心網友回復:
我認為你應該考慮這樣的事情:
Teams(id,name)
Seasons(id, year,begin_date,end_date)
Games(id, date, season (foreign key), hometeam (foreign key), awayteam (foreign key), HomeTeamScore, AwayTeamScore)
這也是次優的。以我的拙見,您可以像這樣做得更好
Teams(id,name)
Seasons(id, year,begin_date,end_date)
Matches(id, date, season (foreign key), home_team (foreign key), away_team (foreign key))
Goals(id,team,game,player?)
目標表將用于記錄每個目標,然后您可以從那里構建比賽結果,避免“HomeTeamScore”和“AwayTeamScore”欄位。
至于 Stats 表,您需要知道誰贏得了積分,所以讓我們堅持我們的最后一組表:
Teams(id,name)
Seasons(id, year,begin_date,end_date)
Matches(id, date, season (foreign key), home_team (foreign key), away_team (foreign key), status)
Goals(id,team,game,player?)
Matches 中的狀態欄位值可以是:['1','X','2']
- 1 - 主隊獲勝
- X - 平局
- 2 - 客隊獲勝
通過這種方式,您可以輕松地使用所有東西來計算您的統計資料,例如對于 ID 為 12 的團隊:
Select * from Matches where home_team = 12 and result = '1';
Select * from Matches where away_team = 12 and result = '2';
Select * from Matches where home_team = 12 or away_team=12 and result='X';
您可以以此為起點,使用 group by 和 group 函式來構建稍微復雜的查詢來計算團隊統計資料。一旦您設法創建這樣的查詢,我建議使用視圖
順便說一下,您要執行的這些不是繁重的查詢,并且您不一定需要觸發器,只需首先考慮良好的資料庫設計!
uj5u.com熱心網友回復:
比使用觸發器維護冗余資料更容易的是只擁有一個視圖;這只是聯合的基本總和:
create view stats as (
select season, team, sum(goalsscored) goalsscored, sum(goalsconcedded) goalsconcedded, sum(points) points
from (
select season, hometeam team, HomeTeamScore goalsscored, AwayTeamScore goalsconcedded,
case when HomeTeamScore > AwayTeamScore then 3 when HomeTeamScore=AwayTeamScore then 1 else 0 end points
from game
union all
select season, awayteam team, AwayTeamScore goalsscored, HomeTeamScore goalsconcedded,
case when AwayTeamScore > HomeTeamScore then 3 when AwayTeamScore=HomeTeamScore then 1 else 0 end points
from game
) games
group by season, team
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417202.html
標籤:
