feat(db): normalize star systems into multi-table schema with GJ primary keys
Replaces flat star_systems table with 7 normalized tables: star_systems, system_gates (with hop_distance_from_gateway), system_history, historical_events (1:N), system_economy, system_factions, system_culture. Primary key is now the GJ astronomical ID (e.g., "GJ 244A") — S-number identifiers removed entirely. The astronomical_id column is dropped as redundant. Database moved to server/data/systems.db (ships with game). 10 core systems fully populated with structured data. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+2
-103
@@ -95,107 +95,6 @@ CREATE INDEX IF NOT EXISTS idx_decision_refs_source ON decision_refs(source_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_decision_refs_target ON decision_refs(target_id);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- Star Systems Wiki Mirror
|
||||
-- Populated by: python3 tooling/db/wiki_sync.py sync
|
||||
-- Source: wiki/star-systems/*/index.md (YAML frontmatter)
|
||||
-- Star Systems live in a separate database: server/data/systems.db
|
||||
-- Schema: server/data/systems-schema.sql
|
||||
-- ---------------------------------------------------------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS star_systems (
|
||||
-- I. Identity and Location
|
||||
system_id TEXT PRIMARY KEY,
|
||||
astronomical_id TEXT NOT NULL,
|
||||
proper_name TEXT,
|
||||
system_name TEXT,
|
||||
star_type TEXT,
|
||||
geographic_sector TEXT,
|
||||
geographic_band TEXT,
|
||||
political_zone TEXT,
|
||||
|
||||
-- II. Physical Character
|
||||
habitable_planet_count INTEGER,
|
||||
inhabited_planet_count INTEGER,
|
||||
asteroid_belt TEXT,
|
||||
gas_giant TEXT,
|
||||
habitability_profile TEXT,
|
||||
|
||||
-- III. Gate Infrastructure
|
||||
horizon_station INTEGER, -- boolean 0/1
|
||||
aperture_count INTEGER,
|
||||
gate_connections INTEGER,
|
||||
gate_topology TEXT,
|
||||
span_gate_network TEXT,
|
||||
|
||||
-- IV. Settlement History
|
||||
settlement_wave TEXT,
|
||||
founding_motivation TEXT,
|
||||
founding_culture_primary TEXT,
|
||||
founding_culture_secondary TEXT,
|
||||
cultural_persistence TEXT,
|
||||
historical_event TEXT,
|
||||
historical_event_age_years INTEGER,
|
||||
religious_status TEXT,
|
||||
religious_generation_count INTEGER,
|
||||
|
||||
-- V. Economic Life
|
||||
economic_tier TEXT,
|
||||
population TEXT,
|
||||
economic_base_primary TEXT,
|
||||
economic_base_secondary TEXT,
|
||||
distribution_index TEXT,
|
||||
imprint_access TEXT,
|
||||
supply_dependency TEXT,
|
||||
|
||||
-- VI. Governance
|
||||
governance_type TEXT,
|
||||
dominant_faction TEXT,
|
||||
primary_fault_line TEXT,
|
||||
secondary_fault_line TEXT,
|
||||
|
||||
-- VII. Faction Presence
|
||||
assembly_presence TEXT,
|
||||
commission_presence TEXT,
|
||||
syndic_presence TEXT,
|
||||
syndic_type TEXT,
|
||||
separatist_presence TEXT,
|
||||
separatist_type TEXT,
|
||||
institute_presence TEXT,
|
||||
guardians_presence TEXT,
|
||||
faction_notes TEXT,
|
||||
|
||||
-- VIII. Cultural Voice
|
||||
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,
|
||||
silence_topic TEXT,
|
||||
|
||||
-- IX. Political Character
|
||||
earth_alignment TEXT,
|
||||
earth_proximity TEXT,
|
||||
earth_tension TEXT,
|
||||
|
||||
-- X. Narrative Profile
|
||||
primary_archetype TEXT,
|
||||
secondary_archetype TEXT,
|
||||
narrative_notable TEXT,
|
||||
narrative_hook TEXT,
|
||||
generation_priority TEXT,
|
||||
|
||||
-- XI. Content Notes
|
||||
stability_index TEXT,
|
||||
system_volatility TEXT,
|
||||
cultural_corridor TEXT,
|
||||
calibration_note TEXT,
|
||||
|
||||
synced_at TEXT DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_star_systems_astro ON star_systems(astronomical_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_star_systems_sector ON star_systems(geographic_sector);
|
||||
CREATE INDEX IF NOT EXISTS idx_star_systems_wave ON star_systems(settlement_wave);
|
||||
CREATE INDEX IF NOT EXISTS idx_star_systems_topology ON star_systems(gate_topology);
|
||||
CREATE INDEX IF NOT EXISTS idx_star_systems_star_type ON star_systems(star_type);
|
||||
|
||||
Reference in New Issue
Block a user