Backbone ERD
Completeness is not just row counts — it is whether the tables join. Here are the six backbone tables every curated vertical carries and the real keys that stitch them together. Primary and foreign keys are emphasized; each connector is labelled with the join column.
No surrogate key on event_results
event_results has NO surrogate key; identity is (event_id, competitor_id, division).
identity = (event_id, competitor_id, division)
No foreign keys, no uniqueness
Declared constraints are advisory planner hints only. Every integrity guarantee must be checked, never assumed.
These relationships are advisory — every integrity guarantee must be checked.
Entity-relationship map
How to read it
Arrows point from a key to the tables that reference it. Follow event_id out of events and you reach every other backbone table except seasons — it is the spine of the join graph.
results is the fan-in fact table: one row per competitor per competition, carrying three foreign keys at once.
The joins, verbatim
- seasons.season_id→events.season_id
- events.event_id→competitions.event_id
- competitions.competition_id→results.competition_id
- events.event_id→results.event_id
- events.event_id→event_results.event_id
- competitors.competitor_id→results.competitor_id
- competitors.competitor_id→event_results.competitor_id