Files
core/database/schema.sql
T
Michal Kváček 2f7df75b83 FEATURE #1359: registration works now
Some basic form of registration is done. It does not look very nice, however I was able to create new user. This part will need a lots of other improvements, however new user was created. Yay!
2016-01-21 01:08:03 +01:00

344 lines
13 KiB
SQL
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- MySQL Script generated by MySQL Workbench
-- Čt 21. leden 2016, 00:19:53 CET
-- Model: New Model Version: 1.0
-- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- -----------------------------------------------------
-- Schema minicms
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Table `users`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`email` VARCHAR(64) NOT NULL COMMENT 'E-mail is used as a contact and also as a username',
`username` VARCHAR(64) NOT NULL COMMENT 'Username can be used also for login. Default value is users email.',
`password` VARCHAR(128) NOT NULL COMMENT 'Password hash',
`role` ENUM('visitor', 'editor', 'admin') NOT NULL DEFAULT 'visitor' COMMENT 'User\'s role determines his permissions in the system.',
`remember_token` VARCHAR(128) NULL DEFAULT NULL COMMENT 'Token used for \"remember me\" feature',
`name` VARCHAR(128) NULL DEFAULT NULL,
`status` ENUM('deleted', 'blocked', 'active') NOT NULL DEFAULT 'active',
PRIMARY KEY (`id`),
UNIQUE INDEX `email_UNIQUE` (`email` ASC))
ENGINE = InnoDB
COMMENT = 'Table with users who are allowed to log into system';
-- -----------------------------------------------------
-- Table `modules`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `modules` (
`handler` VARCHAR(64) NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`name` VARCHAR(64) NOT NULL,
`description` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`handler`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `files`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `files` (
`id` INT NOT NULL,
`user_id` INT NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`filename` VARCHAR(128) NOT NULL,
`sha256_hash` VARCHAR(64) NOT NULL COMMENT 'SHA hash of file content.',
`mime_type` VARCHAR(64) NOT NULL COMMENT 'User, who uploaded this file.',
PRIMARY KEY (`id`),
INDEX `fk_file_user1_idx` (`user_id` ASC),
CONSTRAINT `fk_file_user1`
FOREIGN KEY (`user_id`)
REFERENCES `users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'Table containing files which were uploaded into system.';
-- -----------------------------------------------------
-- Table `contents`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `contents` (
`id` INT NOT NULL,
`user_id` INT NOT NULL,
`module_handler` VARCHAR(64) NOT NULL,
`title_photo` INT NULL DEFAULT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`title` VARCHAR(45) NOT NULL,
`url` VARCHAR(45) NOT NULL,
`meta_keywords` VARCHAR(128) NULL DEFAULT NULL,
`meta_description` MEDIUMTEXT NULL DEFAULT NULL,
`module_settings` TEXT NULL COMMENT 'JSON serialized object passed as settings to the module.',
`content` TEXT NULL DEFAULT NULL,
`published_from` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`published_to` TIMESTAMP NULL DEFAULT NULL,
`status` ENUM('deleted', 'draft', 'protected', 'public') NULL DEFAULT 'draft' COMMENT 'This photo is supposed to be displayed e.g. on list of all pages.',
PRIMARY KEY (`id`),
INDEX `fk_content_user1_idx` (`user_id` ASC),
INDEX `url` (`url` ASC),
FULLTEXT INDEX `content_fulltext` (`content` ASC),
UNIQUE INDEX `url_UNIQUE` (`url` ASC),
INDEX `fk_content_module1_idx` (`module_handler` ASC),
INDEX `fk_content_file1_idx` (`title_photo` ASC),
CONSTRAINT `fk_content_user1`
FOREIGN KEY (`user_id`)
REFERENCES `users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_content_module1`
FOREIGN KEY (`module_handler`)
REFERENCES `modules` (`handler`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_content_file1`
FOREIGN KEY (`title_photo`)
REFERENCES `files` (`id`)
ON DELETE SET NULL
ON UPDATE CASCADE)
ENGINE = InnoDB
COMMENT = 'Table with all content pages.';
-- -----------------------------------------------------
-- Table `content_history`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `content_history` (
`id` INT NOT NULL,
`user_id` INT NOT NULL,
`content_id` INT NOT NULL,
`changed_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`edit_batch` VARCHAR(16) NOT NULL COMMENT 'This field holds identical values for all historical entries edited as one update.',
`column` VARCHAR(64) NOT NULL,
`new_value` TEXT NULL DEFAULT NULL,
`old_value` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `edit_batch` (`edit_batch` ASC),
INDEX `column` (`column` ASC),
INDEX `fk_content_history_users_idx` (`user_id` ASC),
INDEX `fk_content_history_content1_idx` (`content_id` ASC),
CONSTRAINT `fk_content_history_users`
FOREIGN KEY (`user_id`)
REFERENCES `users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_content_history_content1`
FOREIGN KEY (`content_id`)
REFERENCES `contents` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'Table for holding history of changes on some content.';
-- -----------------------------------------------------
-- Table `widget_types`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `widget_types` (
`handler` VARCHAR(64) NOT NULL COMMENT 'Class wich handles everything about this widget type',
`name` VARCHAR(64) NOT NULL COMMENT 'Name is used only in admin for better readability.',
`description` TEXT NULL DEFAULT NULL COMMENT 'This field also improves readability.',
PRIMARY KEY (`handler`))
ENGINE = InnoDB
COMMENT = 'Widget type table contains information about all installed widgets. This is something like \"class\" to widgets.';
-- -----------------------------------------------------
-- Table `widgets`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `widgets` (
`id` INT NOT NULL,
`widget_type_handler` VARCHAR(64) NOT NULL,
`user_id` INT NOT NULL COMMENT 'User ID who created this widget',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`name` VARCHAR(64) NOT NULL,
`settings` TEXT NOT NULL COMMENT 'JSON serialized values used for initializing given widget.',
`description` MEDIUMTEXT NULL,
PRIMARY KEY (`id`),
INDEX `fk_widget_user1_idx` (`user_id` ASC),
INDEX `fk_widget_widget_type1_idx` (`widget_type_handler` ASC),
CONSTRAINT `fk_widget_user1`
FOREIGN KEY (`user_id`)
REFERENCES `users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_widget_widget_type1`
FOREIGN KEY (`widget_type_handler`)
REFERENCES `widget_types` (`handler`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'Widget is a small piece of content, which can be inserted into widget area. Example of widgets: menu (with links), banner, some static html code. This table contains real \"instances\" of widgets.';
-- -----------------------------------------------------
-- Table `widget_areas`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `widget_areas` (
`id` INT NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`name` VARCHAR(64) NOT NULL COMMENT 'Used for user overview.',
`code` VARCHAR(32) NOT NULL COMMENT 'Value of this field is used for replacing placeholder text in templates with content of real widget area.',
`description` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `code_UNIQUE` (`code` ASC))
ENGINE = InnoDB
COMMENT = 'Widget area is container for widgets. This container is inserted into templates/content and populated by widgets.';
-- -----------------------------------------------------
-- Table `widget_in_widget_area`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `widget_in_widget_area` (
`widget_id` INT NOT NULL,
`widget_area_id` INT NOT NULL,
`position` INT NOT NULL COMMENT 'Which position should the widget take?',
PRIMARY KEY (`widget_id`, `widget_area_id`),
INDEX `fk_widget_has_widget_area_widget_area1_idx` (`widget_area_id` ASC),
INDEX `fk_widget_has_widget_area_widget1_idx` (`widget_id` ASC),
INDEX `position` (`position` ASC),
CONSTRAINT `fk_widget_has_widget_area_widget1`
FOREIGN KEY (`widget_id`)
REFERENCES `widgets` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_widget_has_widget_area_widget_area1`
FOREIGN KEY (`widget_area_id`)
REFERENCES `widget_areas` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `custom_fields`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `custom_fields` (
`id` INT NOT NULL,
`handler` VARCHAR(64) NOT NULL COMMENT 'Class name, which handles saving and retrieving given custom field.',
`name` VARCHAR(128) NULL,
`description` MEDIUMTEXT NULL,
`default_value` TEXT NULL,
`regexp` MEDIUMTEXT NULL DEFAULT NULL,
`min_length` INT(11) NULL DEFAULT NULL,
`max_length` INT(11) NULL DEFAULT NULL,
`required` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`))
ENGINE = InnoDB
COMMENT = 'List of all custom fields which may be used for extending some part of content on webpage';
-- -----------------------------------------------------
-- Table `user_has_custom_field`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `user_has_custom_field` (
`user_id` INT NOT NULL,
`custom_field_id` INT NOT NULL,
`value` TEXT NOT NULL,
PRIMARY KEY (`user_id`, `custom_field_id`),
INDEX `fk_user_has_custom_field_custom_field1_idx` (`custom_field_id` ASC),
INDEX `fk_user_has_custom_field_user1_idx` (`user_id` ASC),
CONSTRAINT `fk_user_has_custom_field_user1`
FOREIGN KEY (`user_id`)
REFERENCES `users` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_user_has_custom_field_custom_field1`
FOREIGN KEY (`custom_field_id`)
REFERENCES `custom_fields` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `custom_field_types`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `custom_field_types` (
`id` INT NOT NULL,
`name` VARCHAR(45) NOT NULL,
`custom_field_id` INT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `name_UNIQUE` (`name` ASC),
INDEX `fk_custom_field_type_custom_field1_idx` (`custom_field_id` ASC),
CONSTRAINT `fk_custom_field_type_custom_field1`
FOREIGN KEY (`custom_field_id`)
REFERENCES `custom_fields` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'List of all custom field types.';
-- -----------------------------------------------------
-- Table `module_has_custom_field`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `module_has_custom_field` (
`module_handler` VARCHAR(64) NOT NULL,
`custom_field_id` INT NOT NULL,
`value` TEXT NOT NULL,
PRIMARY KEY (`module_handler`, `custom_field_id`),
INDEX `fk_module_has_custom_field_custom_field1_idx` (`custom_field_id` ASC),
INDEX `fk_module_has_custom_field_module1_idx` (`module_handler` ASC),
CONSTRAINT `fk_module_has_custom_field_module1`
FOREIGN KEY (`module_handler`)
REFERENCES `modules` (`handler`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_module_has_custom_field_custom_field1`
FOREIGN KEY (`custom_field_id`)
REFERENCES `custom_fields` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `action_log_types`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `action_log_types` (
`id` INT NOT NULL,
`name` VARCHAR(45) NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
COMMENT = 'List of all types which can be logged.';
-- -----------------------------------------------------
-- Table `action_log`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `action_log` (
`id` INT NOT NULL,
`type_id` INT NOT NULL,
`user_id` INT NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`item_id` INT(11) NULL DEFAULT NULL COMMENT 'ID of changed item. Item may be content, widget, custom field, ...',
PRIMARY KEY (`id`),
INDEX `fk_action_log_action_log_type1_idx` (`type_id` ASC),
INDEX `fk_action_log_user1_idx` (`user_id` ASC),
CONSTRAINT `fk_action_log_action_log_type1`
FOREIGN KEY (`type_id`)
REFERENCES `action_log_types` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_action_log_user1`
FOREIGN KEY (`user_id`)
REFERENCES `users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'This table contains log of all actions, which happened in administration.';
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;