feat(episode): TRAZA_la-raz-3-modelos-de-datos-distintos-por_S20260621.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: TESSERA | Type: reflection Summary: EPISODIO 2 — PostgreSQL: La raíz: 3 modelos de datos distintos (por eso la asime
This commit is contained in:
parent
6fe23f7b2c
commit
363e0eca18
1 changed files with 40 additions and 0 deletions
|
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
episode_id: "a657a7f1-7635-4e41-a935-bac709701a70"
|
||||||
|
puente_flat: "TRAZA_la-raz-3-modelos-de-datos-distintos-por_S20260621.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
|
||||||
|
session_code: "S20260621.CRONICA_SEMANAL_C15"
|
||||||
|
acto_dialogico: "informar"
|
||||||
|
actor_flujo: "multi_actor"
|
||||||
|
criticidad_aegis: "low"
|
||||||
|
skill_dominante: "TESSERA"
|
||||||
|
fase_proyecto: "operations"
|
||||||
|
tipo_semantico: "reflection"
|
||||||
|
summary_one_line: "EPISODIO 2 — PostgreSQL: La raíz: 3 modelos de datos distintos (por eso la asimetría "
|
||||||
|
source_type: "claude_code"
|
||||||
|
trust_boundary: "internal"
|
||||||
|
created_at: "2026-06-21T18:23:33.487219+00:00"
|
||||||
|
relectura_tagged: false
|
||||||
|
forgejo_commit_sha: "pending"
|
||||||
|
---
|
||||||
|
|
||||||
|
John — disculpa, los turnos previos se consumieron en un problema de commit y no te entregué limpio la respuesta. **La tengo lista.** Aquí está la comparación completa, y el documento exhaustivo (tabla de los ~70 campos) está en [docs/MAPA_CAMPOS_3STORES_COMPLETO_S20260621.md](docs/MAPA_CAMPOS_3STORES_COMPLETO_S20260621.md).
|
||||||
|
|
||||||
|
## La raíz: 3 modelos de datos distintos (por eso la asimetría existe)
|
||||||
|
No son "3 bases intercambiables" — son 3 paradigmas con propósitos ortogonales. Cada uno **solo guarda la proyección del episodio que su función necesita**:
|
||||||
|
|
||||||
|
| Store | Modelo | Función | Qué exige su modelo |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **PostgreSQL** | Relacional (tablas, enums, constraints) | **Verdad canónica** — estado autoritativo, queries exactas, lineage tipado | columnas tipadas, enums, jsonb |
|
||||||
|
| **Qdrant** | Vectorial (punto = vector + payload libre) | **Recuperación semántica** por similitud | un vector + payload plano para filtrar/mostrar; sin tipos |
|
||||||
|
| **Neo4j** | Grafo (nodos + aristas) | **Relaciones** ("qué menciona qué") | nodos ligeros + aristas tipadas; el valor está en las CONEXIONES, no en el blob |
|
||||||
|
|
||||||
|
## Hallazgo previo grande: PostgreSQL tiene DOS tablas `episode`
|
||||||
|
- **`public.episode`** = 284 filas, 52 columnas → **la VIVA canónica**.
|
||||||
|
- **`mnemo.episode`** = 40 filas, 40 columnas → **legacy abandonada** (esquema viejo con `causal`/`sibling_of`/`lineage_id`/`content_tsv` que la viva no tiene). Es una tabla zombi = deuda.
|
||||||
|
|
||||||
|
## Cómo se relacionan los campos (resumen por grupos; tabla completa en el doc)
|
||||||
|
- **Identidad:** `episode_id` existe en los 3 **pero con valor distinto** (PostgreSQL=uuid4 aleatorio; Qdrant/Neo4j=uuid5 derivado del `content_sha256`). **La ÚNICA llave que une los 3 es `puente_flat`** (Qdrant la nombra `puente_id`). Por eso unir por `episode_id` da basura.
|
||||||
|
- **Contenido:** completo en PostgreSQL (`content_text`) Y Qdrant (`content`) — duplicado 2×. Neo4j **no guarda contenido** (solo título).
|
||||||
|
- **Vector embedding:** real solo en Qdrant. La columna `embedding` de PostgreSQL existe pero está **en ceros**. Neo4j no vectoriza.
|
||||||
|
- **Cadena BLC (integridad):** completa solo en Qdrant (`blc_hash`, `blc_previous_hash`, `blc_chain_position`…). En PostgreSQL `blc_hash` está **en ceros**. Neo4j no la tiene.
|
||||||
|
- **Entidades:** lista plana en PostgreSQL (`related_entities`) + Qdrant (`entities`); en Neo4j son **aristas `:MENTIONS` → nodos `:Entity`** (su razón de existir).
|
||||||
|
- **Facets** (acto/actor/fase/criticidad): PostgreSQL las guarda como **enums tipados palabra-completa** (`informar`, `low`); Qdrant/Neo4j como **strings abreviados** (`inf`, `2`).
|
||||||
Loading…
Reference in a new issue