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 gli INTs 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 la PRIMARY KEY è in cluster con i dati in InnoDB.
  • INDEX(y_id, x_id) - Il PRIMARY KEY rende efficiente andare in una direzione; rende l'altra direzione efficiente. Non c'è bisogno di dire UNIQUE ; questo sarebbe un ulteriore sforzo per INSERTs .
  • Nell'indice secondario, dire solo INDEX(y_id) funzionerebbe perché implicherebbe includere x_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