Relaciones de base de datos SQL
Como hemos visto, el modelo relacional se basa en las relaciones existentes entre las diferentes tablas de base de datos (BBDD). En esta sección nos centraremos en explicar y ejemplificar los diferentes tipos de relaciones imprescindibles en la administración de bases de datos relacionales.
Los ejemplos de esta sección se basan en capturas de diagramas definidos desde el editor de Sql Server Management Studio (SSMS). Esta sección solo tiene objetivo de explicar conceptualmente los fundamentos de los diferentes tipos de relaciones.
Relación 1 a 1
Este tipo de relación entre dos tablas se establece cuando un registro de una tabla solo puede estar vinculado a un único registro en otra tabla. Este tipo de relación se utiliza generalmente para relaciones exclusivas cuando tenemos gran cantidad de campos. Dicha relación nos permite dividir la información en tablas más pequeñas con menos cantidad de campos y facilitar la gestión de nuestras bases de datos.
Dicha relación se establece a través de una Foreign Key que se vincula directamente con la Primary Key de la tabla principal. En este tipo de relaciones será indistinto que tabla considerar principal y que tabla dependiente para establecer la Foreign Key, siendo ello decisión de diseño del administrador de acuerdo a los datos que guardar en las tablas.
En este ejemplo podemos observar cómo se establece una relación 1 a 1 entre las tablas paises y banderas, ya que un país solo puede tener asociada una bandera y una bandera solo puede pertenecer a un país. Constituye un tipo de relación muy utilizada que nos permite organizar los datos de manera eficiente y sencilla.
Se ha considerado la tabla paises como tabla principal. De esta manera nos aseguramos que no se puedan guardar banderas en el sistema de países que aún no se han registrado en la base de datos.
Relación 1 a n
Este tipo de relación entre dos tablas, también llamada relación 1 a muchos, se establece cuando un registro de una tabla puede estar asociado a varios registros de otra tabla, pero no de manera inversa.
En este caso la Foreign Key siempre se definirá en la tabla secundaria o dependiente, la cual podrá repetirse n veces en función a la Primary Key con la que se establece la relación.
En este ejemplo podemos ver como se establece una relación 1 a n entre la tabla clientes y la tabla pedidos ya que un cliente puede tener varios pedidos y varios pedidos solo pueden pertenecer a un cliente.
La Primary Key de un cliente podría repetirse varias veces en la Foreign Key de la tabla pedidos (id_clientes
) para guardar la información de todos los pedidos realizados por un cliente determinado.
Relación n a n
El tipo de relación n a n o muchos a muchos se establece cuando varios registros de una tabla se asocian a varios registros de la otra. Para ello es necesario definir una tercera tabla intermedia para establecer primero dos relaciones 1 a n y poder vincular correctamente las dos tablas principales.
Usualmente la Primary Key de la tercera tabla intermedia será una clave Compuesta o Composite key de las Primary Key de las dos tablas principales y a través de dichas claves formará dos Foreign Key a cada tabla con la que establece relación. Además, esta tercera tabla aparte de establecer las relaciones intermedias, también podrá guardar información adicional como por ejemplo información de auditoría u otros datos importantes del establecimiento de la relación.
En este ejemplo podemos ver como se establece una relación n a n entre la tabla alumnos y asignaturas ya que los alumnos pueden tener varias asignaturas y las asignaturas pueden tener varios alumnos.
Vemos que para establecer dicha relación se necesita una tercera tabla intermedia llamada asignaturasAlumnos que además guarda información adicional como la fecha en la que un alumno determinado se matricula de una asignatura específica.
Observamos igualmente que la Primary Key de la tabla asignaturasAlumnos es la concatenación de idAlumnos
e idAsignaturas
dando lugar a una CompositeKey. A su vez idAlumnos
forma la ForeignKey que se relaciona con la tabla alumnos e idAsignaturas
la ForeignKey vinculada a la tabla asignaturas.