|
| 1 | +-- Create the database if it doesn't exist |
| 2 | +-- and set the character set and collation |
| 3 | +CREATE DATABASE IF NOT EXISTS todolist |
| 4 | + CHARACTER SET utf8mb4 |
| 5 | + COLLATE utf8mb4_0900_ai_ci; |
| 6 | + |
| 7 | +USE todolist; |
| 8 | + |
| 9 | +-- 1) USERS |
| 10 | +CREATE TABLE IF NOT EXISTS users ( |
| 11 | + id INT AUTO_INCREMENT PRIMARY KEY, |
| 12 | + name VARCHAR(255) NOT NULL, |
| 13 | + email VARCHAR(255) NOT NULL UNIQUE, |
| 14 | + phone VARCHAR(20) NULL, |
| 15 | + birth_date DATE NULL, |
| 16 | + password_hash VARCHAR(255) NOT NULL, |
| 17 | + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 18 | + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
| 19 | +) ENGINE=InnoDB; |
| 20 | + |
| 21 | +-- 2) PROJECTS |
| 22 | +CREATE TABLE IF NOT EXISTS projects ( |
| 23 | + id INT AUTO_INCREMENT PRIMARY KEY, |
| 24 | + user_id INT NOT NULL, |
| 25 | + title VARCHAR(255) NOT NULL, |
| 26 | + description TEXT NULL, |
| 27 | + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 28 | + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, |
| 29 | + CONSTRAINT fk_projects_user |
| 30 | + FOREIGN KEY (user_id) REFERENCES users(id) |
| 31 | + ON DELETE CASCADE |
| 32 | + ON UPDATE CASCADE |
| 33 | +) ENGINE=InnoDB; |
| 34 | + |
| 35 | +-- 3) TASKS |
| 36 | +CREATE TABLE IF NOT EXISTS tasks ( |
| 37 | + id INT AUTO_INCREMENT PRIMARY KEY, |
| 38 | + user_id INT NOT NULL, |
| 39 | + project_id INT NULL, |
| 40 | + title VARCHAR(255) NOT NULL, |
| 41 | + description TEXT NULL, |
| 42 | + due_date DATETIME NULL, |
| 43 | + reminder BOOLEAN NOT NULL DEFAULT FALSE, |
| 44 | + completed BOOLEAN NOT NULL DEFAULT FALSE, |
| 45 | + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 46 | + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, |
| 47 | + CONSTRAINT fk_tasks_user |
| 48 | + FOREIGN KEY (user_id) REFERENCES users(id) |
| 49 | + ON DELETE CASCADE |
| 50 | + ON UPDATE CASCADE, |
| 51 | + CONSTRAINT fk_tasks_project |
| 52 | + FOREIGN KEY (project_id) REFERENCES projects(id) |
| 53 | + ON DELETE SET NULL |
| 54 | + ON UPDATE CASCADE |
| 55 | +) ENGINE=InnoDB; |
| 56 | + |
| 57 | +-- Indexes for performance optimization |
| 58 | +CREATE INDEX idx_users_email ON users(email); |
| 59 | +CREATE INDEX idx_users_phone ON users(phone); |
| 60 | +CREATE INDEX idx_projects_user ON projects(user_id); |
| 61 | +CREATE INDEX idx_tasks_user ON tasks(user_id); |
| 62 | +CREATE INDEX idx_tasks_project ON tasks(project_id); |
| 63 | +CREATE INDEX idx_tasks_due_date ON tasks(due_date); |
| 64 | +CREATE INDEX idx_tasks_completed ON tasks(completed); |
| 65 | +CREATE INDEX idx_tasks_reminder ON tasks(reminder); |
| 66 | +CREATE INDEX idx_tasks_user_completed ON tasks(user_id, completed); |
0 commit comments