Ver Mensaje Individual
  #3 (permalink)  
Antiguo 19/05/2011, 18:20
Avatar de tlaloc_2005
tlaloc_2005
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barranquilla
Mensajes: 90
Antigüedad: 16 años, 6 meses
Puntos: 5
Información Respuesta: llaves foraneas en modulos drupal

Hola, no se si ya habrás resuelto tu problema, pero para futuras búsquedas, aquí te dejo el dato de como lo resolví.

También me encontraba en el mismo predicamento, pues necesitaba que por nada del mundo se rompiera la integridad referencial en la base de datos de unos módulos que estoy creando, y la solución la encontré en la mismo sitio de drupal.

http://drupal.org/node/323314#comment-1444000

Básicamente tu primero creas las tablas con el hook_install y después puedes ejecutar los db_query con las instrucciones para enlazar las tablas.

Recomendaciones:
  • Tienes que asegurarte de convertir las tablas a innoDB ya que por defecto drupal utiliza MyISAM. La instrucción seria algo como:
Código PHP:
db_query("ALTER TABLE {nombre_tabla} ENGINE = INNODB"); 
  • La instrucción para enlazar las tablas seria algo como (Al momento de crear las tablas con el hook_install, recuerda crear los indices):
Código PHP:
db_query("ALTER TABLE {nombre_tabla_hijo} ADD CONSTRAINT `FK_nombre_llave` FOREIGN KEY (`guid`) REFERENCES {nombre_tabla_padre} (`guid`) ON DELETE RESTRICT  ON UPDATE RESTRICT"); 
  • Y por ultimo, es importante el orden en que creas las tablas porque en ese orden el hook_uninstall las borra, y con llaves foráneas te imaginaras que es mas complicado eliminar las tablas estando amarradas unas con otras.
__________________
Johan J. Gutierrez D.
Ingeniero Industrial, Tecnologo en Sistemas

Última edición por tlaloc_2005; 19/05/2011 a las 18:21 Razón: Mejorar redacción