Schema log v2.0: players_id NOT NULL, UNIQUE with ref_type, idx master_item
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
-- ============================================
|
-- ============================================
|
||||||
-- SCHEMA LOG - Sistema TZZR
|
-- SCHEMA LOG - Sistema TZZR
|
||||||
-- Log inmutable de mensajes
|
-- Log inmutable de mensajes
|
||||||
|
-- Versión: 2.0
|
||||||
|
-- Fecha: 2026-01-01
|
||||||
-- ============================================
|
-- ============================================
|
||||||
|
|
||||||
DROP SCHEMA IF EXISTS log CASCADE;
|
DROP SCHEMA IF EXISTS log CASCADE;
|
||||||
@@ -13,7 +15,7 @@ CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
|||||||
CREATE TYPE log.ref_type AS ENUM ('context', 'accountant', 'secretary');
|
CREATE TYPE log.ref_type AS ENUM ('context', 'accountant', 'secretary');
|
||||||
|
|
||||||
-- ============================================
|
-- ============================================
|
||||||
-- Tabla 1: messages
|
-- Tabla principal: messages
|
||||||
-- ============================================
|
-- ============================================
|
||||||
CREATE TABLE log.messages (
|
CREATE TABLE log.messages (
|
||||||
id BIGSERIAL PRIMARY KEY,
|
id BIGSERIAL PRIMARY KEY,
|
||||||
@@ -21,7 +23,7 @@ CREATE TABLE log.messages (
|
|||||||
session_hash CHAR(64) NOT NULL,
|
session_hash CHAR(64) NOT NULL,
|
||||||
thread_hash CHAR(64),
|
thread_hash CHAR(64),
|
||||||
owner_id CHAR(64) NOT NULL,
|
owner_id CHAR(64) NOT NULL,
|
||||||
players_id CHAR(64)[] DEFAULT '{}',
|
players_id CHAR(64)[] NOT NULL DEFAULT '{}',
|
||||||
master_player CHAR(64),
|
master_player CHAR(64),
|
||||||
role TEXT,
|
role TEXT,
|
||||||
content TEXT NOT NULL,
|
content TEXT NOT NULL,
|
||||||
@@ -36,21 +38,23 @@ CREATE TABLE log.messages (
|
|||||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
-- Índices messages
|
||||||
CREATE INDEX idx_messages_session ON log.messages(session_hash);
|
CREATE INDEX idx_messages_session ON log.messages(session_hash);
|
||||||
CREATE INDEX idx_messages_thread ON log.messages(thread_hash);
|
CREATE INDEX idx_messages_thread ON log.messages(thread_hash);
|
||||||
CREATE INDEX idx_messages_owner ON log.messages(owner_id);
|
CREATE INDEX idx_messages_owner ON log.messages(owner_id);
|
||||||
CREATE INDEX idx_messages_master_player ON log.messages(master_player);
|
|
||||||
CREATE INDEX idx_messages_prev ON log.messages(prev_hash);
|
|
||||||
CREATE INDEX idx_messages_created ON log.messages(created_at);
|
|
||||||
CREATE INDEX idx_messages_hashtags ON log.messages USING gin(hashtags);
|
|
||||||
CREATE INDEX idx_messages_players ON log.messages USING gin(players_id);
|
CREATE INDEX idx_messages_players ON log.messages USING gin(players_id);
|
||||||
CREATE INDEX idx_messages_items ON log.messages USING gin(item_id);
|
CREATE INDEX idx_messages_master ON log.messages(master_player);
|
||||||
|
CREATE INDEX idx_messages_prev ON log.messages(prev_hash);
|
||||||
|
CREATE INDEX idx_messages_hashtags ON log.messages USING gin(hashtags);
|
||||||
CREATE INDEX idx_messages_flag ON log.messages(flag_id);
|
CREATE INDEX idx_messages_flag ON log.messages(flag_id);
|
||||||
|
CREATE INDEX idx_messages_master_item ON log.messages(master_item_id);
|
||||||
|
CREATE INDEX idx_messages_items ON log.messages USING gin(item_id);
|
||||||
CREATE INDEX idx_messages_loc ON log.messages(loc_id);
|
CREATE INDEX idx_messages_loc ON log.messages(loc_id);
|
||||||
|
CREATE INDEX idx_messages_created ON log.messages(created_at);
|
||||||
|
|
||||||
-- ============================================
|
-- ============================================
|
||||||
-- Tabla 2: message_refs
|
-- Tabla relacional: message_refs
|
||||||
-- Relaciona mensaje con contexto y conocimiento
|
-- Referencias a contexto y conocimiento
|
||||||
-- ============================================
|
-- ============================================
|
||||||
CREATE TABLE log.message_refs (
|
CREATE TABLE log.message_refs (
|
||||||
id BIGSERIAL PRIMARY KEY,
|
id BIGSERIAL PRIMARY KEY,
|
||||||
@@ -59,9 +63,10 @@ CREATE TABLE log.message_refs (
|
|||||||
ref_type log.ref_type NOT NULL,
|
ref_type log.ref_type NOT NULL,
|
||||||
position INT NOT NULL,
|
position INT NOT NULL,
|
||||||
thread_hash CHAR(64),
|
thread_hash CHAR(64),
|
||||||
UNIQUE(message_hash, ref_hash)
|
UNIQUE(message_hash, ref_hash, ref_type)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
-- Índices message_refs
|
||||||
CREATE INDEX idx_refs_message ON log.message_refs(message_hash);
|
CREATE INDEX idx_refs_message ON log.message_refs(message_hash);
|
||||||
CREATE INDEX idx_refs_ref ON log.message_refs(ref_hash);
|
CREATE INDEX idx_refs_ref ON log.message_refs(ref_hash);
|
||||||
CREATE INDEX idx_refs_type ON log.message_refs(ref_type);
|
CREATE INDEX idx_refs_type ON log.message_refs(ref_type);
|
||||||
@@ -89,7 +94,7 @@ END;
|
|||||||
$$ LANGUAGE plpgsql;
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
-- ============================================
|
-- ============================================
|
||||||
-- Triggers de protección
|
-- Triggers de protección (inmutabilidad)
|
||||||
-- ============================================
|
-- ============================================
|
||||||
CREATE TRIGGER protect_messages_update BEFORE UPDATE ON log.messages
|
CREATE TRIGGER protect_messages_update BEFORE UPDATE ON log.messages
|
||||||
FOR EACH ROW EXECUTE FUNCTION log.prevent_update();
|
FOR EACH ROW EXECUTE FUNCTION log.prevent_update();
|
||||||
@@ -110,4 +115,5 @@ GRANT SELECT, INSERT ON log.message_refs TO tzzr;
|
|||||||
GRANT USAGE ON SEQUENCE log.messages_id_seq TO tzzr;
|
GRANT USAGE ON SEQUENCE log.messages_id_seq TO tzzr;
|
||||||
GRANT USAGE ON SEQUENCE log.message_refs_id_seq TO tzzr;
|
GRANT USAGE ON SEQUENCE log.message_refs_id_seq TO tzzr;
|
||||||
|
|
||||||
SELECT 'Schema log: 2 tablas creadas' as status;
|
-- Verificación
|
||||||
|
SELECT 'Schema log v2.0: 2 tablas creadas' as status;
|
||||||
|
|||||||
Reference in New Issue
Block a user