22. Concepto de relación

Una relación conecta elementos de uno o más conjuntos mediante pares ordenados. Es una idea central para comprender funciones, bases de datos, grafos, permisos, comparaciones y estructuras matemáticas.

22.1 Introducción

En muchos problemas no solo necesitamos conocer elementos aislados, sino también vínculos entre ellos. Una relación permite expresar que un elemento está asociado con otro.

Por ejemplo, un usuario puede tener un permiso, una persona puede vivir en una ciudad, un número puede ser menor que otro o un nodo puede estar conectado con otro nodo.

22.2 Qué es una relación

Una relación entre dos conjuntos A y B es un subconjunto del producto cartesiano A × B.

R ⊆ A × B

Esto significa que una relación selecciona algunos pares ordenados posibles entre elementos de A y elementos de B.

22.3 Relación binaria

Una relación binaria es una relación formada por pares ordenados. Es el caso más común en este curso.

A = {Ana, Luis} B = {leer, editar} R = {(Ana, leer), (Luis, leer), (Luis, editar)}

La relación R indica qué permisos tiene cada usuario.

22.4 Relación como subconjunto del producto cartesiano

Si calculamos todos los pares posibles entre usuarios y permisos, obtenemos el producto cartesiano. La relación real suele contener solo algunos de esos pares.

A × B = {(Ana, leer), (Ana, editar), (Luis, leer), (Luis, editar)} R = {(Ana, leer), (Luis, leer), (Luis, editar)}

Como todos los pares de R están dentro de A × B, se cumple R ⊆ A × B.

22.5 Notación de relación

Si un par (a, b) pertenece a una relación R, podemos escribirlo de varias formas.

Notación Lectura Significado
(a, b) ∈ R El par (a, b) pertenece a R a está relacionado con b
a R b a está relacionado con b por R Forma abreviada
(a, b) ∉ R El par (a, b) no pertenece a R a no está relacionado con b

22.6 Ejemplos de relaciones

Relación Conjuntos Ejemplo de par
Usuario tiene permiso Usuarios × Permisos (Ana, leer)
Producto pertenece a categoría Productos × Categorías (teclado, periféricos)
Número menor que otro Números × Números (2, 5)
Ciudad pertenece a país Ciudades × Países (Córdoba, Argentina)
Nodo conectado con nodo Nodos × Nodos (A, B)

22.7 Relaciones dentro de un mismo conjunto

Una relación también puede definirse entre elementos del mismo conjunto. En ese caso, la relación es un subconjunto de A × A.

A = {1, 2, 3} R = {(1, 2), (1, 3), (2, 3)}

Esta relación podría representar "menor que" dentro del conjunto A.

22.8 Relación dirigida

Como las relaciones usan pares ordenados, el sentido importa. El par (a, b) no significa lo mismo que (b, a).

(usuario, permiso) no es lo mismo que (permiso, usuario)

Esto es especialmente importante en grafos dirigidos, permisos, dependencias y asociaciones entre entidades.

22.9 Relación vacía y relación total

La relación vacía no contiene pares. La relación total contiene todos los pares del producto cartesiano.

Relación vacía: R = ∅ Relación total: R = A × B

Entre esos dos extremos existen muchas relaciones posibles.

22.10 Representación mediante tabla

Una relación puede representarse como una tabla de pares.

Usuario Permiso
Ana leer
Luis leer
Luis editar

Cada fila representa un par ordenado de la relación.

22.11 Representación mediante diagrama

Otra forma de representar una relación es dibujar flechas desde elementos del primer conjunto hacia elementos del segundo conjunto.

Ana → leer Luis → leer Luis → editar

Esta representación hace visible qué elementos están conectados.

22.12 Representación en JavaScript

En JavaScript, una relación puede representarse como un arreglo de pares.

const relacionPermisos = [
  ["Ana", "leer"],
  ["Luis", "leer"],
  ["Luis", "editar"]
];

console.log(relacionPermisos);

Cada arreglo interno representa un par ordenado.

22.13 Consultar una relación en JavaScript

Podemos consultar si un par pertenece a una relación usando some.

const relacionPermisos = [
  ["Ana", "leer"],
  ["Luis", "leer"],
  ["Luis", "editar"]
];

function perteneceRelacion(relacion, a, b) {
  return relacion.some(([origen, destino]) =>
    origen === a && destino === b
  );
}

console.log(perteneceRelacion(relacionPermisos, "Ana", "leer"));
console.log(perteneceRelacion(relacionPermisos, "Ana", "editar"));

La primera consulta es verdadera y la segunda es falsa.

22.14 Relación como estructura de acceso rápido

Si necesitamos muchas consultas, podemos representar la relación con un Set de claves serializadas.

const relacionPermisos = [
  ["Ana", "leer"],
  ["Luis", "leer"],
  ["Luis", "editar"]
];

const clavesRelacion = new Set(
  relacionPermisos.map(([usuario, permiso]) => `${usuario}:${permiso}`)
);

console.log(clavesRelacion.has("Luis:editar"));
console.log(clavesRelacion.has("Ana:publicar"));

Esta representación permite consultar pertenencia de pares de forma eficiente.

22.15 Aplicaciones prácticas

Área Relación Ejemplo
Permisos Usuario tiene permiso (Ana, leer)
Bases de datos Registro se asocia con registro (cliente, pedido)
Grafos Nodo conectado con nodo (A, B)
Ordenamiento Elemento menor o igual que otro (2, 5)
Funciones Entrada se asocia con salida (x, f(x))

22.16 Errores frecuentes

  • Confundir una relación con el producto cartesiano completo.
  • Olvidar que una relación es un subconjunto del producto cartesiano.
  • Confundir pares ordenados con conjuntos de dos elementos.
  • Invertir el orden de los componentes de un par.
  • Suponer que toda relación debe ser una función.

22.17 Qué debes recordar de este tema

  • Una relación entre A y B es un subconjunto de A × B.
  • Una relación binaria está formada por pares ordenados.
  • El orden de los componentes del par importa.
  • Una relación puede representarse como conjunto de pares, tabla, flechas o estructura de datos.
  • Las funciones son un tipo especial de relación.
  • En JavaScript, una relación puede representarse como arreglo de pares o como Set para consultas rápidas.

22.18 Conclusión

El concepto de relación permite describir vínculos entre elementos. A partir de pares ordenados y producto cartesiano, podemos construir modelos para permisos, grafos, bases de datos, comparaciones y funciones.

En el próximo tema estudiaremos dominio, codominio e imagen de una relación.