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);