Archyno
Data modellingReferencia de notación

La notación pata de gallo

Dos símbolos en cada extremo de una línea, y entre ambos codifican todas las cardinalidades que una base relacional puede imponer. Toda la notación cabe en un párrafo; poner los extremos en el sentido correcto lleva algo más.

8 min de lecturaER - crow's foot2 de 3

La respuesta corta

  • Dos símbolos por extremo: el interior es el mínimo (círculo cero, raya uno), el exterior es el máximo (raya uno, pata de gallo muchos).
  • Los símbolos van en un extremo y restringen ese extremo, pero se leen desde el otro. Leerlos al revés es el error más común de la notación.
  • Una línea continua es una relación identificadora: la clave del padre forma parte de la del hijo. Discontinua significa que la clave ajena es un atributo corriente.
  • Una base relacional no puede almacenar muchos-a-muchos. Cualquier línea así en un modelo lógico es una nota de que falta una tabla de unión.
Cuatro relaciones ER, una por cada par de cardinalidades. Un pedido lo factura exactamente una factura. A un empleado se le asigna cero o una plaza de aparcamiento. Un pedido contiene una o más líneas de pedido. Un cliente hace cero o más pedidos.
Cuatro líneas, cuatro cardinalidades. Cada par de símbolos se lee en el extremo en el que está, y describe la entidad de ese extremo.

01Tres símbolos, cuatro combinaciones#

La pata de gallo -propiamente, la notación Information Engineering- pone dos marcas en cada extremo de cada línea de relación. La que está más lejos de la entidad es el máximo, y la que está más cerca es el mínimo.

ElementoNotaciónQué significa
Barraun trazo que cruza la líneaUno. Como marca exterior significa «como mucho uno»; como interior, «al menos uno».
Pata de gallotres puntasMuchos. Siempre marca exterior: un máximo sin techo.
Círculoun anillo pequeñoCero. Siempre marca interior: la relación es opcional.

Combínalos y hay exactamente cuatro posibilidades, que son toda la notación:

ElementoNotaciónQué significa
Exactamente unoBarra y barra. Obligatorio, único.
Cero o unoCírculo y luego barra. Opcional, único.
Uno o másBarra y luego pata de gallo. Obligatorio, múltiple.
Cero o másCírculo y luego pata de gallo. Opcional, múltiple.

02Qué extremo describe el símbolo#

Esto es lo único de la pata de gallo que va de verdad contra la intuición, y explica la mayoría de los diagramas mal leídos. Los símbolos de un extremo describen la entidad de ese extremo, y se leen al viajar hacia ella.

En la cuarta línea del diagrama de arriba, la pata de gallo está en el extremo de Order. No significa «muchos clientes». Significa: para un cliente hay cero o más pedidos. Dilo como un trayecto -«salgo de un cliente, sigo la línea y llego a cero o más pedidos»- y la dirección deja de ser ambigua.

Un hábito práctico que elimina el problema del todo: escribe la frase verbal en la línea en el sentido de lectura, y comprueba la lectura inversa en voz alta antes de seguir. Treinta segundos por relación, y caza errores que sobreviven meses en un documento.

03Identificativa y no identificativa#

El estilo de línea lleva una segunda información, y va de claves, no de cantidades.

ElementoNotaciónQué significa
No identificativaDiscontinua. El hijo tiene su propia clave primaria y solo mantiene una clave ajena hacia el padre. Una Order tiene un order_id y registra aparte a qué cliente pertenece. El caso habitual.
IdentificativaSólida. La clave del padre es parte de la clave primaria del hijo, así que el hijo no puede existir ni identificarse sin ella. Una entidad débil.

La prueba es una pregunta: ¿podría identificarse esta fila sin conocer a su padre? Una línea de pedido número 3 no significa nada sin saber de qué pedido: eso es identificativa. Un pedido que pertenece al cliente 41 sigue siendo el pedido 8817 pase lo que pase: eso es no identificativa.

04Resolver un muchos-a-muchos#

Resolución de una relación muchos a muchos. Arriba, Student y Course unidos por una línea muchos a muchos. Abajo, el mismo par unido a través de una entidad de unión Enrolment, donde un estudiante tiene cero o más matrículas y un curso tiene cero o más matrículas.
La línea de arriba es legal en un modelo conceptual e inimplementable en cualquier base de datos relacional. La de abajo es el mismo hecho, almacenado.

Una pata de gallo en ambos extremos dice «muchos a muchos», y ninguna base de datos relacional puede almacenar eso en dos tablas. La relación se convierte en una entidad propia -de unión, asociativa o de enlace- que mantiene una clave ajena hacia cada lado.

De ahí se siguen dos cosas, y la segunda es la razón de hacerlo pronto y no en el momento de implementar:

  1. La entidad de unión suele tener atributos propios. Una matrícula tiene fecha, nota, estado. Esos atributos no tenían dónde vivir mientras la relación era una línea, y su ausencia escondía un hueco en el modelo.
  2. La entidad de unión merece un nombre de verdad. Enrolment, Booking, Assignment, no StudentCourse. Un experto del dominio reconoce el primero y no puede revisar el segundo, y ese nombre suele ser una palabra que el negocio ya usa.

Fíjate en las claves de la entidad de unión de arriba: ambas claves ajenas juntas forman la clave primaria, y eso es lo que impide que el mismo estudiante se matricule dos veces en el mismo curso. Esa restricción salió gratis de modelarlo bien, y de otro modo habría sido una validación que alguien recordó escribir.

