MySQL
Veel-op-veel-toewijzingstabel
Zoeken…
Opmerkingen
- Gebrek aan een
AUTO_INCREMENT
id voor deze tabel - De gegeven PK is de 'natuurlijke' PK; er is geen goede reden voor een surrogaat. -
MEDIUMINT
- Dit is een herinnering dat alleINTs
's zo klein moeten worden gemaakt als veilig is (kleiner ⇒ sneller). Natuurlijk moet de verklaring hier overeenkomen met de definitie in de tabel waaraan wordt gekoppeld. -
UNSIGNED
- Bijna alle INT's kunnen net zo goed niet-negatief worden verklaard -
NOT NULL
- Nou, dat klopt toch? -
InnoDB
- Efficiënter dan MyISAM vanwege de manier waarop dePRIMARY KEY
is geclusterd met de gegevens in InnoDB. -
INDEX(y_id, x_id)
- DePRIMARY KEY
maakt het efficiënt om één richting op te gaan; het maakt de andere richting efficiënt. Het is niet nodig omUNIQUE
te zeggen; dat zou extra inspanning voorINSERTs
. - In de secundaire index zou alleen
INDEX(y_id)
zeggen werken omdat dit implicietx_id
zou omvatten. Maar ik maak liever duidelijker dat ik hoop op een 'dekkende' index.
Misschien wilt u meer kolommen toe te voegen aan de tafel; dit is zeldzaam. De extra kolommen kunnen informatie geven over de relatie die de tabel vertegenwoordigt.
Misschien wilt u toevoegen FOREIGN KEY
beperkingen.
Typisch 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;
(Zie opmerkingen hieronder).
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow