MySQL
Tabla de mapeo de muchos a muchos
Buscar..
Observaciones
- Falta de un ID de
AUTO_INCREMENT
para esta tabla: la PK dada es la PK 'natural'; No hay una buena razón para un sustituto. -
MEDIUMINT
: este es un recordatorio de que todos losINTs
deben hacerse tan pequeños como seguros (más pequeños ⇒ más rápidos). Por supuesto, la declaración aquí debe coincidir con la definición en la tabla a la que está vinculado. -
UNSIGNED
: Casi todos los INT también pueden ser declarados no negativos -
NOT NULL
- Bueno, eso es verdad, ¿no es así? -
InnoDB
: más eficiente que MyISAM debido a la forma en que laPRIMARY KEY
está agrupada con los datos en InnoDB. -
INDEX(y_id, x_id)
- LaPRIMARY KEY
hace que sea eficiente ir en una dirección; el hace la otra dirección eficiente. No hace falta decirUNIQUE
; eso sería un esfuerzo extra enINSERTs
. - En el índice secundario, decir que solo
INDEX(y_id)
funcionaría porque incluiría implícitamentex_id
. Pero preferiría que sea más obvio que espero un índice de "cobertura".
Es posible que desee agregar más columnas a la tabla; esto es raro. Las columnas adicionales podrían proporcionar información sobre la relación que representa la tabla.
Es posible que desee agregar restricciones FOREIGN KEY
.
Esquema tipico
CREATE TABLE XtoY (
# No surrogate id for this table
x_id MEDIUMINT UNSIGNED NOT NULL, -- For JOINing to one table
y_id MEDIUMINT UNSIGNED NOT NULL, -- For JOINing to the other table
# Include other fields specific to the 'relation'
PRIMARY KEY(x_id, y_id), -- When starting with X
INDEX (y_id, x_id) -- When starting with Y
) ENGINE=InnoDB;
(Ver Comentarios, a continuación, para la justificación.)
Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow