MySQL
Tabela mapowania wiele do wielu
Szukaj…
Uwagi
- Brak identyfikatora
AUTO_INCREMENTdla tej tabeli - Podany PK to „naturalny” PK; nie ma żadnego dobrego powodu do zastępstwa. -
MEDIUMINT- Jest to przypomnienie, że wszystkieINTspowinny 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 jakiPRIMARY KEYjest klastrowany z danymi w InnoDB. -
INDEX(y_id, x_id)-PRIMARY KEYsprawia, że efektywnie jest iść w jednym kierunku; sprawia, że drugi kierunek jest wydajny. Nie trzeba mówić, że jestUNIQUE; byłby to dodatkowy wysiłek dlaINSERTs. - W indeksie wtórnym powiedzenie, że
INDEX(y_id)tylkoINDEX(y_id), ponieważ domyślnie obejmowałbyx_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