Diagrama entidad-relación

Entidades de un dominio y sus relaciones.

Definición

El diagrama entidad-relación dibuja las tablas de un modelo de datos con sus columnas, marcando las claves (PK, FK), y une las tablas con líneas que llevan en cada extremo su cardinalidad: la horquilla de muchos, la barra de uno y el círculo de cero. Se lee mirando los extremos, sobre todo si admiten el cero. Sirve para diseñar, documentar o revisar una base de datos.

Ninguna relación obliga a que una reserva tenga titular
Datos
category · label · y · x · series · order · source · target · value · value2 · size
Buena para
Enseñar las tablas de un modelo, sus claves y si cada relación admite el cero en sus extremos.
Evítala cuando
Cuando el público no necesita claves ni cardinalidades y le basta con los tipos de cosas y cómo se relacionan.
Se lee bien
Entre 3 y 15 elementos; dibuja hasta 15
Datos que faltan
Se niega a dibujar y dice qué valor falta.
Accesibilidad
Lector de pantalla: tabla de datos · respeta «reducir movimiento»

Forma de los datos

Qué columnas pide

ColumnaTipoPara qué
categorystringLo único que distingue las DOS clases de fila de esta tabla: «entidad» o «vista» si la fila es una caja, «relacion» si es una línea. Un valor desconocido FALLA con la lista de los tres y una sugerencia; un spec sin ninguna fila con Tipo legible FALLA diciendo cuántas filas trajo y qué columnas sí traía, en vez de dibujar el ejemplo de la pieza.
labelstringEl nombre de la tabla, que es además su CLAVE: es lo que las relaciones escriben en «Desde» y «Hasta». Dos cajas con el mismo nombre fallan. En una fila de relación es el verbo que se rotula sobre la línea («figura como titular de»).
y · opcionalnumberLa fila lógica de la caja, entero ≥ 0. OPCIONAL: sin ella la coloca la retícula compartida del kit. Va EN PAREJA con «Columna»: media coordenada falla, porque declarar sólo una planta la caja encima de otra sin que nada lo diga.
x · opcionalnumberLa columna lógica de la caja, entero ≥ 0. OPCIONAL y en pareja con «Fila».
series · opcionalstringLas columnas de la tabla, separadas por «|», cada una con su marca de clave delante: «PK localizador: texto | FK id_huesped: entero, nulo | entrada: fecha». Las marcas son PK, FK y PK/FK (también CP y CA); lo que no lleve prefijo es una columna normal. Es el rol canónico más cercano —el vocabulario no tiene una palabra para «las columnas de esta tabla»— y por eso lleva esta nota. Una entidad SIN ninguna PK falla; una vista CON PK, también.
order · opcionalstringUna línea al pie de la caja: por qué esa tabla no existe todavía, de dónde sale una vista, cuándo se rellena una clave ajena. OPCIONAL, hasta dos líneas. Es el rol canónico más cercano; el vocabulario no tiene «detalle».
source · opcionalstringEl Nombre de la caja de la que sale la relación. Sólo se lee en las filas de tipo «relacion», y ahí es obligatorio: una relación sin los dos extremos falla nombrando el que falta.
target · opcionalstringEl Nombre de la caja a la que llega la relación. Obligatorio en las relaciones.
valuestringLa pata de gallo del extremo de ORIGEN, y el vocabulario está CERRADO en cuatro: 1 (exactamente uno), 0..1 (cero o uno), 1..N (uno o muchos), 0..N (cero o muchos). Se admiten «*» por «N» y «1..1» por «1», que no cambian lo que se afirma. Un «N» a secas FALLA —no dice si el cero está admitido, que es lo que esta notación existe para afirmar— y un «2..5» también, porque un mínimo distinto de 0 o 1 es una restricción de negocio. Obligatoria en toda relación. Es el rol canónico más cercano: el vocabulario no tiene «cardinalidad».
value2stringLa pata de gallo del extremo de DESTINO. Mismo vocabulario cerrado de cuatro, y también obligatoria.
size · opcionalnumberPíxeles que se desplaza el pasillo de trazado cuando dos relaciones unen las mismas cajas y se montan. Es un ajuste de TRAZADO, no una magnitud: no dimensiona nada y no se lee. Es el rol canónico más cercano; el vocabulario no tiene «desvío de pasillo».

Tamaños

Ancha por necesidad

Esta pieza necesita anchura para que cada rótulo quepa entero. El motor prefiere decirlo a apretarla.

A menos de 480 px sus rótulos no caben sin pisarse o recortarse, y el motor no la publica así. En el móvil se ve la versión ancha, a tamaño legible y sin recortar, dentro de un marco que se desliza.

Cuándo usarla

Tres preguntas antes de elegirla

¿Hablas de tablas con columnas y claves?

Si es un modelo conceptual de tipos de cosas, el mapa de ontología es más ligero.

Sí: quédate con diagrama entidad-relación

No: usa Mapa de ontología

¿Es un modelo de datos y no la arquitectura del software?

Si lo que hay que dibujar son sistemas, contenedores y quién llama a quién, usa el diagrama C4.

Sí: quédate con diagrama entidad-relación

No: usa Diagrama C4

¿Interesa una sola versión del modelo?

Si hay que contar qué cambió de una versión a otra, las diferencias entre versiones lo hacen directamente.

Sí: quédate con diagrama entidad-relación

No: usa Diferencias entre versiones

Código

La misma pieza, con tus datos

import { getPreset, renderComposition } from 'visx-render/node';

const spec = await getPreset('concept-erd');
spec.data.rows = misFilas; // category, label, value, value2
const { svg, warnings } = await renderComposition(spec);

También en React con Chart y prepareComposition. Guía para desarrolladores →

Dudas

¿Qué cardinalidades admite?

Cuatro en cada extremo: 1, 0..1, 1..N y 0..N. Una «N» a secas hace fallar la pieza, porque no dice si el cero está admitido.

¿Cómo escribo las columnas de una tabla?

Separadas por «|», con la marca de clave delante cuando la tienen: PK, FK o PK/FK.

¿Por qué tanto énfasis en el cero?

Porque lo que decide si dos recuentos cuadran es si una relación admite el cero en un extremo, y escrito como «1» o «0..1» se confunde fácilmente.

¿Qué hace si faltan datos?

Se niega a dibujar y dice qué valor falta.

¿Cómo se ve en el móvil?

A menos de 480 px el motor no la compone sin pisar o cortar rótulos, y lo dice. En el móvil se ve la versión ancha, a tamaño legible, dentro de un marco que se desliza.

Relacionadas

Otras formas de responder «cómo funciona algo»

Guía para elegir: cómo funciona algo →