-- Create database
CREATE DATABASE IF NOT EXISTS prostocktool
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE prostocktool;
-- Create tables in dependency order
-- 1. Independent tables (no foreign keys)
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(100) NOT NULL UNIQUE,
nombre VARCHAR(100) NOT NULL,
identidad VARCHAR(20) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_email (email),
INDEX idx_identidad (identidad)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE categorias (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL UNIQUE,
descripcion VARCHAR(200),
color VARCHAR(7) DEFAULT '#2e6df6',
estado VARCHAR(20) DEFAULT 'ACTIVO',
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_nombre (nombre),
INDEX idx_estado (estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE parametros (
id INT AUTO_INCREMENT PRIMARY KEY,
codigo VARCHAR(10) NOT NULL UNIQUE,
nombre VARCHAR(50) NOT NULL UNIQUE,
descripcion TEXT,
color VARCHAR(7) DEFAULT '#4a90e2',
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_codigo (codigo),
INDEX idx_nombre (nombre)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE bodegas (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL UNIQUE,
descripcion TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_nombre (nombre)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 2. Tables with one level of foreign keys
CREATE TABLE subcategorias (
id INT AUTO_INCREMENT PRIMARY KEY,
categoria_id INT NOT NULL,
nombre VARCHAR(50) NOT NULL,
descripcion VARCHAR(200),
color VARCHAR(7) DEFAULT '#2e6df6',
estado VARCHAR(20) DEFAULT 'ACTIVO',
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (categoria_id) REFERENCES categorias(id) ON DELETE RESTRICT,
UNIQUE KEY unique_nombre_categoria (nombre, categoria_id),
INDEX idx_categoria_id (categoria_id),
INDEX idx_estado (estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE proveedores (
id INT AUTO_INCREMENT PRIMARY KEY,
nif VARCHAR(20),
nombre VARCHAR(100) NOT NULL,
contacto VARCHAR(100),
email VARCHAR(100),
telefono VARCHAR(20),
direccion VARCHAR(255),
ciudad VARCHAR(100),
web VARCHAR(255),
terminos INT,
parametro_id INT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (parametro_id) REFERENCES parametros(id) ON DELETE RESTRICT,
INDEX idx_nombre (nombre),
INDEX idx_parametro_id (parametro_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 3. Products table (references multiple tables)
CREATE TABLE productos (
id INT AUTO_INCREMENT PRIMARY KEY,
categoria_id INT,
subcategoria_id INT,
parametro_id INT,
bodega_id INT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (categoria_id) REFERENCES categorias(id) ON DELETE RESTRICT,
FOREIGN KEY (subcategoria_id) REFERENCES subcategorias(id) ON DELETE RESTRICT,
FOREIGN KEY (parametro_id) REFERENCES parametros(id) ON DELETE RESTRICT,
FOREIGN KEY (bodega_id) REFERENCES bodegas(id) ON DELETE RESTRICT,
INDEX idx_categoria_id (categoria_id),
INDEX idx_subcategoria_id (subcategoria_id),
INDEX idx_parametro_id (parametro_id),
INDEX idx_bodega_id (bodega_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;