Las relaciones entre tablas son la asociaciones, vinculaciones o correspondencia entre tablas que un motor de bases de datos relacionales debe mantener para mantener la integridad de la información. Si se tiene una tabla de alumnos, por citar un ejemplo, debe mantener una relación con la tablas de calificaciones para asegurarse de que no haya calificaciones de un alumno que no exista. Si se establece una relación entre alumnos y las calificaciones entonces la base de datos se asegurará que exista un «hijo» (calificación) para cada «padre» (alumno).
Generalmente las asociaciones requieren de al menos dos tablas y existen 3 tipos de relaciones entre tablas:
- Uno a 1 (1:1)
- Uno a muchos (1:n)
- Muchos a muchos (n:m)
Relaciones uno a uno (1:1)
Es la relación existente entre dos tablas de tal forma que siempre, para cada registro en una tabla, exista un registro en la otra tabla.
Regularmente las dos tablas tienen la misma llave primaria por que tienen información del mismo concepto.
Es relativamente raro, en un buen diseño de base de datos, encontrarse con relaciones uno a uno, por que significaría que los datos de un mismo tema o concepto están «repartidos» en dos tablas diferentes, por lo que siempre hay que analizar si vale la pena mantener las tablas separadas o lo mejor sería unir los campos de una con los campos del otro, ya que tienen la misma llave primaria.
Ejemplos de relaciones uno a uno (1:1)
- Si en una base de datos de una tienda tiene una tabla de clientes (con sus datos generales) y un programa de fidelidad de clientes (donde se asigna una credencial por cliente) necesite por tanto una tabla -además de la de clientes- para los datos de las credenciales. Si siempre existe una credencial para cada cliente.
- En una base de datos escolar, los datos del alumno podrían estar en una tabla y los datos del padre o tutor podría estar en una tabla adicional (considerando que los datos de los tutores son raramente ocupados y que por tanto es viable mantenerlos en una tabla separada)
¿Cuándo sería justificable una relación uno a uno?
Existen algunas situaciones donde quizá se pueda justificar el tener relaciones uno a uno, entre las cuales se podrían mencionar:
- Cuando se tienen que añadir campos a una tabla pero la forma en la que se han escrito los querys (por malas prácticas como usar «SELECT * FROM…» por ejemplo) hace muy arriesgado añadir campos en una tabla existente, y el camino seguro será mantener una tabla adicional con los campos adicionales. Si bien no es una buena práctica, si puede minimizar riesgos.
- Cuando hay un particionamiento de información y algunos campos, que son poco utilizados (comparados con los demás), se pueden mantener en una tabla diferente y por tanto en una partición diferente. Esto se presentaría, por ejemplo, con los datos de un domicilio (calle, colonia, barrio, ciudad, estado, país, etc.) que quizá no es muy utilizado y entonces se podría mantener en una partición separada del resto de datos de una tabla.
Relaciones uno a muchos (1:n)
El caso más común de relaciones, por mucho, es de una relación uno a muchos o 1:n (donde n puede ser cero inclusive), lo que significa que las ocurrencias de tabla o entidad están relacionadas con muchas ocurrencias de otra relación o tabla. En este caso un «padre» puede tener muchos «hijos» (o ninguno)
Ejemplos de relaciones uno a muchos (1:n)
- En una base de datos de registro vehicular podrá existir una tabla de automóviles (con datos como números de serie, año, modelo, marca, etc.) y una tabla adicional con los dueños que ha tenido (un automóvil puede tener muchos dueños durante su vida) por ejemplo.
- En un sistema de ventas puede existir una tabla general de ventas /número de ticket, fecha, vendedor, cliente, etc.) y una tabla con los productos adquiridos por el cliente en dicha venta (productos, cantidad, monto pagado, etc.)
En muchos casos de relaciones uno a muchos se dice que hay una relación padre-hijo (1 y n respectivamente) o una relación maestro-detalle.
En este tipo de relaciones, lo más común es que el hijo tenga la llave primaria formada por la llave primaria del padre más un campo adicional que permita dar unicidad a los registros. La llave primaria de la primer tabla en la segunda tabla se llama llave foránea.
Relaciones muchos a muchos (n:m)
Ocurre cuando se asocian una ocurrencia en una relación o tabla, con muchas ocurrencias en la otra relación y viceversa. Conceptualmente un alumno tiene una relación muchos a muchos con las calificaciones ya que un alumno tiene una calificación para cada materia cursada, pero una materia tiene muchas calificaciones (uno por cada alumno que la ha cursado).
Si bien conceptualmente existe la relación muchos a muchos, en una base de datos relaciones no es posible realizarlas y lo que se tiene que realizar es ocupar una tabla intermedia llamada tabla transitiva o tabla asociativa con dos relaciones uno a muchos.
En el caso de los alumnos y calificaciones se tendrá una tabla de alumnos y una tabla de materias, pero enmedio de ellas existirá una tabla asociativa con las materias cursadas por los alumnos y la calificación que obtuvieron. De esta manera se establece una relacion 1:n entre alumno-tabla transitiva y una relación también 1:n entre materias-tabla transitiva.
Regularmente la llave primaria de la tabla transitiva se forma de las llaves primarias de las otras dos tablas, es decir, su llave primaria se forma solo de llaves foráneas.