-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.sql
More file actions
133 lines (123 loc) · 5.12 KB
/
database.sql
File metadata and controls
133 lines (123 loc) · 5.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
-- CREATE DATABASE IF NOT EXISTS project_management_system;
-- USE project_management_system;
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
full_name VARCHAR(100) NOT NULL,
role ENUM('admin', 'manager', 'user') DEFAULT 'user',
status ENUM('active', 'inactive') DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE projects (
id INT PRIMARY KEY AUTO_INCREMENT,
project_name VARCHAR(200) NOT NULL,
project_code VARCHAR(50) UNIQUE NOT NULL,
description TEXT,
client_name VARCHAR(100),
start_date DATE,
end_date DATE,
status ENUM('planning', 'in_progress', 'on_hold', 'completed', 'cancelled') DEFAULT 'planning',
priority ENUM('low', 'medium', 'high', 'critical') DEFAULT 'medium',
budget DECIMAL(15,2),
created_by INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL
);
CREATE TABLE project_members (
id INT PRIMARY KEY AUTO_INCREMENT,
project_id INT NOT NULL,
user_id INT NOT NULL,
role ENUM('lead', 'member', 'viewer') DEFAULT 'member',
assigned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
UNIQUE KEY unique_member (project_id, user_id)
);
CREATE TABLE requirements (
id INT PRIMARY KEY AUTO_INCREMENT,
project_id INT NOT NULL,
requirement_title VARCHAR(200) NOT NULL,
description TEXT,
type ENUM('functional', 'non_functional', 'technical', 'business') DEFAULT 'functional',
priority ENUM('low', 'medium', 'high', 'critical') DEFAULT 'medium',
status ENUM('pending', 'approved', 'in_progress', 'completed', 'rejected') DEFAULT 'pending',
created_by INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL
);
CREATE TABLE project_phases (
id INT PRIMARY KEY AUTO_INCREMENT,
project_id INT NOT NULL,
phase_name VARCHAR(100) NOT NULL,
description TEXT,
start_date DATE,
end_date DATE,
status ENUM('not_started', 'in_progress', 'completed', 'delayed') DEFAULT 'not_started',
progress INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
);
CREATE TABLE tasks (
id INT PRIMARY KEY AUTO_INCREMENT,
project_id INT NOT NULL,
phase_id INT,
task_name VARCHAR(200) NOT NULL,
description TEXT,
assigned_to INT,
status ENUM('todo', 'in_progress', 'review', 'completed') DEFAULT 'todo',
priority ENUM('low', 'medium', 'high', 'critical') DEFAULT 'medium',
due_date DATE,
estimated_hours DECIMAL(5,2),
actual_hours DECIMAL(5,2),
created_by INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
FOREIGN KEY (phase_id) REFERENCES project_phases(id) ON DELETE SET NULL,
FOREIGN KEY (assigned_to) REFERENCES users(id) ON DELETE SET NULL,
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL
);
CREATE TABLE pricing (
id INT PRIMARY KEY AUTO_INCREMENT,
project_id INT NOT NULL,
item_name VARCHAR(200) NOT NULL,
description TEXT,
category VARCHAR(100),
unit_price DECIMAL(15,2) NOT NULL,
quantity INT DEFAULT 1,
total_price DECIMAL(15,2) GENERATED ALWAYS AS (unit_price * quantity) STORED,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
);
CREATE TABLE project_documents (
id INT PRIMARY KEY AUTO_INCREMENT,
project_id INT NOT NULL,
document_name VARCHAR(200) NOT NULL,
file_path VARCHAR(500),
file_type VARCHAR(50),
file_size INT,
uploaded_by INT,
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
FOREIGN KEY (uploaded_by) REFERENCES users(id) ON DELETE SET NULL
);
CREATE TABLE activity_log (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
project_id INT,
action VARCHAR(100) NOT NULL,
description TEXT,
ip_address VARCHAR(45),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL,
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
);
INSERT INTO users (username, email, password, full_name, role) VALUES
('admin', 'admin@projectmgmt.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'System Admin', 'admin');