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 los INTs 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 la PRIMARY KEY está agrupada con los datos en InnoDB.
  • INDEX(y_id, x_id) - La PRIMARY KEY hace que sea eficiente ir en una dirección; el hace la otra dirección eficiente. No hace falta decir UNIQUE ; eso sería un esfuerzo extra en INSERTs .
  • En el índice secundario, decir que solo INDEX(y_id) funcionaría porque incluiría implícitamente x_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