MySQL
Viele-zu-viele-Zuordnungstabelle
Suche…
Bemerkungen
- Keine
AUTO_INCREMENT
ID für diese Tabelle vorhanden - Die angegebene PK ist die "natürliche" PK; Es gibt keinen guten Grund für einen Ersatz. -
MEDIUMINT
- Dies ist eine Erinnerung daran, dass alleINTs
so klein wie möglich gemacht werden sollten (kleiner ⇒ schneller). Natürlich muss die Deklaration hier mit der Definition in der Tabelle übereinstimmen, mit der verlinkt wird. -
UNSIGNED
- Nahezu alle INTs können auch als nicht negativ deklariert werden -
NOT NULL
- Das stimmt, nicht wahr? -
InnoDB
- Effizienter als MyISAM aufgrund der Art und Weise, wie derPRIMARY KEY
mit den Daten in InnoDB gebündelt wird. -
INDEX(y_id, x_id)
- DerPRIMARY KEY
macht es effizient, in eine Richtung zu gehen; das macht die andere Richtung effizient. Keine Notwendigkeit,UNIQUE
zu sagen; das wäre ein zusätzlicher Aufwand fürINSERTs
. - Im Sekundärindex würde nur die
INDEX(y_id)
funktionieren, da dies implizit diex_id
vonx_id
. Ich möchte jedoch eher deutlich machen, dass ich auf einen "abdeckenden" Index hoffe.
Sie können der Tabelle weitere Spalten hinzufügen. das ist selten. Die zusätzlichen Spalten können Informationen über die Beziehung enthalten , die die Tabelle darstellt.
Möglicherweise möchten Sie FOREIGN KEY
Einschränkungen hinzufügen.
Typisches Schema
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;
(Siehe Anmerkungen unten, für Gründe.)
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow