Rumah > Soal Jawab > teks badan
P粉0186537512023-09-03 09:55:42
Saya rasa anda harus mempertimbangkan struktur seperti ini:
Teams(id,name) Seasons(id, year,begin_date,end_date) Games(id, date, season (外键), hometeam (外键), awayteam (外键), HomeTeamScore, AwayTeamScore)
Struktur ini juga tidak optimum. Pada pendapat peribadi saya, anda boleh menggunakan struktur yang lebih baik:
Teams(id,name) Seasons(id, year,begin_date,end_date) Matches(id, date, season (外键), home_team (外键), away_team (外键)) Goals(id,team,game,player?)
Jadual Gol akan digunakan untuk merekod setiap gol dan anda kemudian boleh membina keputusan perlawanan daripadanya, mengelakkan penggunaan medan "HomeTeamScore" dan "AwayTeamScore".
Bagi jadual Statistik, anda perlu tahu siapa yang memenangi mata, jadi mari kekal dengan struktur jadual terakhir kami:
Teams(id,name) Seasons(id, year,begin_date,end_date) Matches(id, date, season (外键), home_team (外键), away_team (外键), status) Goals(id,team,game,player?)
Nilai medan status dalam Padanan boleh menjadi: ['1','X','2']
Dengan cara ini anda boleh mempunyai segala-galanya dengan mudah untuk mengira statistik anda, contohnya untuk pasukan dengan 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';
Anda boleh menggunakan ini sebagai titik permulaan untuk membina pertanyaan yang sedikit lebih kompleks menggunakan fungsi kumpulan mengikut dan kumpulan untuk mengira statistik pasukan. Sebaik sahaja anda berjaya membuat pertanyaan seperti ini, saya syorkan anda menggunakan Views
By the way, pertanyaan yang ingin anda laksanakan ini tidak berat, anda tidak semestinya memerlukan pencetus, fikirkan tentang reka bentuk pangkalan data dahulu!
P粉9532317812023-09-03 00:42:53
Cara yang lebih mudah daripada menggunakan pencetus untuk mengekalkan data berlebihan adalah dengan menggunakan paparan; ia hanyalah jumlah kesatuan asas:
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 );