BEGIN; CREATE SCHEMA IF NOT EXISTS world; SET ROLE world_role; CREATE TABLE IF NOT EXISTS world.kind_definitions ( kind_definition_id TEXT PRIMARY KEY, kind_key TEXT NOT NULL, revision BIGINT NOT NULL CHECK (revision > 0), display_name TEXT NOT NULL, parent_owner_namespace TEXT NOT NULL DEFAULT '', parent_semantic_kind TEXT NOT NULL DEFAULT '', parent_stable_id TEXT NOT NULL DEFAULT '', parent_revision BIGINT, lifecycle TEXT NOT NULL, definition_digest TEXT NOT NULL, recorded_at_unix_millis BIGINT NOT NULL CHECK (recorded_at_unix_millis > 0), UNIQUE (kind_key, revision) ); CREATE TABLE IF NOT EXISTS world.objects ( world_object_id TEXT PRIMARY KEY, principal_id TEXT, kind_owner_namespace TEXT NOT NULL, kind_semantic_kind TEXT NOT NULL, kind_stable_id TEXT NOT NULL, kind_revision BIGINT, lifecycle TEXT NOT NULL, created_at_unix_millis BIGINT NOT NULL CHECK (created_at_unix_millis > 0) ); CREATE TABLE IF NOT EXISTS world.aliases ( world_alias_id TEXT PRIMARY KEY, principal_id TEXT, world_object_id TEXT NOT NULL, alias TEXT NOT NULL, recorded_at_unix_millis BIGINT NOT NULL CHECK (recorded_at_unix_millis > 0) ); CREATE TABLE IF NOT EXISTS world.facet_definitions ( facet_definition_id TEXT PRIMARY KEY, kind_key TEXT NOT NULL, revision BIGINT NOT NULL CHECK (revision > 0), facet_key TEXT NOT NULL, value_type JSONB NOT NULL, definition_digest TEXT NOT NULL, recorded_at_unix_millis BIGINT NOT NULL CHECK (recorded_at_unix_millis > 0), UNIQUE (kind_key, facet_key, revision) ); CREATE TABLE IF NOT EXISTS world.relation_definitions ( relation_definition_id TEXT PRIMARY KEY, kind_key TEXT NOT NULL, revision BIGINT NOT NULL CHECK (revision > 0), relation_key TEXT NOT NULL, target_kind_key TEXT NOT NULL, definition_digest TEXT NOT NULL, recorded_at_unix_millis BIGINT NOT NULL CHECK (recorded_at_unix_millis > 0), UNIQUE (kind_key, relation_key, revision) ); CREATE TABLE IF NOT EXISTS world.identity_resolution_decisions ( resolution_decision_id TEXT PRIMARY KEY, principal_id TEXT, candidates JSONB NOT NULL, decision TEXT NOT NULL, evidence JSONB NOT NULL, confidence_millis BIGINT NOT NULL CHECK (confidence_millis >= 0), decided_at_unix_millis BIGINT NOT NULL CHECK (decided_at_unix_millis > 0), revision BIGINT NOT NULL CHECK (revision > 0) ); CREATE TABLE IF NOT EXISTS world.lineage ( lineage_id TEXT PRIMARY KEY, operation TEXT NOT NULL, source_refs JSONB NOT NULL, successor_refs JSONB NOT NULL, recorded_at_unix_millis BIGINT NOT NULL CHECK (recorded_at_unix_millis > 0) ); RESET ROLE; COMMIT;