En MySQL Server 3.23.44 y posteriores, el motor
          InnoDB soporta chequeo para restricciones
          de claves foráneas, incluyendo CASCADE,
          ON DELETE, y ON UPDATE.
          Consulte Sección 15.6.4, “Restricciones (constraints) FOREIGN KEY”.
        
          Para otros motores diferentes a InnoDB,
          MySQL Server parsea la sintaxis de FOREIGN
          KEY en comandos CREATE TABLE,
          pero no lo usa ni almacena. En el futuro, la implemantación
          se extenderá para almacenar esta información en el fichero
          de especificaciones de las tablas de forma que puedan
          obtenerla mysqldump y ODBC. En una etapa
          posterior, restricciones de claves foráneas se implementarán
          para tablas MyISAM.
        
Restricciones de claves foráneas ofrecen distintos beneficios a los diseñadores de bases de datos:
Suponiendo un diseño adecuado de las relaciones, las restricciones de claves foráneas hacen más difícil que un programador introduzca inconsistencias en la base de datos.
Chequeo centralizado de restricciones por el servidor de base de datos hace que sea innecesario realizar esos chequeos en la parte de la aplicación, eliminando la posibilidad que distintas aplicaciones puedan no chequear todas las restricciones de la misma forma.
Usando actualizaciones y borrados en cascada puede simplificarse el código de aplicación.
Reglas diseñadas correctamente para claves foráneas pueden ayudar a documentar las relaciones entre tablas.
Tenga en cuenta que estos beneficios tienen el coste de un trabajo adicional para el servidor de base de datos para poder realizar todas las comprobaciones necesarias. Chequeos adicionales por parte del servidor afectan al rendimiento, lo que puede ser lo suficientemente malo para algunas aplicaciones como para evitarlo todo lo posible. (Algunas grandes aplicaciones comerciales han codificado la lógica de claves foráneas en el nivel de aplicación por esta razón.)
          MySQL proporciona a diseñadores de bases de datos la
          posibilidad de elegir qué paradigma elegir. Si no necesita
          claves foráneas y quiere evitar la sobrecarga asociada con la
          integridad referencial, puede usar otro tipo de tabla como
          MyISAM. (Por ejemplo, el motor
          MyISAM ofrece muy buen rendimiento para
          aplicaciones que sólo realizan operaciones
          INSERT y SELECT, ya que
          las inserciones de pueden utilizar de forma concurrente con
          consultas. Consulte Sección 7.3.2, “Cuestiones relacionadas con el bloqueo (locking) de tablas”.)
        
Si elige no utilizar integridad referencial, tenga en cuenta las siguientes consideraciones:
Sin un chequeo por parte del servidor de integridad referencial, la aplicación debe realizar este trabajo. Por ejemplo, debe tener cuidado de insertar registros en tablas en el orden apropiado, y evitar crear registros con hijos huérfanos. También debe ser capaz de recuperarse de errores que ocurran durante inserciones múltiples.
              Si ON DELETE es la única integridad
              referencial que necesita la aplicación, desde la versión
              4.0 de MySQL Server puede usar comandos
              DELETE para borrar registros de
              distintas tablas con un único comando. Consulte
              Sección 13.2.1, “Sintaxis de DELETE”.
            
              Una forma de suplir la falta de ON
              DELETE es añadir el comando
              DELETE apropiado a su aplicación
              cuando borre registros de una tabla que no tenga clave
              foránea. En la práctica, esto es tan rápido como usar
              una clave foránea, y más portable.
            
Tenga en cuenta que el uso de claves foráneas puede provocar algunos problemas:
El soporte de claves foráneas arregla muchas cuestiones relacionadas con la integridad, pero todavía es necesario diseñar las claves cuidadosamente para evitar reglas circulares o combinaciones incorrectas de borrados en cascada.
              Es posible crear una topología de relaciones que haga
              difícil restaurar tablas individuales de una copia de
              seguridad. (MySQL alivia esta dificultad permitiendo
              desactivar claves foráneas temporalmente al recargar una
              tabla que dependa de otras. Consulte
              Sección 15.6.4, “Restricciones (constraints) FOREIGN KEY”. Desde
              MySQL 4.1.1, mysqldump genera ficheros
              que utilizan esta características automáticamente al
              recargarse.)
            
          Tenga en cuenta que las claves foráneas en SQL se usan para
          chequear y forzar integridad referencial, no para unir tablas.
          Si quiere obtener resultados de múltiples tablas a partir de
          un comando SELECT, debe usar un join entre
          ellas:
        
SELECT * FROM t1, t2 WHERE t1.id = t2.id;
          Consulte Sección 13.2.7.1, “Sintaxis de JOIN”. Consulte
          Sección 3.6.6, “Usar claves foráneas (foreign keys)”.
        
          La sintaxis de FOREIGN KEY sin ON
          DELETE ... se usa a menudo por aplicaciones ODBC
          para producir cláusulas WHERE
          automáticamente.
        
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

