Szukaj…


Uwagi

  • Brak identyfikatora AUTO_INCREMENT dla tej tabeli - Podany PK to „naturalny” PK; nie ma żadnego dobrego powodu do zastępstwa.
  • MEDIUMINT - Jest to przypomnienie, że wszystkie INTs powinny być tak małe, jak to jest bezpieczne (mniejsze ⇒ szybciej). Oczywiście deklaracja tutaj musi pasować do definicji w tabeli, z którą jest powiązany.
  • UNSIGNED - Prawie wszystkie INT można równie dobrze uznać za nieujemne
  • NOT NULL - Cóż, to prawda, prawda?
  • InnoDB - Bardziej wydajny niż MyISAM ze względu na sposób, w jaki PRIMARY KEY jest klastrowany z danymi w InnoDB.
  • INDEX(y_id, x_id) - PRIMARY KEY sprawia, że efektywnie jest iść w jednym kierunku; sprawia, że drugi kierunek jest wydajny. Nie trzeba mówić, że jest UNIQUE ; byłby to dodatkowy wysiłek dla INSERTs .
  • W indeksie wtórnym powiedzenie, że INDEX(y_id) tylko INDEX(y_id) , ponieważ domyślnie obejmowałby x_id . Ale wolałbym, aby bardziej oczywiste było to, że mam nadzieję na indeks obejmujący.

Możesz dodać więcej kolumn w tabeli; to jest rzadkie. Dodatkowe kolumny mogą zawierać informacje o relacji reprezentowanej przez tabelę.

Możesz dodać FOREIGN KEY ograniczeń.

Typowy schemat

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;

(Patrz uzasadnienie poniżej.)



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow