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.
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.
Una relación entre dos conjuntos A y B es un subconjunto del producto cartesiano A × B.
Esto significa que una relación selecciona algunos pares ordenados posibles entre elementos de A y elementos de B.
Una relación binaria es una relación formada por pares ordenados. Es el caso más común en este curso.
La relación R indica qué permisos tiene cada usuario.
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.
Como todos los pares de R están dentro de A × B, se cumple R ⊆ A × B.
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 |
| 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) |
Una relación también puede definirse entre elementos del mismo conjunto. En ese caso, la relación es un subconjunto de A × A.
Esta relación podría representar "menor que" dentro del conjunto A.
Como las relaciones usan pares ordenados, el sentido importa. El par (a, b) no significa lo mismo que (b, a).
Esto es especialmente importante en grafos dirigidos, permisos, dependencias y asociaciones entre entidades.
La relación vacía no contiene pares. La relación total contiene todos los pares del producto cartesiano.
Entre esos dos extremos existen muchas relaciones posibles.
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.
Otra forma de representar una relación es dibujar flechas desde elementos del primer conjunto hacia elementos del segundo conjunto.
Esta representación hace visible qué elementos están conectados.
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.
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.
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.
| Á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)) |
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.