Recherche…


Remarques

  • Absence d'un identifiant AUTO_INCREMENT pour cette table - La PK donnée est la PK «naturelle»; il n'y a pas de bonne raison pour un substitut.
  • MEDIUMINT - Ceci est un rappel que toutes les INTs doivent être aussi petites que sûres (plus petites ⇒ plus rapides). Bien entendu, la déclaration ici doit correspondre à la définition du tableau lié.
  • UNSIGNED - Presque toutes les INT peuvent aussi être déclarées non négatives
  • NOT NULL - C'est vrai, n'est-ce pas?
  • InnoDB - Plus efficace que MyISAM en raison de la façon dont la PRIMARY KEY est regroupée avec les données dans InnoDB.
  • INDEX(y_id, x_id) - La PRIMARY KEY rend efficace pour aller dans une direction; le rend l’autre direction efficace. Pas besoin de dire UNIQUE ; ce serait un effort supplémentaire sur les INSERTs .
  • Dans l'index secondaire, dire juste INDEX(y_id) fonctionnerait car cela impliquerait d'inclure x_id . Mais je préférerais qu'il soit plus évident que j'espère un indice «couvrant».

Vous voudrez peut -être ajouter plus de colonnes à la table; c'est rare. Les colonnes supplémentaires peuvent fournir des informations sur la relation que représente la table.

Vous souhaiterez peut -être ajouter des contraintes FOREIGN KEY .

Schéma typique

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;

(Voir les remarques ci-dessous pour la justification.)



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow