The store, table by table
What the canonical database holds, in the order the pipeline fills it: who the teams are, what was played, what the model fitted, and what is joined to the market. Every count is a live query — a table that is empty here is empty in the store, and the page says why rather than hiding it. These are row counts, not coverage: per-season coverage lives on the season index.
Identity & registry — one row per school, vendors as aliases
| Table | Rows | What one row is |
|---|---|---|
| teams | 2,134 | One canonical school in one competition, keyed (gender, slug). |
| team_aliases | 2,154 | A vendor's id and spelling for a team — the join key the ingest matches on. |
| name_registry_teams | 2,136 | The persisted canonical registry, derived from the retained captures and replaced wholesale. |
| name_registry_entries | 5,723 | One name form — canonical, display, or a vendor alias — pointing at exactly one team. |
| name_registry_decisions | 1 | A tier-2 judgment a human recorded. The one registry-side table a rebuild does not replace. |
702 of the 2,134 teams are provisional: no roster lists them, so they are known only from a game — a non-D1 buy-game opponent, marked in the tables rather than hidden.
Games & results — what was played
| Table | Rows | What one row is |
|---|---|---|
| games | 140,804 | One matchup at one tip time. It carries no gender column — the competition is the home team's, which is why every game-scoped read joins teams. |
| team_box_scores | 276,028 | One team's statistics in one game — the shape the training loader requires. |
137,303 of 140,804 games are final; the rest are scheduled, postponed or canceled. A game's counts_for_ratings flag excludes exhibition and non-D1 games from training while they still count for the record.
Model output — one fit per cutoff, per competition
| Table | Rows | What one row is |
|---|---|---|
| model_runs | 4,638 | One training execution at one cutoff. The cutoff — not created_at — is a run's time anchor. |
| team_ratings | 818,789 | One team-season's fitted ratings for one run. Points per possession, with a sigma per factor. |
| team_rating_smoothing | 818,789 | The same key, holding the causal exponentially-weighted series the pages read by default. |
| season_model_params | 2,319 | A run's home edge and pooled sigma head — everything the run fitted that is not per team. |
| predictions | 73,589 | A priced game, written by the re-prediction from the smoothed series. The walk itself writes none. |
The newest stored cutoff is 2026-04-07 00:50 UTC — the tip of the latest game any fit trained on. Every number a ratings page shows is a walk-forward replay at a stored cutoff, never a live feed.
Ratings are reported raw: shrinkage to the mean was removed because it destroyed separation. Smoothing is a separate, stored series — it never re-enters a fit.
Odds & edges — the market half, read pregame only
| Table | Rows | What one row is |
|---|---|---|
| lines | 0 | One book's price for one market side, stamped at a fetch time. |
| edges | 0 | A model probability against a de-vigged market probability — the one table spanning both halves. |
0 of 0 line rows are pregame — stamped before tip, which is the only kind a backtest or an edge may read. The odds feed has no history, so lines accumulate forward from the November tip.
No edge has been priced yet, so the EV and bet-performance views are deliberately not built: an unbuilt view beats one that renders "no data" and reads as a defect. An edge needs a line joined to a prediction, and nothing has been joined.
Bookkeeping — the pipeline's own record
| Table | Rows | What one row is |
|---|---|---|
| quality_log | 28,107 | An in-pipeline data-quality finding, scoped to the season and gender it came from. |
| resolutions | 0 | The Pacific-day partition key the backtest is specified to use. |
No resolution day has been written: the backtest computes its cutoff from the day it is running rather than storing a partition row. The table is a state, not a fault — and it is the reason a count belongs here instead of a claim in a doc.
Where to read next
- Seasons
- One row per season and competition, with its champion and the path into its top 25.
- Ratings
- One run's snapshot at a time — points per possession, with sigmas and a status column.
- Games
- Filterable results, with a flag for whether each game was predicted.
- Calibration
- When a rating is worth trusting, read off the stored predictions themselves.
- Settings
- Which walk, which series, which book, and how many teams a season chart traces.