-- Star Systems Database Schema — server/data/systems.db -- Source of truth for all structured star system data. -- Authored via tooling pipeline; wiki pages are generated views. -- Shipped with the game — read-only from the server's perspective. -- -- Rebuild: tooling/process-wiki-system-changes --rebuild-db PRAGMA journal_mode=WAL; PRAGMA foreign_keys=ON; -- Core identity, physical character, political character CREATE TABLE IF NOT EXISTS star_systems ( system_id TEXT PRIMARY KEY, -- GJ catalog number (e.g., "GJ 244A") proper_name TEXT, system_name TEXT, star_type TEXT, spectral_class TEXT, dist_ly REAL, geographic_sector TEXT, geographic_band TEXT, political_zone TEXT, -- Physical character habitable_planet_count INTEGER, inhabited_planet_count INTEGER, asteroid_belt INTEGER, -- boolean 0/1 gas_giant INTEGER, -- boolean 0/1 habitability_profile TEXT, -- Political character earth_alignment TEXT, earth_proximity TEXT, earth_tension TEXT, -- Content notes stability_index INTEGER, system_volatility TEXT, cultural_corridor TEXT, generation_priority TEXT, updated_at TEXT DEFAULT (datetime('now')) ); -- Gate infrastructure — queried independently for pathfinding/topology CREATE TABLE IF NOT EXISTS system_gates ( system_id TEXT PRIMARY KEY REFERENCES star_systems(system_id), horizon_station INTEGER, -- boolean 0/1 aperture_count INTEGER, gate_connections INTEGER, gate_topology TEXT, hop_distance_from_gateway INTEGER, span_gate_network TEXT ); -- Settlement history CREATE TABLE IF NOT EXISTS system_history ( system_id TEXT PRIMARY KEY REFERENCES star_systems(system_id), settlement_wave TEXT, founding_motivation TEXT, founding_culture_primary TEXT, founding_culture_secondary TEXT, cultural_persistence TEXT, religious_status TEXT, religious_generation_count INTEGER ); -- Historical events — proper 1:N child table CREATE TABLE IF NOT EXISTS historical_events ( id INTEGER PRIMARY KEY AUTOINCREMENT, system_id TEXT NOT NULL REFERENCES star_systems(system_id), event_type TEXT NOT NULL, age_years INTEGER, sort_order INTEGER NOT NULL DEFAULT 0 -- 0 = most recent ); -- Economic life CREATE TABLE IF NOT EXISTS system_economy ( system_id TEXT PRIMARY KEY REFERENCES star_systems(system_id), economic_tier INTEGER, population INTEGER, economic_base_primary TEXT, economic_base_secondary TEXT, distribution_index TEXT, imprint_access TEXT ); -- Faction presence CREATE TABLE IF NOT EXISTS system_factions ( system_id TEXT PRIMARY KEY REFERENCES star_systems(system_id), governance_type TEXT, dominant_faction TEXT, primary_fault_line TEXT, secondary_fault_line TEXT, assembly_presence TEXT, commission_presence TEXT, syndic_presence TEXT, syndic_type TEXT, separatist_presence TEXT, separatist_type TEXT, institute_presence TEXT, guardians_presence TEXT ); -- Cultural voice CREATE TABLE IF NOT EXISTS system_culture ( system_id TEXT PRIMARY KEY REFERENCES star_systems(system_id), cultural_register TEXT, cultural_register_secondary TEXT, ambient_anxiety TEXT, local_pride TEXT, atmospheric_tone TEXT, atmospheric_tone_secondary TEXT, active_situation TEXT, silence_threshold TEXT, primary_archetype TEXT, secondary_archetype TEXT, narrative_notable INTEGER -- boolean 0/1 ); -- Authored prose (supply_dependency, faction_notes, silence_topic, -- narrative_hook, calibration_note) lives in wiki markdown files only. -- No DB mirror — read the file if you need the text. -- Indexes -- astronomical_id removed: system_id IS the GJ catalog number CREATE INDEX IF NOT EXISTS idx_star_systems_sector ON star_systems(geographic_sector); CREATE INDEX IF NOT EXISTS idx_star_systems_wave ON system_history(settlement_wave); CREATE INDEX IF NOT EXISTS idx_star_systems_topology ON system_gates(gate_topology); CREATE INDEX IF NOT EXISTS idx_star_systems_star_type ON star_systems(star_type); CREATE INDEX IF NOT EXISTS idx_star_systems_volatility ON star_systems(system_volatility); CREATE INDEX IF NOT EXISTS idx_historical_events_system ON historical_events(system_id); CREATE INDEX IF NOT EXISTS idx_system_factions_dominant ON system_factions(dominant_faction); CREATE INDEX IF NOT EXISTS idx_system_economy_tier ON system_economy(economic_tier); CREATE INDEX IF NOT EXISTS idx_system_culture_archetype ON system_culture(primary_archetype);