Parte III · Cómo funcionan juntas
La identidad a través de los sistemas
Tres sistemas le dan tres nombres distintos. Pero es una sola persona. Antes de que el grafo pueda cruzar la tienda, la clínica y la municipalidad, tiene que resolver una pregunta que parece trivial y casi nunca lo es: ¿son el mismo?
Un martes de mayo, Juan Vega compra una camiseta en la
tienda del centro. Para la caja registradora, Juan no es Juan: es
cliente_1042, el comprador de la camiseta_88. Tres semanas después,
ese mismo Juan llega a urgencias con una arritmia. Para el sistema de la clínica no existe
ningún cliente_1042; existe paciente_vega, con su episodio y su
historia. Y cuando, al mes, Juan paga sus arbitrios, la municipalidad lo conoce por un tercer
nombre todavía: contribuyente_77‑3389. Tres sistemas, tres identificadores, una
sola persona de carne y hueso que ninguno de los tres sabe que comparte con los demás.
Esa es la grieta que este capítulo cierra. El libro prometió, desde la introducción, que las
preguntas servirían de vocabulario común para que sistemas que hoy no se hablan
pudieran responder juntos. Pero un vocabulario común no basta. Aunque la tienda y la clínica
coincidieran en llamar agente al cable que apunta a una persona, seguirían sin
saber que cliente_1042 y paciente_vega son la misma
persona. Responder a esa pregunta —¿quién es quién, de verdad, a través de los sistemas?— es
lo que llamaremos resolución de identidad, y es el último eslabón que hace
posible la promesa cross-dominio.
Identidad no es lo mismo que identificador
Conviene separar dos palabras que el lenguaje cotidiano confunde y que la arquitectura
obliga a distinguir. La identidad es la persona real: Juan Vega, un
individuo único en el mundo, que existía antes de comprar nada y existirá después de que la
camiseta se decolore. La identidad vive en el eje
Q quién: es una entidad del
modelo, no una cadena de texto. El identificador, en cambio, es el rótulo
que un sistema concreto le pega encima para poder referirse a él:
cliente_1042 es el identificador que la tienda eligió, y solo tiene
sentido dentro de la tienda.
La distinción importa porque los identificadores son locales y arbitrarios. Cada
sistema acuña los suyos sin consultar a nadie: la tienda numera a sus clientes en orden de
llegada, la clínica usa el apellido, la municipalidad concatena un código tributario. Ninguno
es «más correcto» que otro; simplemente son tres nombres privados para una misma persona
pública. El error clásico (y la causa de media torre de Babel) es confundir el rótulo con lo
rotulado: tratar cliente_1042 como si fuera la persona, en vez de como
una flecha que apunta a ella.
Identidad vs. identificador
Identidad: el individuo real, único en el mundo, una entidad del eje Q. Es lo rotulado.
Identificador (UID): el rótulo que un sistema le asigna para poder apuntarlo. Es local, arbitrario y prescindible. Es el rótulo. Una misma identidad puede llevar tantos identificadores como sistemas la conozcan.
mismo_que, a una identidad canónica en el eje Q. Resolver
la identidad es, literalmente, dibujar esas tres flechas.La analogía que lo aclara todo: punteros
Quien haya programado en un lenguaje de bajo nivel reconocerá esta situación de inmediato, porque es exactamente la de los punteros. Un puntero no es un objeto: es una dirección, un papelito que dice «el objeto que buscas está allá». Varios papelitos pueden señalar el mismo rincón de la memoria. El objeto es uno; las direcciones que lo apuntan, muchas. Esa asimetría —un referente, varios referentes— es la columna vertebral de este capítulo.
Traduzcamos el modelo entero a ese vocabulario, porque la correspondencia es asombrosamente limpia:
- Cada identificador es un puntero.
cliente_1042no contiene a Juan: apunta a él. Es la dirección que usa la tienda para llegar a la persona. - Reificar es «tomar la dirección». Cuando en el
capítulo 9 convertimos un evento fugaz (una venta, un
gol) en un objeto con identidad propia, lo que hicimos fue darle una dirección estable para
poder apuntarlo después. Reificar es el operador
&del modelo: pasar de «algo ocurrió» a «este algo, al que ahora puedo señalar». mismo_quees aliasing de punteros. Dos direcciones, un mismo objeto. Declarar(cliente_1042, mismo_que, persona_vega)es decirle al sistema: «estos dos papelitos llevan al mismo sitio; trátalos como sinónimos».- El grafo entero es una estructura de punteros. Cada tripleta enlaza nodos por referencia, no por copia. El conocimiento no es una pila de tablas planas: es un tejido de direcciones que se apuntan unas a otras, como un montón de objetos en un heap.
mismo_que, refieren al mismo objeto
persona_vega. Esto es aliasing: nombres distintos para una sola cosa.
El grafo no copia a Juan tres veces; lo apunta tres veces.Cómo se resuelve la identidad, en la práctica
Saber que hace falta resolver la identidad es la mitad fácil. La otra mitad es cómo el sistema decide que dos punteros llevan al mismo sitio. Hay tres vías, ordenadas de la más fiable a la más resbaladiza.
Vía 1 · Claves naturales con autoridad externa
La situación ideal: existe un identificador que no es local, sino que lo emite una autoridad reconocida por todos. El DNI de una persona, el RUC de una empresa, un correo verificado, el ISBN de un libro, el IBAN de una cuenta. Cuando dos sistemas registran el mismo DNI, la identidad se resuelve sola: no hay nada que adivinar, porque ambos están citando la misma fuente de verdad externa. La clave natural es, en términos de la analogía, una dirección canónica que todo el mundo acordó usar.
(cliente_1042, documento_dni, "20148833") ∈ M(Q, K) // la tienda lo registró
(paciente_vega, documento_dni, "20148833") ∈ M(Q, K) // la clínica también
// misma clave natural ⇒ misma identidad: la resolución es deductiva, no probable
Vía 2 · mismo_que declarado como un hecho más
A veces no hay clave común, pero alguien (un humano, un proceso de conciliación, una
migración) sabe que dos identificadores coinciden y quiere dejarlo escrito. El
modelo no necesita maquinaria nueva para eso: la identidad compartida se guarda como
cualquier otro hecho, una tripleta con el cable mismo_que. Es la elegancia del
enfoque: una afirmación de identidad es un dato de primera clase, fechable, atribuible y
revisable como cualquier otro.
Porque es un hecho como los demás, puede reificarse cuando importa quién lo afirmó y cuándo (exactamente las razones de reificación del capítulo 9). Una fusión de identidades en un banco no es trivial: conviene saber qué operador la aprobó, con qué evidencia y en qué fecha, por si mañana hay que deshacerla.
owl:sameAs y la resolución de entidades(22)
Esta idea no es nueva ni exclusiva del modelo. La Web Semántica
la formalizó hace dos décadas con owl:sameAs, el predicado del estándar OWL que
declara que dos URIs denotan el mismo individuo; es el motor que permite a un dato de
DBpedia(33) enlazarse con su gemelo en Wikidata(32). Nuestro mismo_que es,
deliberadamente, ese mismo gesto traducido al vocabulario de las preguntas.
El problema más amplio (decidir cuándo dos registros son la misma cosa) tiene nombre propio en la literatura: entity resolution (también record linkage o deduplication), estudiado desde el trabajo seminal de Fellegi y Sunter en 1969. El modelo no lo reinventa; le da un lugar limpio donde aterrizar.
Vía 3 · Matching probabilístico
El caso incómodo, y el más frecuente en la vida real: no hay clave común y nadie declaró nada. La tienda guardó «Juan Vega», la clínica «J. Vega Ramos», la municipalidad «Vega, Juan A.». ¿Son el mismo? Probablemente. Pero «probablemente» es una palabra peligrosa en una base de datos. Aquí la identidad se infiere comparando rasgos (nombre, fecha de nacimiento, dirección, teléfono) y calculando una probabilidad de coincidencia. Por encima de cierto umbral, el sistema propone que son la misma persona; por debajo, los deja separados.
El matching probabilístico es un reto de tooling, no de modelo
El modelo te da dónde escribir la conclusión (una tripleta
mismo_que, idealmente reificada con su grado de confianza) pero no resuelve por
ti el cálculo. Emparejar a ciegas funde a dos personas distintas; ser demasiado cauto deja
la historia partida en pedazos. Es un problema abierto de herramientas e infraestructura, y
por eso lo retomamos sin rodeos en el capítulo 30, «Qué
falta», entre las piezas que aún hacen falta para que esto sea de uso diario.
El modelo: una persona canónica con identidades colgando
Con las tres vías sobre la mesa, el patrón de modelado es directo. Existe una
identidad canónica (un único nodo en Q, persona_vega) y, a su
alrededor, los identificadores locales de cada sistema, unidos a ella por mismo_que.
Cada sistema sigue usando su rótulo de siempre, sin renunciar a nada; el grafo se encarga de
que todos esos rótulos converjan en una sola persona.
(persona_vega, instancia_de, persona) ∈ M(Q, K) // la identidad canónica
(persona_vega, documento_dni, "20148833") ∈ M(Q, K) // su clave natural
(cliente_1042, mismo_que, persona_vega) ∈ M(Q, Q) // alias de la tienda
(paciente_vega, mismo_que, persona_vega) ∈ M(Q, Q) // alias de la clínica
(contribuyente_77_3389, mismo_que, persona_vega) ∈ M(Q, Q) // alias de la municipalidad
// y los hechos de cada sistema cuelgan de su propio puntero, como siempre:
(venta_001, comprador, cliente_1042) ∈ M(O, Q) // la tienda vendió la camiseta_88
(urgencias_2026_071, paciente, paciente_vega) ∈ M(O, Q) // la clínica abrió el episodio
Observa el reparto de trabajo. Cada sistema escribe sus hechos contra su puntero,
como lo ha hecho siempre, sin coordinarse con nadie: la tienda no necesita saber que la
clínica existe. La única tripleta que cruza fronteras es la afirmación de identidad. Resolver
un grafo de muchos sistemas no exige reescribir los datos de cada uno: exige tender los hilos
mismo_que que faltan. El resto del tejido ya estaba.
Reconciliar que el Juan Vega de la tienda, el de la clínica y el de la municipalidad son uno solo no sirve únicamente para ese Juan. Hecho a escala, es lo que permite el padrón único: cruzar los registros de todas las personas repartidas entre sistemas y contarlas una sola vez, sin duplicados.
No es una decisión numerada: es una convención de fondo
Vale la pena ser explícito sobre el estatus de esto. La resolución de identidad no introduce una regla de diseño nueva al modo de las que hemos ido numerando (no hay aquí ninguna maquinaria que no existiera ya). Es, más bien, una convención fuerte que se desprende de piezas que el lector ya conoce: la entidad del eje Q como referente, el cable como referencia, la reificación como dirección estable. La identidad emerge de juntarlas bien, no de añadir nada.
Principio de identidad canónica
Cada individuo del mundo se modela como una sola identidad
canónica en el eje Q. Los identificadores que cada sistema le asigna son
punteros locales que apuntan a ella mediante mismo_que. Un sistema escribe sus
hechos contra su propio puntero; el grafo los reconcilia siguiendo los alias hasta la
identidad canónica. Resolver la identidad no es fundir datos: es declarar
referencias.
Por qué esto sostiene toda la promesa del libro
Detente a imaginar la consulta que da sentido a este libro entero: «muéstrame todo lo que
el sistema sabe de Juan Vega». Sus compras en la tienda, su episodio en urgencias, sus
arbitrios en la municipalidad (tres dominios que nunca fueron diseñados para hablarse) reunidos
en una sola respuesta coherente. Esa consulta es la prueba viviente de la interoperabilidad
que la introducción prometió. Y es imposible sin resolución de identidad: sin las
flechas mismo_que, la pregunta «¿qué sabemos de Juan?» se rompe en tres
preguntas que ningún sistema puede juntar, porque ninguno reconoce al Juan del otro.
De aquí brota un principio que reaparecerá con fuerza cuando lleguemos a la municipalidad: el principio de «una sola vez». Si la clínica ya verificó la dirección de Juan, la municipalidad no debería volver a pedírsela; si la tienda ya tiene su correo, ningún tercer sistema tendría por qué exigirlo de nuevo. El dato vive una vez, en el individuo canónico, y todos los sistemas que lo conocen lo consultan allí.
Ese principio («no vuelvas a pedir lo que otro sistema ya sabe») es la cara amable de la resolución de identidad para el ciudadano, el paciente, el cliente. Lo que para el ingeniero es un puntero compartido, para la persona es no tener que llenar el mismo formulario tres veces. La identidad bien resuelta no es una sutileza técnica: es lo que convierte un montón de sistemas aislados en algo que, por fin, se comporta como si supiera quién eres.
Un identificador es un papelito que dice dónde mirar; la identidad es lo que encuentras al mirar. El error de toda torre de Babel es confundir el papelito con la persona.La tesis del capítulo
En la práctica
Cuando integres un sistema nuevo al grafo, no intentes
renumerar sus identificadores: déjalos como están y tiende los mismo_que.
Prioriza siempre la vía 1 (busca una clave natural con autoridad externa antes que
cualquier otra cosa), porque convierte la resolución en una deducción y no en una apuesta.
Reserva el matching probabilístico para cuando no quede
alternativa, y cuando lo uses, guarda la confianza: reifica el
mismo_que con quién lo afirmó, cuándo y con qué grado de certeza. Una fusión de
identidades que no puedes auditar es una fusión que no puedes deshacer.
Con esto, la Parte III queda completa: tenemos el hecho atómico, el espacio donde vive, las situaciones que lo enriquecen, la causalidad que lo enlaza y, ahora, la identidad que permite que todo eso cruce de un sistema a otro sin perderse. Lo que sigue es tender la mano a los mundos vecinos (los objetos de la programación, los bits, los grafos, las cadenas de bloques) y mostrar que el modelo no es una isla, sino un puente.