2010-08-08 13 views
33

Me preguntaba,¿Por qué usar restricciones de clave externa en MySQL?

¿Cuál será mi motivación para utilizar la restricción como clave foránea en MySQL, ya que estoy seguro de que puedo descartar los tipos que se agregan?

¿Mejora el rendimiento?

+2

pregunta similar ha sido respondida, vea http://stackoverflow.com/questions/1876013/ hay un montón de discusiones: D –

Respuesta

59

Foreign keys enforce referential integrity. Estas restricciones garantizan que una fila en una tabla order_details con un campo order_id haciendo referencia a una tabla orders nunca tendrá un valor order_id que no existe en la tabla orders.

Las claves foráneas no requieren tener una base de datos relacional (de hecho, el motor MySQL's default storage no admite FK), pero son esenciales para evitar relaciones rotas y filas huérfanas (es decir, integridad referencial). La capacidad de aplicar integridad referencial en el nivel de la base de datos es necesaria para que el C en ACID esté en pie.

En cuanto a sus preocupaciones con respecto al rendimiento, en general hay un costo de rendimiento, pero probablemente será insignificante. Sugiero poner todas sus restricciones de clave externa, y solo experimentar sin ellas si tiene problemas de rendimiento real que no puede resolver de otra manera.

+2

¿Hay alguna buena razón por la cual NO utilizar restricciones de clave externa? He trabajado en varios frameworks php y nunca he necesitado usarlos. Siento que la aplicación debe ser la que maneja y previene a los huérfanos. ¿Podría alguien iluminarme? –

+3

@ AngelS.Moreno: Es como preguntar "¿Hay alguna razón para no usar un recolector de basura?". Solo que en este caso, no obtendrá rendimiento administrando este tipo de basura DB. Todo lo contrario. Emitir todas las consultas necesarias para mantener las relaciones FK consistentes no solo es extremadamente propenso a errores, sino que también es extremadamente ineficiente. – thesaint

+7

La única buena razón para no usar FK es cuando no necesita consistencia. – thesaint

Cuestiones relacionadas