VanguardAI/schema/schema.sql
2024-10-27 12:50:51 -06:00

223 lines
7.6 KiB
SQL

-- Base de Datos Personal Assistant
CREATE DATABASE IF NOT EXISTS personal_assistant_db;
USE personal_assistant_db;
-- @table: users
-- @description: Tabla de usuarios que contiene la información básica del usuario
CREATE TABLE IF NOT EXISTS users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- @table: task_status
-- @description: Tabla de estados de las tareas
CREATE TABLE IF NOT EXISTS task_status (
status_id INT AUTO_INCREMENT PRIMARY KEY,
status_name VARCHAR(50) NOT NULL UNIQUE,
description TEXT
);
-- @table: tasks
-- @description: Tabla de tareas que almacena las tareas creadas por los usuarios
CREATE TABLE IF NOT EXISTS tasks (
task_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
status_id INT NOT NULL,
task_title VARCHAR(150) NOT NULL,
description TEXT,
color VARCHAR(10),
due_date DATE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- @table: notification_types
-- @description: Tabla de tipos de notificación
CREATE TABLE IF NOT EXISTS notification_types (
type_id INT AUTO_INCREMENT PRIMARY KEY,
type_name VARCHAR(50) NOT NULL UNIQUE,
description TEXT
);
-- @table: notifications
-- @description: Tabla de notificaciones que almacena las notificaciones enviadas a los usuarios
CREATE TABLE IF NOT EXISTS notifications (
notification_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
type_id INT NOT NULL,
message TEXT NOT NULL,
is_read BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- @table: settings
-- @description: Tabla de configuraciones del sistema
CREATE TABLE IF NOT EXISTS settings (
setting_id INT AUTO_INCREMENT PRIMARY KEY,
setting_key VARCHAR(50) NOT NULL UNIQUE,
setting_value VARCHAR(255) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- @table: frequencies
-- @description: Tabla de frecuencias utilizadas para ingresos y gastos
CREATE TABLE IF NOT EXISTS frequencies (
frequency_id INT AUTO_INCREMENT PRIMARY KEY,
frequency_name VARCHAR(50) NOT NULL UNIQUE,
description TEXT
);
-- @table: incomes
-- @description: Tabla de ingresos de los usuarios
CREATE TABLE IF NOT EXISTS incomes (
income_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
income_name VARCHAR(100) NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
frequency_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- @table: expense_categories
-- @description: Tabla de categorías de gastos
CREATE TABLE IF NOT EXISTS expense_categories (
category_id INT AUTO_INCREMENT PRIMARY KEY,
category_name VARCHAR(100) NOT NULL UNIQUE,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- @table: expenses
-- @description: Tabla de gastos de los usuarios
CREATE TABLE IF NOT EXISTS expenses (
expense_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
category_id INT NOT NULL,
expense_name VARCHAR(100) NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
frequency_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- @table: email_templates
-- @description: Tabla de plantillas de correo
CREATE TABLE IF NOT EXISTS email_templates (
template_id INT AUTO_INCREMENT PRIMARY KEY,
template_name VARCHAR(100) NOT NULL UNIQUE,
html_content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- @table: email_status
-- @description: Tabla de estados de correo
CREATE TABLE IF NOT EXISTS email_status (
status_id INT AUTO_INCREMENT PRIMARY KEY,
status_name VARCHAR(50) NOT NULL UNIQUE,
description TEXT
);
-- @table: sent_emails
-- @description: Tabla de correos enviados por el sistema
CREATE TABLE IF NOT EXISTS sent_emails (
email_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
template_id INT NOT NULL,
status_id INT NOT NULL,
subject VARCHAR(150) NOT NULL,
message TEXT NOT NULL,
sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- @table: healthy_recipes
-- @description: Tabla de recetas saludables
CREATE TABLE IF NOT EXISTS healthy_recipes (
recipe_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
recipe_name VARCHAR(100) NOT NULL,
description TEXT,
ingredients TEXT,
instructions TEXT,
calories DECIMAL(6, 2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- @table: workout_routines
-- @description: Tabla de rutinas de gimnasio o calistenia
CREATE TABLE IF NOT EXISTS workout_routines (
routine_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
routine_name VARCHAR(100) NOT NULL,
description TEXT,
routine_type VARCHAR(50) NOT NULL,
exercises TEXT,
duration INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- @table: exercises
-- @description: Tabla de ejercicios para rutinas de gimnasio o calistenia
CREATE TABLE IF NOT EXISTS exercises (
exercise_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
type VARCHAR(50) NOT NULL,
muscle VARCHAR(50) NOT NULL,
equipment VARCHAR(50),
difficulty VARCHAR(20) NOT NULL,
instructions TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- @table: important_events
-- @description: Tabla de eventos importantes
CREATE TABLE IF NOT EXISTS important_events (
event_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
event_name VARCHAR(100) NOT NULL,
event_date DATE NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- @insert: task_status
-- @description: Inserta los estados iniciales de las tareas
INSERT INTO task_status (status_name, description) VALUES
('Pendiente', 'Tarea pendiente de realizar'),
('En Proceso', 'Tarea en ejecución'),
('Completada', 'Tarea completada'),
('Cancelada', 'Tarea cancelada');
-- @insert: notification_types
-- @description: Inserta los tipos de notificación iniciales
INSERT INTO notification_types (type_name, description) VALUES
('Alerta', 'Notificación de alerta de alta prioridad'),
('Recordatorio', 'Notificación para recordar tareas o eventos'),
('Información', 'Notificación de información general');
-- @insert: settings
-- @description: Inserta configuraciones iniciales del sistema
INSERT INTO settings (setting_key, setting_value, description) VALUES
('theme', 'dark', 'Tema predeterminado de la aplicación'),
('language', 'es', 'Idioma predeterminado de la aplicación'),
('timezone', 'UTC-6', 'Zona horaria predeterminada de la aplicación');
-- @insert: frequencies
-- @description: Inserta las frecuencias de ingresos y gastos
INSERT INTO frequencies (frequency_name, description) VALUES
('Diario', 'Frecuencia diaria'),
('Semanal', 'Frecuencia semanal'),
('Mensual', 'Frecuencia mensual'),
('Anual', 'Frecuencia anual');