MySQL
Tabella di mappatura molti-a-molti
Ricerca…
Osservazioni
- Mancanza di un id
AUTO_INCREMENT
per questa tabella: il PK dato è il PK "naturale"; non c'è una buona ragione per un surrogato. -
MEDIUMINT
- Questo è un promemoria per ricordare che tutti gliINTs
devono essere ridotti al minimo (più piccoli ⇒ più veloci). Ovviamente la dichiarazione qui deve corrispondere alla definizione nella tabella a cui è collegato. -
UNSIGNED
- Quasi tutti gli INT possono essere dichiarati non negativi -
NOT NULL
- Beh, è vero, non è vero? -
InnoDB
- Più efficiente di MyISAM a causa del modo in cui laPRIMARY KEY
è in cluster con i dati in InnoDB. -
INDEX(y_id, x_id)
- IlPRIMARY KEY
rende efficiente andare in una direzione; rende l'altra direzione efficiente. Non c'è bisogno di direUNIQUE
; questo sarebbe un ulteriore sforzo perINSERTs
. - Nell'indice secondario, dire solo
INDEX(y_id)
funzionerebbe perché implicherebbe includerex_id
. Ma preferirei rendere più ovvio che spero in un indice di "copertura".
Si consiglia di aggiungere ulteriori colonne alla tabella; questo è raro. Le colonne aggiuntive potrebbero fornire informazioni sulla relazione rappresentata dalla tabella.
Si consiglia di aggiungere FOREIGN KEY
vincoli.
Schema tipico
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;
(Vedi Note, sotto, per la logica).
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow