MySQL
Таблица сопоставлений много-ко-многим
Поиск…
замечания
- Отсутствие идентификатора
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)
будет работать, потому что он будет подразумевать includex_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