05Frente a las alternativas#

ElementoNotaciónQué significa
Notación de Chenrombos y óvalosLa original. Las relaciones son rombos y los atributos óvalos colgando de las entidades, lo que es expresivo y ocupa cuatro veces más espacio. Común en la enseñanza, rara en la práctica.
Multiplicidad UML0..1, 1..*Números escritos en los extremos de la línea en vez de símbolos. Más preciso -puede decir 2..5- y más lento de recorrer con la vista sobre una pared de tablas.
IDEF1Xcírculos rellenosUn estándar federal estadounidense, cercano a la pata de gallo con símbolos distintos y reglas más estrictas sobre relaciones identificativas. Te lo encontrarás en administración pública y defensa.
Pata de galloCompacta, legible a distancia y entendida por cualquier herramienta de base de datos. La opción por defecto por buenas razones.

Úsalo cuando

  • Cualquier diagrama con más de unas seis entidades: sigue siendo legible
  • Un público que incluye DBA e ingenieros de datos
  • Un modelo que acabará en DDL, donde los cuatro casos mapean exactamente a restricciones
  • Trabajo en pizarra, porque los símbolos sobreviven a estar mal dibujados

Usa otra cosa cuando

  • Necesitas un límite del tipo «entre dos y cinco»: usa multiplicidad UML
  • El público es un equipo de software nativo en UML y el modelo son clases del dominio
  • Enseñar los primeros principios, donde los rombos de Chen hacen visible la relación
  • Una relación ternaria, que la pata de gallo no dibuja sin una entidad de unión

Nada de esto es excluyente. Muchísimos proyectos reales dibujan pata de gallo para la base de datos y un diagrama de clases para el modelo del dominio, y mantienen ambos, porque responden a preguntas distintas sobre los mismos sustantivos.

06Errores comunes#

  1. Símbolos en el extremo equivocado. El error más común de la notación. Lee las dos frases en voz alta.
  2. Todo opcional. Un círculo en cada posición interior significa que el modelo no afirma ninguna regla, y cada una acaba siendo código de aplicación.
  3. Muchos-a-muchos dejado en un modelo lógico. Bien conceptualmente, imposible físicamente. Resuélvelo y nombra la unión.
  4. Entidades de unión nombradas por concatenación. OrderProduct no le dice nada a un revisor; OrderLine se lo dice todo.
  5. Confiar solo en el estilo de línea para las relaciones identificativas. Las herramientas discrepan. Muestra también la clave compuesta en la caja.
  6. Relaciones sin etiquetar. El verbo es lo que hace la línea legible en voz alta, y leerla en voz alta es la revisión.

Con la cardinalidad resuelta, la siguiente pregunta es qué tablas debería haber siquiera, y eso es el diseño de esquema: claves, normalización y el viaje de un modelo al DDL.

En una línea cada uno

  1. 01El símbolo exterior es el máximo, el interior es el mínimo.
  2. 02La barra es uno, la pata de gallo es muchos, el círculo es cero.
  3. 03Los símbolos describen la entidad de su propio extremo: léelos hacia ella.
  4. 04Cada relación tiene dos frases verdaderas; comprueba las dos.
  5. 05Sólida significa que la clave del padre es parte de la del hijo; discontinua, que no lo es.
  6. 06Un muchos-a-muchos se convierte en una entidad de unión con nombre, normalmente con atributos propios.

07Preguntas frecuentes#

¿Qué significan los símbolos de pata de gallo?

Hay dos símbolos en cada extremo de la línea. El interior es el mínimo: un círculo para cero, es decir opcional, o una raya para uno, es decir obligatorio. El exterior es el máximo: una raya para uno, o la pata de gallo de tres púas para muchos. Leídos juntos dan cero-o-uno, exactamente-uno, cero-o-más o uno-o-más.

¿A qué extremo de la línea se aplica un símbolo de pata de gallo?

Los símbolos van en un extremo y restringen a la entidad de ese extremo, pero se leen desde el otro. Una pata de gallo junto a Pedido en una relación Cliente a Pedido significa que un cliente tiene muchos pedidos. Leerlo al revés es con diferencia el error más común.

¿Qué diferencia hay entre una relación identificadora y una no identificadora?

En una relación identificadora el hijo no puede existir sin el padre y la clave del padre forma parte de la del hijo, dibujada con línea continua. En una no identificadora la clave ajena es un atributo corriente y el hijo se sostiene solo, dibujada con línea discontinua.

¿Cómo se trata una relación muchos-a-muchos?

Se resuelve en una tabla de unión: una tercera entidad con una clave ajena a cada lado. Una base relacional no puede almacenar muchos-a-muchos directamente, así que cualquier línea de ese tipo que quede en un modelo lógico es una nota de que aún falta una tabla.

¿Cómo se compara pata de gallo con la multiplicidad de UML?

Expresan las mismas restricciones con distinta sintaxis. UML escribe el rango como texto al final de la asociación, por ejemplo 0..1 o 1..*, mientras que pata de gallo lo dibuja como una pareja de símbolos. UML además coloca la multiplicidad en el extremo opuesto a donde la espera un lector de pata de gallo, lo que conviene revisar al pasar de una a otra.

En esta serie
  1. 01Diagramas ER
  2. 02Notación pata de gallo
  3. 03Diseño de esquema

Lecturas relacionadas

Todos los artículos