This commit is contained in:
2026-04-09 14:55:37 +02:00
parent 8be455ba98
commit 4a85efc270
30 changed files with 4895 additions and 1 deletions
+192
View File
@@ -0,0 +1,192 @@
# Relational Schema
## Rules
- UUID primary keys
- `timestamptz` for all timestamps
- No JSONB columns
- Child tables for attributes and event payloads
- Foreign keys wherever possible
## Core Tables
### users
- `id`
- `external_ref`
- `created_at`
- `preferred_language`
- `device_platform`
### sessions
- `id`
- `user_id`
- `started_at`
- `ended_at`
- `experiment_variant`
- `app_version`
- `device_model`
- `os_version`
- `locale_code`
### events
- `id`
- `sport_type`
- `source_ref`
- `title_en`
- `title_sv`
- `status`
- `preview_start_ms`
- `preview_end_ms`
- `reveal_start_ms`
- `reveal_end_ms`
- `lock_at`
- `settle_at`
### event_media
- `id`
- `event_id`
- `media_type`
- `hls_master_url`
- `poster_url`
- `duration_ms`
- `preview_start_ms`
- `preview_end_ms`
- `reveal_start_ms`
- `reveal_end_ms`
### markets
- `id`
- `event_id`
- `question_key`
- `market_type`
- `status`
- `lock_at`
- `settlement_rule_key`
### outcomes
- `id`
- `market_id`
- `outcome_code`
- `label_key`
- `sort_order`
### odds_versions
- `id`
- `market_id`
- `version_no`
- `created_at`
- `is_current`
### outcome_odds
- `id`
- `odds_version_id`
- `outcome_id`
- `decimal_odds`
- `fractional_num`
- `fractional_den`
### bet_intents
- `id`
- `user_id`
- `session_id`
- `event_id`
- `market_id`
- `outcome_id`
- `idempotency_key`
- `client_sent_at`
- `server_received_at`
- `accepted`
- `acceptance_code`
- `accepted_odds_version_id`
### settlements
- `id`
- `market_id`
- `settled_at`
- `winning_outcome_id`
### experiment_assignments
- `id`
- `user_id`
- `session_id`
- `variant`
- `assigned_at`
### localization_keys
- `id`
- `key_name`
- `description`
### localization_values
- `id`
- `localization_key_id`
- `locale_code`
- `text_value`
### analytics_event_types
- `id`
- `event_name`
- `description`
### analytics_events
- `id`
- `analytics_event_type_id`
- `session_id`
- `user_id`
- `occurred_at`
### analytics_event_attributes
- `id`
- `analytics_event_id`
- `attribute_key`
- `attribute_value`
### audit_logs
- `id`
- `created_at`
- `actor_type`
- `actor_id`
- `action_name`
- `target_type`
- `target_id`
- `trace_id`
- `note`
### audit_log_attributes
- `id`
- `audit_log_id`
- `attribute_key`
- `attribute_value`
## Indexes
- `sessions.user_id`
- `sessions.started_at`
- `events.status`
- `markets.event_id`
- `markets.lock_at`
- `bet_intents.session_id`
- `bet_intents.market_id`
- `bet_intents.idempotency_key`
- `analytics_events.session_id`
- `analytics_events.user_id`
- `analytics_events.analytics_event_type_id`
- `audit_logs.created_at`