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.