MySQL
Mappningstabell för många
Sök…
Anmärkningar
- Brist på ett
AUTO_INCREMENT
id för denna tabell - PK som ges är den "naturliga" PK; det finns ingen god anledning till en surrogat. -
MEDIUMINT
- Detta är en påminnelse om att allaINTs
ska göras så små som det är säkert (mindre ⇒ snabbare). Naturligtvis måste deklarationen här matcha definitionen i tabellen som är länkad till. -
UNSIGNED
- Nästan alla INT kan lika bra förklaras som icke-negativa -
NOT NULL
- Det är sant, eller hur? -
InnoDB
- Effektivare än MyISAM på grund av hurPRIMARY KEY
är grupperad med data i InnoDB. -
INDEX(y_id, x_id)
-PRIMARY KEY
gör det effektivt att gå en riktning; det gör den andra riktningen effektiv. Ingen anledning att sägaUNIQUE
; det skulle vara extra ansträngning förINSERTs
. - I det sekundära indexet skulle säga att bara
INDEX(y_id)
skulle fungera eftersom det implicit inkluderarx_id
. Men jag skulle hellre göra det mer uppenbart att jag hoppas på ett "täckande" index.
Du kanske vill lägga till fler kolumner i tabellen; detta är sällsynt. De extra kolumnerna kan ge information om förhållandet som tabellen representerar.
Du kanske vill lägga till FOREIGN KEY
.
Typiskt 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;
(Se anmärkningar nedan för begränsning.)
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow