CREATE TABLE IF NOT EXISTS `messages` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `sender_id` INT NOT NULL, `receiver_id` INT, -- For private messages `group_id` INT, -- For group messages `message` TEXT NOT NULL, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (sender_id) REFERENCES users(id), FOREIGN KEY (receiver_id) REFERENCES users(id) -- FOREIGN KEY (group_id) REFERENCES chat_groups(id) -- This will be added later to avoid circular dependency ); CREATE TABLE IF NOT EXISTS `chat_groups` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `creator_id` INT NOT NULL, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (creator_id) REFERENCES users(id) ); CREATE TABLE IF NOT EXISTS `chat_group_members` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `group_id` INT NOT NULL, `user_id` INT NOT NULL, `role` ENUM('member', 'admin') NOT NULL DEFAULT 'member', FOREIGN KEY (group_id) REFERENCES chat_groups(id), FOREIGN KEY (user_id) REFERENCES users(id) ); ALTER TABLE `messages` ADD CONSTRAINT `fk_messages_group_id` FOREIGN KEY (`group_id`) REFERENCES `chat_groups`(`id`);