Tabelle Derivate e di Relazione
Tabelle derivate — Analisi Infortuni
Queste tabelle sono calcolate a partire dai dati Transfermarkt + partite, per collegare ogni infortunio alle partite effettivamente saltate.
db_player_injuries (~18.500 righe)
Versione “pulita” degli infortuni, assegnati alla stagione corretta.
| Colonna | Descrizione |
|---|---|
player_id |
FK verso players |
season_id |
Stagione |
condition_id |
FK verso condition_types |
from_date / until_date |
Periodo |
days |
Giorni di assenza |
db_missed_matches_injury (~28.900 righe)
La tabella chiave per l’analisi infortuni: collega ogni infortunio alle singole partite saltate.
| Colonna | Descrizione |
|---|---|
player_id |
FK verso players |
season_id |
Stagione |
match_id |
FK verso matches — la partita saltata |
team_id |
FK verso clubs — la squadra del giocatore |
injury_id |
FK verso db_player_injuries |
Esempio — Quante partite ha saltato un giocatore per infortunio in una stagione:
SELECT p.name, COUNT(*) AS partite_saltate
FROM db_missed_matches_injury dmi
JOIN players p ON dmi.player_id = p.id
WHERE dmi.season_id = '2024'
GROUP BY p.id
ORDER BY partite_saltate DESC
LIMIT 10;
Tabelle di relazione
player_club_periods (~31.000 righe)
Storico di appartenenza dei giocatori ai club (da Transfermarkt).
| Colonna | Descrizione |
|---|---|
player_id |
FK verso players |
club_id |
FK verso clubs |
date_from |
Inizio periodo |
date_until |
Fine periodo (NULL = ancora al club) |
Unique: (player_id, club_id, date_from) — un giocatore può tornare allo stesso club.
season_club_players (~9.200 righe)
Indica chi ha giocato per quale club in quale stagione. Tabella ponte molti-a-molti-a-molti.
serie_a_clubs_seasons (220 righe)
Quali club hanno partecipato alla Serie A in ogni stagione. 20 club x 11 stagioni = 220.
Tabelle precomputed — Cache ML
player_match_precomputed (~103.000 righe)
Precalcola tutte le join costose usate da v_player_match_stats (altrimenti valutate ~103k volte ad ogni export). Una riga per fc_player_match_id.
| Gruppo | Colonne |
|---|---|
| Mercato | tm_market_value — valore di mercato Transfermarkt più recente alla data della partita |
| Infortuni | inj_injured, inj_injury_type, inj_injury_name — stato infortunio attivo alla data |
| Squadra (us_t_) | xG, xGA, npxG, npxGA, ppda_att/def, deep, xpts, npxGD, wins/draws/loses/pts |
| Avversario (us_opp_) | Stesse metriche dell’avversario |
| Tiri Understat (us_s_) | Per tipo (rightfoot/leftfoot/head/other): conteggio + avg minuto + avg x + avg y + avg xG; per risultato (goal/saved/missed/blocked/on_post/own_goal): conteggio; per situazione (open_play/set_piece/from_corner/direct_freekick/penalty): conteggio |
Aggiornare con
cd transformations/migrations && uv run python refresh_precomputed.pydopo ogni aggiornamento dei dati sorgente.
player_match_stats (~103.000 righe)
Materializzazione completa di v_player_match_stats — la tabella da usare per ML e export. Una riga = un giocatore in una partita, con tutti i dati uniti da tutte le fonti.
Aggiornare con
cd transformations/migrations && uv run python ../refresh_player_match_stats.pydopo aver aggiornatoplayer_match_precomputed.