Consideraciones sobre las relaciones entre tablas.

 

Sobre las relaciones entre tablas hay muchos criterios, y en más de una ocasión he mantenido largas conversaciones/discusiones con más de un desarrollador de bases de datos.

 

Hay quien defiende que todas y cada una de las tablas de una base han de estar relacionadas, cada tabla debe tener al menos una relación con otra tabla de la base, si una tabla no está relaciona con ninguna otra de la base, esa tabla no pertenece a la tabla.

 

Hay quien sostiene que sus bases las crea sin relaciones entre las tablas.

 

Cuando se discute sobre si relacionar o no las tablas de una base, en mi opinión se está discutiendo sobre si crear o no esa relación, es decir si hacemos que esa relación aparezca en la ventana de relaciones o no, porque nadie discute que entre las tablas de una base existen relaciones.

 

Yo, lo primero que hago es crear las tablas y sus relaciones sin pensar en como podré hacer tal o cual consulta, ni en como será luego tal o cual formulario o informe.

 

Yo aplico el modelo entidad-relación según el cual cada entidad es una tabla y según el cual las tablas están relacionadas con relaciones que creo, es mas, la mayoría de mis relaciones tienen integridad referencial y actualización en cascada, y NO tienen eliminación en cascada.

 

Con la integridad referencial evito asignar a una obra (por ejemplo) un autor que no existe.

 

Con la actualización en cascada tengo la ventaja de que si modifico el valor de la clave principal de un autor, este valor se actualiza en todos los registros relacionados con el autor, estén en la tabla que estén, y evito tener registros huérfanos.

 

No uso la eliminación en cascada para evitar acciones no seseadas. Si creo que un autor no tiene asignada ninguna obra en mi base puedo decidir eliminarlo de mi base. Si tengo eliminación en cascada y me he equivocado y el autor tiene obras asignadas, a Access le da igual y me eliminará el autor y todos los registros (obras y otros) relacionados aunque no fuese lo que yo deseaba. Si NO tengo eliminación en cascada Access me avisará y evitará que elimine mas información de la deseada.

 

Los que no crean las relaciones, usan otros métodos para evitar asignar a una obra un autor que no existe, por ejemplo para asignar los autores lo hacen con listas desplegables que se alimentan de los autores, de forma que el usuario no pueda asignar un autor que no exista.

 

Repito, creo que nadie discute que las tablas autores y obras estén relacionadas, solo que algunos creamos la relación y otro no, pero los que no la crean la tienen presente a la hora de gestionar la información.

 

En cuanto a la propuesta de otros autores de crear las relaciones en las consultas, es una opción que no esta reñida con la de crear las relaciones entre las tablas, y me explico.

 

Si creas una relación entre autores y obras, siempre que en una consulta pongas esas dos tablas, la relación aparecerá, por decirlo de alguna forma la heredan, ahora bien, si para esa consulta en concreto esa relación no la necesitas o te molesta, puedes eliminarla o modificarla dentro de la consulta, y la nueva relación que crees entre esas tablas dentro de esa consulta, solo existirá en esa consulta.

 

La relación que previamente hayas creado entre las tablas no se modifica, de manera que al generar una nueva consulta con esas dos tablas, te aparecerá nuevamente la relación original, que te puede servir o no, y las puedes mantener o modificar o eliminar en la nueva consulta.