2010-06-29 12 views

Respuesta

4

pasadas de uso MySQL el motor de almacenamiento MyISAM de forma predeterminada, que no admite restricciones de clave externa. A menos que declare explícitamente tablas para usar el motor de almacenamiento InnoDB, o cambie el motor de almacenamiento predeterminado en todo el servidor, no aparecen claves externas, y no es sorprendente que los desarrolladores de software que diseñan para MySQL no se molesten en utilizar restricciones de clave externa.

MySQL 5.5 está actualmente en beta y finalmente InnoDB será el motor de almacenamiento predeterminado. Por lo tanto, las restricciones de clave externa se admitirán de inmediato.

Sí, se recomiendan las claves externas. Estas restricciones ayudan a garantizar que sus datos siempre satisfagan la integridad referencial. La alternativa es que su base de datos se llene gradualmente de "migas" o filas que hacen referencia a una fila principal que ya no está en la base de datos. Esto puede llevar a resultados extraños de consultas y espacios desperdiciados, consultas ineficaces y termina haciendo tareas de limpieza de forma manual que serían innecesarias si solo hiciera que la base de datos le exigiera limpieza.


Re formulario de comentarios @Jacob: Los buenos puntos, pero asegúrese de leer los últimos artículos que comparan vs InnoDB hace MyISAM años, MyISAM fue considerado como el "motor de almacenamiento rápido" y InnoDB se consideró que el motor de almacenamiento De mala gana, tengo que usarlo si no puede prescindir de las transacciones.

Pero InnoDB ha mejorado dramáticamente en los últimos años, y en la mayoría de los casos hoy InnoDB realiza más rápido que que MyISAM.

Aparte de que MyISAM sigue admitiendo la indexación de texto completo como usted menciona, existen cada vez menos razones para usar MyISAM. Cuando necesito indexación de texto completo, o mantengo una tabla MyISAM como un espejo de mi almacenamiento primario en InnoDB, o si no, uso Apache Solr.

+0

gracias, tiene sentido – samJL

+0

+1 - asegúrese de entender las desventajas de usar innoDB sobre MyISAM. Haga una búsqueda en Google para innoDB vs MyISAM, hay muchos artículos que discuten las ventajas y desventajas de ambos. Entonces realmente depende de lo que esté usando la base de datos para saber si realmente desea/necesita integridad referencial sobre algunas de las ventajas que aporta MyISAM. Uno que acabo de descubrir la semana pasada es que innoDB no admite búsquedas de texto completo (todavía), pero MyISAM lo hace :( – Jacob

+0

Mi regla de oro en lo que respecta a InnoDB vs. MyISAM es: si necesita hacer una búsqueda de texto completo , use MyISAM. La búsqueda de texto completo parece ser lo único que MyISAM tiene una gran ventaja sobre InnoDB en términos de velocidad –

0

MySQL solía no reconocer claves externas. Todavía no lo hace, a menos que tome medidas.

Fuera de la vista, fuera de la mente, ¿verdad?

1

No estoy seguro de lo común que es, pero creo que debe expresar las condiciones del modelo de objetos completamente independientemente de si la base de datos subyacente los admite por completo.

Si generalmente escribe ANSI SQL, si continúa y agrega las restricciones de clave externa, cuando la base de datos las admite, utiliza un motor que las admite o se mueve a otra base de datos que las admita, luego los obtendrás por "gratis" y no tendrás que volver e intentar encontrar todas las relaciones.

Por lo tanto, pondría las claves foráneas en SQL de todos modos, pero ese soy yo y de nuevo puede que no sea común.

+0

No, ese soy yo también. A menos que esté escribiendo un esquema desechable para una pregunta SO. –

+0

gracias suena como una buena práctica – samJL

0

En MySQL, solo InnoDB incluso admite Foreign Keys, y solo después de MySQL 5.1.

Editar: InnoDB será el motor de almacenamiento predeterminado en MySQL 5.5

Edit-Ignorar: Referencial integrety será un "nuevo" en 6,1 de acuerdo con su hoja de ruta: versiones http://en.wikipedia.org/wiki/MySQL#Future_releases

+0

Esa información del wiki está muy desactualizada. MySQL 6 está archivado, y MySQL 5.5 soportará InnoDB como el motor de almacenamiento predeterminado. –

+0

@Bill Karwin, PHP 6 desechado, MySQL 6 eliminado, hay algo con esos 6. –

+1

He editado el párrafo de wikipedia al que ha vinculado. –

Cuestiones relacionadas