DROP SCHEMA IF EXISTS `tabletop`; CREATE SCHEMA IF NOT EXISTS `tabletop` DEFAULT CHARACTER SET latin2; USE `tabletop`; -- ----------------------------------------------------- -- Table `tabletop`.`fractions` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`fractions` ( `fraction_id` INTEGER NOT NULL AUTO_INCREMENT, `image` MEDIUMBLOB NULL, PRIMARY KEY (`fraction_id`) ); -- ----------------------------------------------------- -- Table `tabletop`.`fraction_description` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`fraction_description` ( `fraction_id` INTEGER NOT NULL, `code` VARCHAR(5) NOT NULL DEFAULT '', `name` VARCHAR(50) NOT NULL, `short_name` VARCHAR(5) NOT NULL, `description` TEXT NULL, PRIMARY KEY (`fraction_id`, `code`), FOREIGN KEY (`fraction_id`) REFERENCES `tabletop`.`fractions`(`fraction_id`) ON DELETE CASCADE ON UPDATE CASCADE ); -- ----------------------------------------------------- -- Table `tabletop`.`gamemodes` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`gamemodes` ( `gamemode_id` INTEGER NOT NULL AUTO_INCREMENT, `image` MEDIUMBLOB NULL, PRIMARY KEY (`gamemode_id`) ); -- ----------------------------------------------------- -- Table `tabletop`.`gamemode_description` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`gamemode_description` ( `gamemode_id` INTEGER NOT NULL, `code` VARCHAR(5) NOT NULL DEFAULT '', `name` VARCHAR(50) NOT NULL, `description` TEXT NULL, `mechanic` TEXT NULL, PRIMARY KEY (`gamemode_id`, `code`), FOREIGN KEY (`gamemode_id`) REFERENCES `tabletop`.`gamemodes`(`gamemode_id`) ON DELETE CASCADE ON UPDATE CASCADE ); -- ----------------------------------------------------- -- Table `tabletop`.`weapons` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`weapons` ( `weapon_id` INTEGER NOT NULL AUTO_INCREMENT, `attack` INTEGER NOT NULL, `quality` INTEGER NOT NULL, `range` INTEGER NOT NULL, `dices` INTEGER NOT NULL, `image` MEDIUMBLOB NULL, PRIMARY KEY (`weapon_id`) ); -- ----------------------------------------------------- -- Table `tabletop`.`weapon_description` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`weapon_description` ( `weapon_id` INTEGER NOT NULL, `code` VARCHAR(5) NOT NULL DEFAULT '', `name` VARCHAR(50) NOT NULL, `description` TEXT NULL, PRIMARY KEY (`weapon_id`, `code`), FOREIGN KEY (`weapon_id`) REFERENCES `tabletop`.`weapons`(`weapon_id`) ON DELETE CASCADE ON UPDATE CASCADE ); -- ----------------------------------------------------- -- Table `tabletop`.`classes` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`classes` ( `class_id` INTEGER NOT NULL, `quantity` INTEGER NOT NULL, PRIMARY KEY (`class_id`) ); -- ----------------------------------------------------- -- Table `tabletop`.`class_description` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`class_description` ( `class_id` INTEGER NOT NULL, `code` VARCHAR(5) NOT NULL DEFAULT '', `name` VARCHAR(50) NOT NULL, `description` TEXT NULL, PRIMARY KEY (`class_id`, `code`), FOREIGN KEY (`class_id`) REFERENCES `tabletop`.`classes`(`class_id`) ON DELETE CASCADE ON UPDATE CASCADE ); -- ----------------------------------------------------- -- Table `tabletop`.`abilities` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`abilities` ( `ability_id` INTEGER NOT NULL, `quality` INTEGER NOT NULL, `force` INTEGER NOT NULL, PRIMARY KEY (`ability_id`) ); -- ----------------------------------------------------- -- Table `tabletop`.`ability_description` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`ability_description` ( `ability_id` INTEGER NOT NULL, `code` VARCHAR(5) NOT NULL DEFAULT '', `name` VARCHAR(50) NOT NULL, `description` TEXT NULL, PRIMARY KEY (`ability_id`, `code`), FOREIGN KEY (`ability_id`) REFERENCES `tabletop`.`abilities`(`ability_id`) ON DELETE CASCADE ON UPDATE CASCADE ); -- ----------------------------------------------------- -- Table `tabletop`.`units` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`units` ( `unit_id` INTEGER NOT NULL AUTO_INCREMENT, `fraction_id` INTEGER NOT NULL, `class_id` INTEGER NOT NULL, `troop_quantity` INTEGER NOT NULL, `defense` INTEGER NOT NULL, `moving` INTEGER NOT NULL, `primary_weapon_id` INTEGER NULL, `secondary_weapon_id` INTEGER NULL, `ability_id` INTEGER NULL, `has_jetpack` BOOLEAN NOT NULL DEFAULT FALSE, `image` MEDIUMBLOB NULL, PRIMARY KEY (`unit_id`), FOREIGN KEY (`fraction_id`) REFERENCES `tabletop`.`fractions`(`fraction_id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`class_id`) REFERENCES `tabletop`.`classes`(`class_id`), FOREIGN KEY (`primary_weapon_id`) REFERENCES `tabletop`.`weapons`(`weapon_id`), FOREIGN KEY (`secondary_weapon_id`) REFERENCES `tabletop`.`weapons`(`weapon_id`), FOREIGN KEY (`ability_id`) REFERENCES `tabletop`.`abilities`(`ability_id`) ); -- ----------------------------------------------------- -- Table `tabletop`.`unit_description` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`unit_description` ( `unit_id` INTEGER NOT NULL, `code` VARCHAR(5) NOT NULL DEFAULT '', `name` VARCHAR(50) NOT NULL, `description` TEXT NULL, `mechanic` TEXT NULL, PRIMARY KEY (`unit_id`, `code`), FOREIGN KEY (`unit_id`) REFERENCES `tabletop`.`units`(`unit_id`) ON DELETE CASCADE ON UPDATE CASCADE ); -- ----------------------------------------------------- -- Table `tabletop`.`users` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`users` ( `user_id` INTEGER NOT NULL AUTO_INCREMENT, `username` VARCHAR(50) NOT NULL, `display_name` VARCHAR(100) NOT NULL, `description` TEXT NULL, `main_fraction_id` INT NULL, `password` VARCHAR(255) NOT NULL, `salt` VARCHAR(255) NOT NULL, `last_login` DATETIME, `image` MEDIUMBLOB NULL, PRIMARY KEY(`user_id`), FOREIGN KEY (`main_fraction_id`) REFERENCES `tabletop`.`fractions`(`fraction_id`) ); -- ----------------------------------------------------- -- Table `tabletop`.`permissions` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`permissions` ( `permission_id` INTEGER NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(50) NOT NULL, PRIMARY KEY (`permission_id`) ); -- ----------------------------------------------------- -- Table `tabletop`.`permission_description` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`permission_description` ( `permission_id` INTEGER NOT NULL, `code` VARCHAR(5) NOT NULL DEFAULT '', `name` VARCHAR(50) NOT NULL, `description` TEXT NULL, PRIMARY KEY (`permission_id`, `code`), FOREIGN KEY (`permission_id`) REFERENCES `tabletop`.`permissions`(`permission_id`) ON DELETE CASCADE ON UPDATE CASCADE ); -- ----------------------------------------------------- -- Table `tabletop`.`user_permissions` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`user_permissions` ( `user_id` INTEGER NOT NULL, `permission_id` INTEGER NOT NULL, PRIMARY KEY(`user_id`, `permission_id`), FOREIGN KEY (`user_id`) REFERENCES `tabletop`.`users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`permission_id`) REFERENCES `tabletop`.`permissions`(`permission_id`) ON DELETE CASCADE ON UPDATE CASCADE ); -- ----------------------------------------------------- -- Table `tabletop`.`user_units` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`user_units` ( `user_id` INTEGER NOT NULL, `unit_id` INTEGER NOT NULL, `quantity` INTEGER NOT NULL, PRIMARY KEY (`user_id`, `unit_id`), FOREIGN KEY (`user_id`) REFERENCES `tabletop`.`users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`unit_id`) REFERENCES `tabletop`.`units`(`unit_id`) ON DELETE CASCADE ON UPDATE CASCADE ); -- ----------------------------------------------------- -- Table `tabletop`.`user_friends` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`user_friends` ( `user_id` INTEGER NOT NULL, `friend_id` INTEGER NOT NULL, PRIMARY KEY (`user_id`, `friend_id`), FOREIGN KEY (`user_id`) REFERENCES `tabletop`.`users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`friend_id`) REFERENCES `tabletop`.`users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE ); -- ----------------------------------------------------- -- Table `tabletop`.`games` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`games` ( `game_id` INTEGER NOT NULL AUTO_INCREMENT, `gamemode_id` INTEGER NOT NULL, `user_id` INTEGER NOT NULL, `name` VARCHAR(50) NOT NULL, `rounds` INTEGER NULL, `force` INTEGER NOT NULL, `number_of_teams` INTEGER NOT NULL, `number_of_players` INTEGER NOT NULL, `date` DATETIME NOT NULL, PRIMARY KEY (`game_id`), FOREIGN KEY (`gamemode_id`) REFERENCES `tabletop`.`gamemodes`(`gamemode_id`) ); -- ----------------------------------------------------- -- Table `tabletop`.`players` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`players` ( `player_id` INTEGER NOT NULL AUTO_INCREMENT, `user_id` INTEGER NOT NULL, `game_id` INTEGER NOT NULL, `fraction_id` INTEGER NULL, `team` INTEGER NOT NULL, `used_force` INTEGER NOT NULL, PRIMARY KEY (`player_id`), FOREIGN KEY (`user_id`) REFERENCES `tabletop`.`users`(`user_id`), FOREIGN KEY (`game_id`) REFERENCES `tabletop`.`games`(`game_id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`fraction_id`) REFERENCES `tabletop`.`fractions`(`fraction_id`) ); -- ----------------------------------------------------- -- Table `tabletop`.`player_units` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`player_units` ( `player_id` INTEGER NOT NULL, `unit_id` INTEGER NOT NULL, `quantity` INTEGER NOT NULL, PRIMARY KEY (`player_id`, `unit_id`), FOREIGN KEY (`player_id`) REFERENCES `tabletop`.`players`(`player_id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`unit_id`) REFERENCES `tabletop`.`units`(`unit_id`) ON DELETE CASCADE ON UPDATE CASCADE ); -- ----------------------------------------------------- -- Table `tabletop`.`templates` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`templates` ( `template_id` INTEGER NOT NULL AUTO_INCREMENT, `user_id` INTEGER NOT NULL, `fraction_id` INTEGER NOT NULL, `name` VARCHAR(50) NOT NULL, `force` INTEGER NOT NULL, `used_force` INTEGER NOT NULL, PRIMARY KEY (`template_id`), FOREIGN KEY (`user_id`) REFERENCES `tabletop`.`users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`fraction_id`) REFERENCES `tabletop`.`fractions`(`fraction_id`) ON DELETE CASCADE ON UPDATE CASCADE ); -- ----------------------------------------------------- -- Table `tabletop`.`template_units` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `tabletop`.`template_units` ( `template_id` INTEGER NOT NULL, `unit_id` INTEGER NOT NULL, `quantity` INTEGER NOT NULL, PRIMARY KEY (`template_id`, `unit_id`), FOREIGN KEY (`template_id`) REFERENCES `tabletop`.`templates`(`template_id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`unit_id`) REFERENCES `tabletop`.`units`(`unit_id`) ON DELETE CASCADE ON UPDATE CASCADE );