memberflow-docker/Documentación/DB_Design/db_creation/mf_db_creation_script.sql

404 lines
12 KiB
MySQL
Raw Normal View History

2025-05-29 19:45:24 +00:00
-- 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='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- -----------------------------------------------------
-- Schema mf_db
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema mf_db
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS mf_db DEFAULT CHARACTER SET utf8 ;
USE mf_db ;
-- -----------------------------------------------------
-- Table mf_db.ROLES
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.ROLES (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX name_UNIQUE (name ASC) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.USERS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.USERS (
id INT NOT NULL AUTO_INCREMENT,
fk_role INT NOT NULL,
name VARCHAR(50) NOT NULL,
surname VARCHAR(50) NOT NULL,
phone_number VARCHAR(30) NOT NULL,
email VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL,
address VARCHAR(100) NULL,
register_date DATETIME NULL,
status VARCHAR(20) NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX email_UNIQUE (email ASC) ,
INDEX fk_USERS_ROLES1_idx (fk_role ASC) ,
CONSTRAINT fk_USERS_ROLES1
FOREIGN KEY (fk_role)
REFERENCES mf_db.ROLES (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.MEMBERSHIPS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.MEMBERSHIPS (
id INT NOT NULL AUTO_INCREMENT,
type VARCHAR(50) NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
status VARCHAR(20) NOT NULL,
PRIMARY KEY (id))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.STUDENTS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.STUDENTS (
id INT NOT NULL,
fk_user INT NOT NULL,
fk_membership INT NULL,
dni VARCHAR(10) NOT NULL,
birthdate DATE NOT NULL,
belt VARCHAR(20) NULL,
progress TEXT NULL,
medical_report VARCHAR(500) NULL,
parent_name VARCHAR(50) NULL,
PRIMARY KEY (id),
UNIQUE INDEX dni_UNIQUE (dni ASC) ,
INDEX fk_STUDENTS_MEMBERSHIPS1_idx (fk_membership ASC) ,
INDEX fk_STUDENTS_USERS1_idx (fk_user ASC) ,
UNIQUE INDEX fk_user_UNIQUE (fk_user ASC) ,
CONSTRAINT fk_STUDENTS_MEMBERSHIPS1
FOREIGN KEY (fk_membership)
REFERENCES mf_db.MEMBERSHIPS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_STUDENTS_USERS1
FOREIGN KEY (fk_user)
REFERENCES mf_db.USERS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.TEACHERS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.TEACHERS (
id INT NOT NULL,
fk_user INT NOT NULL,
discipline VARCHAR(50) NULL,
PRIMARY KEY (id),
INDEX fk_TEACHERS_USERS1_idx (fk_user ASC) ,
UNIQUE INDEX fk_user_UNIQUE (fk_user ASC) ,
CONSTRAINT fk_TEACHERS_USERS1
FOREIGN KEY (fk_user)
REFERENCES mf_db.USERS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.TRAINING_GROUPS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.TRAINING_GROUPS (
id INT NOT NULL AUTO_INCREMENT,
fk_teacher INT NOT NULL,
name VARCHAR(45) NOT NULL,
level VARCHAR(45) NULL,
schedule DATETIME NULL,
PRIMARY KEY (id),
INDEX fk_GROUPS_TEACHERS1_idx (fk_teacher ASC) ,
CONSTRAINT fk_GROUPS_TEACHERS1
FOREIGN KEY (fk_teacher)
REFERENCES mf_db.TEACHERS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.TRAINING_SESSIONS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.TRAINING_SESSIONS (
id INT NOT NULL AUTO_INCREMENT,
fk_group INT NOT NULL,
date_time DATETIME NULL,
status VARCHAR(50) NULL,
PRIMARY KEY (id),
INDEX fk_CLASSES_GROUPS1_idx (fk_group ASC) ,
CONSTRAINT fk_CLASSES_GROUPS1
FOREIGN KEY (fk_group)
REFERENCES mf_db.TRAINING_GROUPS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.INVOICES
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.INVOICES (
id INT NOT NULL AUTO_INCREMENT,
fk_user INT NOT NULL,
date DATETIME NOT NULL,
total DECIMAL(10,2) NOT NULL,
status VARCHAR(20) NOT NULL,
PRIMARY KEY (id),
INDEX fk_INVOICES_USERS1_idx (fk_user ASC) ,
CONSTRAINT fk_INVOICES_USERS1
FOREIGN KEY (fk_user)
REFERENCES mf_db.USERS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.IVA_TYPE
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.IVA_TYPE (
id INT NOT NULL AUTO_INCREMENT,
percentage DECIMAL(10,2) NOT NULL,
description VARCHAR(50) NULL,
PRIMARY KEY (id))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.PRODUCTS_SERVICES
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.PRODUCTS_SERVICES (
id INT NOT NULL AUTO_INCREMENT,
fk_iva_type INT NOT NULL,
name VARCHAR(100) NOT NULL,
description VARCHAR(250) NULL,
price DECIMAL(10,2) NOT NULL,
type VARCHAR(45) NOT NULL,
status VARCHAR(20) NULL,
PRIMARY KEY (id),
INDEX fk_PRODUCTS_SERVICES_IVA_TYPE1_idx (fk_iva_type ASC) ,
CONSTRAINT fk_PRODUCTS_SERVICES_IVA_TYPE1
FOREIGN KEY (fk_iva_type)
REFERENCES mf_db.IVA_TYPE (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.INVOICE_LINES
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.INVOICE_LINES (
id INT NOT NULL AUTO_INCREMENT,
fk_invoice INT NOT NULL,
fk_product_service INT NOT NULL,
description TEXT NULL,
quantity INT NOT NULL,
unit_price DECIMAL(10,2) NOT NULL,
subtotal DECIMAL(10,2) NOT NULL,
PRIMARY KEY (id),
INDEX fk_INVOICE_LINES_INVOICES_idx (fk_invoice ASC) ,
INDEX fk_INVOICE_LINES_PRODUCTS_SERVICES1_idx (fk_product_service ASC) ,
CONSTRAINT fk_INVOICE_LINES_INVOICES
FOREIGN KEY (fk_invoice)
REFERENCES mf_db.INVOICES (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_INVOICE_LINES_PRODUCTS_SERVICES1
FOREIGN KEY (fk_product_service)
REFERENCES mf_db.PRODUCTS_SERVICES (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.NOTIFICATIONS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.NOTIFICATIONS (
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(200) NOT NULL,
message TEXT NULL,
shipping_date DATETIME NOT NULL,
type VARCHAR(100) NULL,
status VARCHAR(50) NULL,
PRIMARY KEY (id))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.STUDENT_HISTORY
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.STUDENT_HISTORY (
id INT NOT NULL AUTO_INCREMENT,
fk_student INT NOT NULL,
event_date DATE NULL,
event_type VARCHAR(200) NULL,
description TEXT NULL,
PRIMARY KEY (id),
INDEX fk_STUDENT_HISTORY_STUDENTS1_idx (fk_student ASC) ,
CONSTRAINT fk_STUDENT_HISTORY_STUDENTS1
FOREIGN KEY (fk_student)
REFERENCES mf_db.STUDENTS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.STUDENTS_GROUPS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.STUDENTS_GROUPS (
fk_student INT NOT NULL,
fk_group INT NOT NULL,
PRIMARY KEY (fk_student, fk_group),
INDEX fk_STUDENTS_has_GROUPS_GROUPS1_idx (fk_group ASC) ,
INDEX fk_STUDENTS_has_GROUPS_STUDENTS1_idx (fk_student ASC) ,
CONSTRAINT fk_STUDENTS_has_GROUPS_STUDENTS1
FOREIGN KEY (fk_student)
REFERENCES mf_db.STUDENTS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_STUDENTS_has_GROUPS_GROUPS1
FOREIGN KEY (fk_group)
REFERENCES mf_db.TRAINING_GROUPS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.ASSISTANCE
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.ASSISTANCE (
id INT NOT NULL AUTO_INCREMENT,
fk_training_session INT NOT NULL,
fk_student INT NOT NULL,
date_time DATETIME NOT NULL,
PRIMARY KEY (id),
INDEX fk_ASISTENCIAS_CLASSES1_idx (fk_training_session ASC) ,
INDEX fk_ASISTENCIAS_STUDENTS1_idx (fk_student ASC) ,
CONSTRAINT fk_ASISTENCIAS_CLASSES1
FOREIGN KEY (fk_training_session)
REFERENCES mf_db.TRAINING_SESSIONS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_ASISTENCIAS_STUDENTS1
FOREIGN KEY (fk_student)
REFERENCES mf_db.STUDENTS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.PAYMENTS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.PAYMENTS (
id INT NOT NULL AUTO_INCREMENT,
fk_invoice INT NOT NULL,
payment_date DATETIME NOT NULL,
amount DECIMAL(10,2) NOT NULL,
payment_method VARCHAR(50) NOT NULL,
status VARCHAR(20) NOT NULL,
PRIMARY KEY (id),
INDEX fk_PAYMENTS_INVOICES1_idx (fk_invoice ASC) ,
CONSTRAINT fk_PAYMENTS_INVOICES1
FOREIGN KEY (fk_invoice)
REFERENCES mf_db.INVOICES (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.PERMISSIONS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.PERMISSIONS (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX name_UNIQUE (name ASC) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.ROLES_PERMISSIONS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.ROLES_PERMISSIONS (
fk_role INT NOT NULL,
fk_permission INT NOT NULL,
PRIMARY KEY (fk_role, fk_permission),
INDEX fk_ROLES_has_PERMISSIONS_PERMISSIONS1_idx (fk_permission ASC) ,
INDEX fk_ROLES_has_PERMISSIONS_ROLES1_idx (fk_role ASC) ,
CONSTRAINT fk_ROLES_has_PERMISSIONS_ROLES1
FOREIGN KEY (fk_role)
REFERENCES mf_db.ROLES (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_ROLES_has_PERMISSIONS_PERMISSIONS1
FOREIGN KEY (fk_permission)
REFERENCES mf_db.PERMISSIONS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.USERS_NOTIFICATIONS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.USERS_NOTIFICATIONS (
fk_user INT NOT NULL,
fk_notification INT NOT NULL,
PRIMARY KEY (fk_user, fk_notification),
INDEX fk_USERS_has_NOTIFICATIONS_NOTIFICATIONS1_idx (fk_notification ASC) ,
INDEX fk_USERS_has_NOTIFICATIONS_USERS1_idx (fk_user ASC) ,
CONSTRAINT fk_USERS_has_NOTIFICATIONS_USERS1
FOREIGN KEY (fk_user)
REFERENCES mf_db.USERS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_USERS_has_NOTIFICATIONS_NOTIFICATIONS1
FOREIGN KEY (fk_notification)
REFERENCES mf_db.NOTIFICATIONS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table mf_db.ADMINS
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS mf_db.ADMINS (
id INT NOT NULL AUTO_INCREMENT,
fk_user INT NOT NULL,
PRIMARY KEY (id),
INDEX fk_ADMINS_USERS1_idx (fk_user ASC) ,
UNIQUE INDEX fk_user_UNIQUE (fk_user ASC) ,
CONSTRAINT fk_ADMINS_USERS1
FOREIGN KEY (fk_user)
REFERENCES mf_db.USERS (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;