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%';