MySQL
Table de mappage plusieurs-à-plusieurs
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 lesINTs
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 laPRIMARY KEY
est regroupée avec les données dans InnoDB. -
INDEX(y_id, x_id)
- LaPRIMARY KEY
rend efficace pour aller dans une direction; le rend l’autre direction efficace. Pas besoin de direUNIQUE
; ce serait un effort supplémentaire sur lesINSERTs
. - Dans l'index secondaire, dire juste
INDEX(y_id)
fonctionnerait car cela impliquerait d'inclurex_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