CREATE TABLE `users` ( `user_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, `username` VARCHAR(20) NOT NULL, `password_hash` CHAR(73) NOT NULL, `signup_date` INT UNSIGNED NOT NULL, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB CHARSET utf8mb4; CREATE TABLE `chat_messages` ( `message_id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, `room_id` MEDIUMINT UNSIGNED NOT NULL, `name_id` SMALLINT UNSIGNED DEFAULT NULL, `date` INT UNSIGNED NOT NULL, `message` TEXT NOT NULL, PRIMARY KEY (`message_id`) ) ENGINE=InnoDB CHARSET utf8mb4; CREATE TABLE `quest_meta` ( `quest_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, `quest_title` VARCHAR(300) DEFAULT NULL, `owner_id` SMALLINT UNSIGNED DEFAULT NULL, `open_post_id` SMALLINT UNSIGNED DEFAULT NULL, PRIMARY KEY (`quest_id`), FOREIGN KEY (`owner_id`) REFERENCES `users`(`user_id`) ) ENGINE=InnoDB CHARSET utf8mb4; CREATE TABLE `page_titles` ( `quest_id` SMALLINT UNSIGNED NOT NULL, `page_num` TINYINT UNSIGNED NOT NULL, `page_title` VARCHAR(200) NOT NULL, FOREIGN KEY (`quest_id`) REFERENCES `quest_meta`(`quest_id`) ) ENGINE=InnoDB CHARSET utf8mb4; CREATE TABLE `quest_data` ( `post_id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, `quest_id` SMALLINT UNSIGNED NOT NULL, `page_num` TINYINT UNSIGNED NOT NULL, `post_type` ENUM('text', 'dice', 'poll') NOT NULL, `post` MEDIUMTEXT NOT NULL, `timestamp` INT UNSIGNED NOT NULL, PRIMARY KEY (`post_id`), FOREIGN KEY (`quest_id`) REFERENCES `quest_meta`(`quest_id`), FOREIGN KEY (`page_num`) REFERENCES `page_titles`(`page_num`) ) ENGINE=InnoDB CHARSET utf8mb4; CREATE TABLE `dice_calls` ( `post_id` MEDIUMINT UNSIGNED NOT NULL, `dice_roll` TEXT NOT NULL, `strict` BOOLEAN DEFAULT FALSE, `dice_challenge` SMALLINT UNSIGNED, `rolls_taken` TINYINT UNSIGNED, FOREIGN KEY (`post_id`) REFERENCES `quest_data`(`post_id`) ) ENGINE=InnoDB CHARSET utf8mb4; CREATE TABLE `dice_rolls` ( `message_id` MEDIUMINT UNSIGNED NOT NULL, `quest_id` SMALLINT UNSIGNED NOT NULL, `post_id` MEDIUMINT UNSIGNED NOT NULL, `roll_dice` TEXT NOT NULL, `roll_results` TEXT NOT NULL, `roll_total` SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (`message_id`) REFERENCES `chat_messages`(`message_id`), FOREIGN KEY (`post_id`) REFERENCES `dice_calls`(`post_id`) ) ENGINE=InnoDB CHARSET utf8mb4; CREATE TABLE `polls` ( `post_id` MEDIUMINT UNSIGNED NOT NULL, `quest_id` SMALLINT UNSIGNED NOT NULL, `multi_choice` BOOLEAN DEFAULT FALSE, `allow_writein` BOOLEAN DEFAULT FALSE, FOREIGN KEY (`post_id`) REFERENCES `quest_data`(`post_id`), FOREIGN KEY (`quest_id`) REFERENCES `quest_meta`(`quest_id`) ) ENGINE=InnoDB CHARSET utf8mb4; CREATE TABLE `poll_options` ( `option_id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, `post_id` MEDIUMINT UNSIGNED NOT NULL, `option_text` VARCHAR(200) NOT NULL, PRIMARY KEY (`option_id`), FOREIGN KEY (`post_id`) REFERENCES `polls`(`post_id`) ) ENGINE=InnoDB CHARSET utf8mb4; CREATE TABLE `poll_votes` ( `option_id` MEDIUMINT UNSIGNED NOT NULL, `ip_address` VARCHAR(32) NOT NULL, FOREIGN KEY (`option_id`) REFERENCES `poll_options`(`option_id`), UNIQUE (`option_id`, `ip_address`) ) ENGINE=InnoDB CHARSET utf8mb4;