Una relación de uno a varios en una base de datos ocurre cuando cada registro en la Tabla A puede tener muchos registros vinculados en la Tabla B, pero cada registro en la Tabla B puede tener solo un registro correspondiente en la Tabla A.
Una relación de uno a varios en una base de datos es el diseño de base de datos relacional más común y es la base de un buen diseño.
Las bases de datos también pueden implementar una relación uno a uno y una relación muchos a muchos.
Ejemplo de una relación de uno a muchos
Considere la relación entre un maestro y los cursos que imparte. Un profesor puede impartir varias clases, pero el curso no tendría la misma relación con el profesor.
Por lo tanto, para cada registro en una tabla de Profesores, podría haber muchos registros en la tabla de Cursos. Este ejemplo ilustra una relación de uno a muchos: un maestro para varios cursos.
Por qué es importante establecer una relación de uno a varios
Para representar una relación de uno a muchos, necesita al menos dos tablas. Veamos por qué.
Adherencia al diseño de la primera forma normal
Quizás creamos una tabla en la que queremos registrar el nombre y los cursos impartidos. Podríamos diseñar una tabla de Profesores y Cursos como esta:
Id_del_profesor | Nombre_del_profesor | Curso |
---|---|---|
Profesor_001 | Carmen | Biología |
Profesor_002 | Verónica | Matemáticas |
Profesor_003 | Jorge | Inglés |
¿Qué pasa si Carmen da dos o más cursos? Tenemos dos opciones con este diseño. Podríamos agregarlo al registro existente de Carmen, así:
Id_del_profesor | Profesor_Nombre | Curso |
---|---|---|
Profesor_001 | Carmen | Biología, Matemáticas |
Profesor_002 | Verónica | Matemáticas |
Profesor_003 | Jorge | Inglés |
Sin embargo, el diseño anterior es inflexible y podría generar problemas más adelante al insertar, editar o eliminar datos. Hace que sea difícil buscar datos.
Este diseño también viola el primer principio de la normalización de bases de datos, la primera forma normal (1NF), que establece que cada celda de la tabla debe contener un solo dato discreto.
La regla de la segunda forma normal
Otra alternativa de diseño podría ser agregar un segundo registro para Carmen:
Profesor_ID | Profesor_Nombre | Curso |
---|---|---|
Profesor_001 | Carmen | Biología |
Profesor_001 | Carmen | Matemáticas |
Profesor_002 | Verónica | Matemáticas |
Profesor_003 | Jorge | Inglés |
Este enfoque se adhiere a 1NF pero sigue siendo un diseño de base de datos deficiente porque introduce redundancia y podría inflar una base de datos grande innecesariamente. Más importante aún, los datos podrían volverse inconsistentes.
Por ejemplo, ¿y si cambiara el nombre de Carmen? Alguien que trabaje con los datos podría actualizar su nombre en un registro y no actualizarlo en el segundo registro.
Este diseño viola el estándar Second Normal Form (2NF), que se adhiere a 1NF y también debe evitar las redundancias de múltiples registros. La regla 2NF logra esto separando subconjuntos de datos en múltiples tablas y creando una relación entre ellos.
Cómo diseñar una base de datos con relaciones de uno a varios
Para implementar una relación de uno a varios en la tabla Profesores y Cursos, divida las tablas en dos y vincúlelas usando una clave externa.
Aquí, eliminamos la columna Curso en la tabla Profesores:
Profesor_ID | Profesor_Nombre |
---|---|
Profesor_001 | Carmen |
Profesor_002 | Verónica |
Profesor_003 | Jorge |
Y aquí está la tabla de Cursos. Tenga en cuenta que su clave externa, Teacher_ID, vincula un curso a un profesor en la tabla Teachers:
Curso_ID | Nombre_del_curso | Id_del_profesor |
---|---|---|
Curso_001 | Biología | Profesor_001 |
Curso_002 | Matemáticas | Profesor_001 |
Curso_003 | Inglés | Profesor_003 |
Hemos desarrollado una relación entre la tabla Profesores y Cursos utilizando una clave externa. Este arreglo nos dice que Carmen enseña biología y matemáticas y que Jorge enseña inglés.
Podemos ver cómo este diseño evita posibles redundancias, permite que profesores individuales enseñen varios cursos e implementa una relación de uno a muchos.