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 alla INTs 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 hur PRIMARY 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äga UNIQUE ; det skulle vara extra ansträngning för INSERTs .
  • I det sekundära indexet skulle säga att bara INDEX(y_id) skulle fungera eftersom det implicit inkluderar x_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