Una relación 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 uno a muchos en una base de datos es el diseño de base de datos relacional más común y está en el corazón del buen diseño.
Considerar la relación entre un profesor y los cursos que imparten. Un profesor puede enseñar varios cursos, pero el curso no tendría la misma relación con el profesor.
Por lo tanto, para cada registro en una tabla de profesores, puede haber muchos registros en la tabla de cursos. Esta es una relación de uno a muchos: un maestro a varios cursos.
Por qué es importante establecer una relación uno a muchos
Para representar una relación de uno a varios, necesita al menos dos tablas. A ver por qué.
Quizás creamos una tabla en la que queríamos registrar el nombre y los cursos impartidos. Podríamos diseñarlo así:
ID del profesor | Nombre del profesor | Curso |
---|---|---|
Profesor_001 | Carmen | Biología |
Profesor_002 | Verónica | Mates |
Profesor_003 | Jorge | Inglés |
¿Qué pasa si Carmen enseña dos o más cursos? Tenemos dos opciones con este diseño. Podríamos simplemente agregarlo al registro existente de Carmen, así:
ID del profesor | Profesor_Nombre | Curso |
---|---|---|
Profesor_001 | Carmen | Biología, matematicas |
Profesor_002 | Verónica | Mates |
Profesor_003 | Jorge | Inglés |
Sin embargo, el diseño anterior es inflexible y podría ocasionar problemas más adelante al intentar insertar, editar o eliminar datos.
Hace difícil la búsqueda de datos. Este diseño viola el primer principio de la normalización de la base de datos, Primera forma normal (1NF), que establece que cada celda de la tabla debe contener una pieza de datos única y discreta.
Otra alternativa de diseño podría ser simplemente agregar un segundo registro para Carmen:
Profesor_CARNÉ DE IDENTIDAD | Profesor_Nombre | Curso |
---|---|---|
Profesor_001 | Carmen | Biología |
Profesor_001 | Carmen | Mates |
Profesor_002 | Verónica | Mates |
Profesor_003 | Jorge | Inglés |
Esto se adhiere a 1NF pero sigue siendo un diseño de base de datos deficiente porque introduce redundancia y podría inflar innecesariamente una base de datos muy grande. Más importante aún, los datos podrían volverse inconsistentes. Por ejemplo, ¿qué pasa si el nombre de Carmen cambia? Alguien que trabaje con los datos puede actualizar su nombre en un registro y no actualizarlo en el segundo registro. Este diseño viola la Segunda Forma Normal (2NF), que se adhiere a 1NF y también debe evitar las redundancias de varios registros al separar los subconjuntos de datos en varias tablas y crear una relación entre ellos.
Cómo diseñar una base de datos con relaciones uno a varios
Para implementar una relación de uno a varios en la tabla de profesores y cursos, dividimos las tablas en dos y las vinculamos utilizando una clave externa.
Aquí, hemos eliminado la columna del curso en la tabla de profesores:
Profesor_CARNÉ DE IDENTIDAD | 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 de profesores:
Course_ID | Nombre del curso | ID del profesor |
---|---|---|
Curso_001 | Biología | Profesor_001 |
Curso_002 | Mates | Profesor_001 |
Curso_003 | Inglés | Profesor_003 |
Hemos desarrollado una relación entre los profesores y la tabla de cursos utilizando una clave externa.
Esto nos dice que tanto la biología como las matemáticas son enseñadas por Carmen y que Jorge enseña inglés.
Podemos ver cómo este diseño evita cualquier posible redundancia, permite que los maestros individuales enseñen varios cursos e implementa una relación de uno a varios.
Las bases de datos también pueden implementar una relación de uno a uno y una relación de muchos a muchos.