Documento

Entità Centrali e Sistema ID

Il cuore del database: players

Ogni giocatore ha una sola riga qui, indipendentemente da quante fonti lo tracciano. Le colonne ID permettono di collegarlo a ciascuna fonte:

Colonna Descrizione
id ID interno (usato come FK ovunque)
tm_id ID su Transfermarkt (es. "406625")
sofascore_id ID su SofaScore (es. 946260)
fantacalcio_id ID su Fantacalcio.it (es. 4640)
understat_id ID su Understat (es. 1245)
name Nome completo
date_of_birth Data di nascita
height Altezza in cm
foot Piede preferito: left, right, both
SELECT id, name, tm_id, sofascore_id, fantacalcio_id, understat_id FROM players WHERE name LIKE '%Lautaro%';

clubs — I club

Come per i giocatori, ogni club ha una sola riga con ID da più fonti:

Colonna Descrizione
id ID interno
tm_id ID Transfermarkt
understat_id ID Understat
sofascore_id ID SofaScore
fc_name Nome usato su Fantacalcio.it (es. "Inter")
fc_abbr Abbreviazione 3 lettere (es. "INT")
name Nome completo (es. "Inter Milan")

seasons — Le stagioni

Contiene 36 stagioni dal 1991 al 2026. Il formato è l’anno di inizio:

season_id Significa
"2024" Stagione 2024/25
"2023" Stagione 2023/24
"2015" Stagione 2015/16

Tutte le tabelle con dati stagionali usano season_id come FK verso questa tabella.


matches — Le partite

Risultati delle partite di Serie A.

Colonna Descrizione
match_id Identificativo unico (stringa)
date Data della partita
home_team_id / away_team_id FK verso clubs
home_goal / away_goal Risultato finale
season_id Stagione
matchday Giornata di campionato (1-38)
referee Arbitro
venue_name Stadio

Il sistema di ID cross-source

Il problema fondamentale: Lautaro Martinez ha un ID diverso su ogni sito. Si risolve con una tabella unificata (players) che contiene tutti gli ID:

players.id = 42 (nostro ID interno) players.tm_id = "406625" (Transfermarkt) players.sofascore_id = 946260 players.fantacalcio_id = 4640 players.understat_id = 1245

Regola: tutte le tabelle statistiche puntano a players.id (il nostro ID interno), mai direttamente agli ID delle fonti. Eccezione: le tabelle Understat usano anche understat_player_id per il join diretto.

Lo stesso vale per i club con clubs.id come riferimento interno.

Come si collega un giocatore tra le fonti

SELECT p.name, fps.fantasy_average AS voto_fanta, ss.rating AS rating_sofascore, us.xG AS xg_understat, be.xg_90 AS xg_per_90_bera FROM players p LEFT JOIN fc_player_seasons fps ON p.id = fps.player_id AND fps.season_id = '2024' LEFT JOIN sofascore ss ON p.id = ss.player_id AND ss.season_id = '2024' LEFT JOIN us_players us ON p.understat_id = us.id AND us.season_id = '2024' LEFT JOIN bera be ON p.id = be.player_id AND be.season_id = '2024' WHERE p.name LIKE '%Lautaro%';