2011-06-03 13 views
10

Acabo de crear mi primera tabla mySQL por mi cuenta (aparte de usar Joomla, Wordpress, etc.) y soy desarrollador de MS SQL por años, pero normalmente puedo crear fácilmente una clave externa en MS SQL pero encontré una dificultad o falta de conocimiento aquí.Las claves foráneas deben ser Index en mySQL?

Aquí es mis tablas:

usuarios

  1. user_id int AUTO_INCREMENT primaria
  2. nombre de usuario varchar (20)
  3. contraseña varchar (20)

mensajes

  1. post_id en AUTO_INCREMENT primaria
  2. título varchar (100)
  3. texto del mensaje
  4. user_id int

Cuando intento agregar una clave externa a los usuarios que se refiere a posts->user_id, me no puede ver la opción posts->user_id en la lista de opciones Ventana de relación_relativa en el panel mySQL.

Me pregunto si debería definir posts->user_id como Index o algo? Si es así, ¿por qué?

+0

Un índice no tiene ningún impacto en la definición de clave externa; es probable que se trate de un error en la UI que está utilizando. ¿Qué software * estás * usando para hacer esto? –

+0

Estoy usando phpMyAdmin para navegar y editar mis dbs. – Tarik

+0

Y después de declararlos como índice, comencé a verlos en la lista. – Tarik

Respuesta

17

Respuesta corta: Sí, MySQL obliga a indexar la clave externa.

InnoDB requiere índices de claves ajenas y claves referenciadas, así las claves foráneas pueden ser rápido y no requiere un recorrido de tabla.

Puede leer más acerca de las claves externas en MySQL páginas de documentación: http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

+0

Acabas de dar la respuesta justa. Gracias un montón. – Tarik

2

Desde the documentation:

InnoDB requiere índices en claves foráneas y claves que se hace referencia de manera que revisión de las llaves extranjeras se pueden rápido y no requieren una exploración de tabla. En la tabla de referencia , debe haber un índice donde las columnas de clave externa se enumeran como las primeras columnas en el mismo orden de .

4

Desde el MySQL Reference Manual:

InnoDB requiere índices en claves foráneas y claves que se hace referencia de manera que revisión de las llaves extranjeras pueden ser rápido y no requiere un recorrido de tabla. En la tabla de referencia , debe haber un índice donde las columnas de clave externa se enumeran como las primeras columnas en el mismo orden de .Tal índice se crea en la tabla de referencia automáticamente si no existe. (Esto está en contraste con algunas versiones anteriores, en el que índices tuvieron que ser creadas explícita o la creación de restricciones de clave externa fallarían.) index_name, si se da, se utiliza como se ha descrito anteriormente.

A diferencia de SQL Server, que no requiere FKs a ser indexados ... sin embargo las recomendaciones que he visto sugieren que casi siempre siendo la indexación de sus FKs a pesar de que no es necesario.

Cuestiones relacionadas