Ver Mensaje Individual
  #47  
Antiguo 21-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
Relaciones en BBDD:

Imaginamos que estamos haciendo un programa para un constructor de obras, se tienen las siguientes tablas:
obras
clientes
trabajadores
jornales
presupuestos de obras
facturas
lineas de facturas

Todas estan relacionadas mediante sus respectivas claves ajenas y con integridad referencial, esto es: ON UPDATE CASCADE, ON DELETE CASCADE.

Esto significa que al eliminar una obra, automáticamente el gestor de bases de datos se encarga de eliminar:
- los presupuestos iniciales que se hicieron para esa obra
- los jornales que existan de sus trabajadores para esa obra
- Otras registros de otras tablas que dependan de la tabla OBRA.

Para el caso de las facturas, como ya sabemos, no pueden eliminarse facturas ya emitidas, en ese caso especificaríamos como regla de integridad On DELETE NO ACTION y lo mismo para la tabla cliente, quedando así en la Base de datos:
- las facturas emitidas a ese cliente
- los datos personales del cliente (para mostrarlo en las facturas)

... y todo esto sin ninguna linea de código, basta un buen diseño de la BBDD.

Para relaciones Maestro-Detalles, también se especificaría ON DELETE CASCADE en la tabla detalle, así al borrar un registro en la tabla Maestra, se borran todas sus lineas automáticamente.

...Por algo estoy en contra de usar Paradox (no tiene integridad referencial) y te obliga a lanzar consultas de borrado cada dos por tres, o lo que es peor, hacer bucles en delphi eliminando las lineas de detalle.

Como veis no entro en eficiencia del motor de Bases de datos, planes de ejecución de consultas ni nada técnico, creo que la explicación es simple pero se entiende sobradamente.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita