Поиск…


замечания

  • Отсутствие идентификатора AUTO_INCREMENT для этой таблицы. PK - это «натуральный» ПК; нет никакой веской причины для суррогата.
  • MEDIUMINT - это напоминание о том, что все INTs должны быть сделаны настолько маленькими, насколько это безопасно (меньше ⇒ быстрее). Конечно, декларация здесь должна соответствовать определению в связанной с таблицей.
  • UNSIGNED - почти все INT могут также быть объявлены неотрицательными
  • NOT NULL - Ну, это правда, не так ли?
  • InnoDB - более эффективный, чем MyISAM, из-за того, что PRIMARY KEY кластеризуется с данными в InnoDB.
  • INDEX(y_id, x_id) - INDEX(y_id, x_id) PRIMARY KEY позволяет эффективно идти в одном направлении; делает другое направление эффективным. Не нужно говорить « UNIQUE ; это будет дополнительным усилием для INSERTs .
  • Во вторичном индексе говорят, что только INDEX(y_id) будет работать, потому что он будет подразумевать include x_id . Но я предпочел бы сделать более очевидным, что я надеюсь на индекс «покрытия».

Вы можете добавить несколько столбцов в таблице; это редко. Дополнительные столбцы могут предоставить информацию о взаимосвязи, которую представляет таблица.

Вы можете добавить ограничения FOREIGN KEY .

Типичная схема

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;

(См. Примечания ниже, для обоснования.)



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow