SQL: Foreign keys + MySql + MyISAM

Desde varios años que no utilizaba MySql, debido principalmente a que en el ámbito laboral dificilmente se llega a utilizar y también por que no me  agrada del todo. Sin embargo, por azares del destino, en mi actual desarrollo en proyectos de juegos para facebook,  me he visto forzado a volverlo a utilizar, y de paso, también recordar por que no me gusta…

Resulta que en mi base de datos de desarrollo, las foreign keys funcionan de maravilla, pero en el servidor de producción no. Después de investigar un poco, resulta que las foreign keys solo funcionan con el InnoDB Engine y que en el servidor de producción, solo tiene instalado el MyISAM, que para colmo, ni siquiera guarda las foreign keys y ni mucho menos las usa.

Estoy seguro que para los desarrolladores de MySql debe haber muy buenas causas para desarrollar un motor sin soporte para foreign keys, pero para mí, un gestor de base de datos sin foreign keys, es tan eficiente como usar un archivo de texto plano…

En fin, si en su caso ya se tiene instalado el InnoDb Engine en el servidor, entonces solo es necesario indicar su uso en la creación de la tabla, mire con atención la última línea:


CREATE  TABLE IF NOT EXISTS DNeighbor (
idPlayer VARCHAR(20) NOT NULL ,
idNeighbor VARCHAR(20) NOT NULL,
PRIMARY KEY (idPlayer, idNeighbor) ,
INDEX fk_neighb (idPlayer ASC,idNeighbor ASC) ,
CONSTRAINT fk_neighbor FOREIGN KEY (idPlayer)
REFERENCES MB_DPlayer(idPlayer)
ON UPDATE CASCADE ON DELETE RESTRICT
)
ENGINE = InnoDB;

En PhpMyAdmin, al menos en la versión que utilizo, se puede especificar el motor únicamente cuando se crea la tabla desde la misma herramienta:

phpMyAdmin