MySQL
Veel-op-veel-toewijzingstabel
Zoeken…
Opmerkingen
- Gebrek aan een
AUTO_INCREMENTid 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 KEYis geclusterd met de gegevens in InnoDB. -
INDEX(y_id, x_id)- DePRIMARY KEYmaakt het efficiënt om één richting op te gaan; het maakt de andere richting efficiënt. Het is niet nodig omUNIQUEte zeggen; dat zou extra inspanning voorINSERTs. - In de secundaire index zou alleen
INDEX(y_id)zeggen werken omdat dit implicietx_idzou 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