MySQL
Tabela mapowania wiele do wielu
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 wszystkieINTs
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 jakiPRIMARY 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 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