Documentation

Joined event, market, and price tables.

This dataset links market structure to time-series pricing so you can analyze events, individual contracts, and historical price movement in one joined model.

Primary entities

3 tables

Events define the parent object, markets represent tradable contracts, and prices capture time-stamped observations for each market.

Relationships

1-to-many

One event can have many markets, and one market can have many price records over time.

Use cases

Research ready

Support historical analysis, event-level aggregation, contract monitoring, and downstream warehouse joins.

Join logic

How the tables connect

The relational structure follows the model definitions in the codebase. Each market belongs to exactly one event, and each price belongs to exactly one market.

events.id = markets.event_id
markets.id = prices.market_id

When joined together, each output row is typically at the price observation grain: one event, one market, one timestamped price record.

Table

events

Top-level grouping for related markets.

Column Description
id Primary key for the standardized event record.
title Human-readable event title.
ticker Exchange-provided event ticker when available; nullable.
exchange Source exchange associated with the event.

Table

markets

Tradable market or contract associated with an event.

Column Description
id Primary key for the standardized market record.
title Market title or contract label.
description Longer description of the market.
start_date Optional market start timestamp.
end_date Optional market end or resolution timestamp.
ticker Optional exchange market ticker.
active Optional boolean showing whether the market is active.
closed Optional boolean showing whether the market is closed.
event_id Foreign key to events.id.
prices_last_updated Optional timestamp for the most recent synchronized price data.

Table

prices

Historical price observations for each market.

Column Description
id Primary key for the price record.
time Timestamp for the observed price.
price Observed market price value.
market_id Foreign key to markets.id.

Joined output

Recommended grain

Use a row-per-price-observation model when you need the full joined dataset. Event and market attributes repeat across price rows by design.

Analytical note

Aggregation

Aggregate at the market or event level when measuring counts, averages, or outcomes to avoid overcounting repeated attributes.

Warehouse note

Nullable fields

Several market and event fields are optional in the ORM, so consumers should expect null values in selected columns.

Example query

Basic join across the three tables

SELECT
  e.id AS event_id,
  e.title AS event_title,
  e.ticker AS event_ticker,
  e.exchange,
  m.id AS market_id,
  m.title AS market_title,
  m.description,
  m.start_date,
  m.end_date,
  m.ticker AS market_ticker,
  m.active,
  m.closed,
  m.prices_last_updated,
  p.id AS price_id,
  p.time AS price_time,
  p.price
FROM events e
JOIN markets m
  ON e.id = m.event_id
JOIN prices p
  ON m.id = p.market_id
ORDER BY p.time DESC;