Dodawanie kluczy dla tabeli pośredniej

Struktura tabeli

+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| user_id     | int(10) unsigned | NO   |     | NULL    |                |
| module_id   | int(10) unsigned | NO   |     | NULL    |                |
| is_enabled  | tinyint(1)       | YES  |     | 1       |                |
| enabled_at  | datetime         | YES  |     | NULL    |                |
| disabled_at | datetime         | YES  |     | NULL    |                |
| created     | datetime         | YES  |     | NULL    |                |
| modified    | datetime         | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+
-- Foreign key: user_id -> users.id
ALTER TABLE modules_users
ADD CONSTRAINT fk_modules_users_user_id
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE ON UPDATE CASCADE;

ON DELETE CASCADE — usunięcie usera lub modułu automatycznie usunie powiązane rekordy w modules_users. Jeśli wolisz blokować usunięcie gdy istnieją powiązania, zamień na ON DELETE RESTRICT.

-- Foreign key: module_id -> modules.id
ALTER TABLE modules_users
ADD CONSTRAINT fk_modules_users_module_id
FOREIGN KEY (module_id) REFERENCES modules(id)
ON DELETE CASCADE ON UPDATE CASCADE;
-- Klucz unikalny (user_id, module_id)
ALTER TABLE modules_users
ADD CONSTRAINT uq_modules_users_user_module
UNIQUE (user_id, module_id);