Me gustaría poder ir cerrando
este post con un ejemplo este tema de la integridad referencial.
Según se indica en las FAQs, las tablas MyISAM hasta la versión 5.0 de MySQL no soportan integridad referencia no así las tablas del tipo InnoDB. Bien.
El punto es que husmeando por ahí, ví el siguiente código:
Código PHP:
[CONSTRAINT símbolo] FOREIGN KEY (nombre_columna, ...)
REFERENCES nombre_tabla (nombre_columna, ...)
[ON DELETE {CASCADE | SET NULL | NO ACTION
| RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION
| RESTRICT}]
1) Si no lo he malinterpretado, aún teniendo tablas del tipo MyISAM puedo establecer integridad referencial tanto para la eliminación como la actualización. Correcto?
2) Cómo se entiende una integridad referencial sin FK?
3) Puede que esté muy equivocado pero si tengo dos tablas relacionadas (supongamos Empleados, Capacitacion) la columna idemple de la tabla Capacitacion no podría ser concretaemnte la FK de la tabla empleados?
4) Supongamos que insisto para un proyecto grande en basarlo en tablas MyISAM (siguiendo el ejemplo) y deseo eliminar un empleado que casualmente ha sido capacitado. Debería programar que si su id se encuentra en la tabla capacitación, "esa eliminación" NO SE PROVOQUE. Correcto?
5) Ahora (basándonos en 4), cuál sería el problema? Que debería escribir líneas y líneas de código para mantener esa integridad referencial bajo MyISAM?
6) En este u otro foro consultaba cómo debían manejarse los errores si el diseño de la base se desarrolla bajo InnoDB y si se intenta eliminar un registro con relación a otra tabla. Digo, el sistema emitiría un mensaje de error probablemente en inglés, cómo se maneja, debe ser customizado?
MGs