-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproject.sql
More file actions
107 lines (95 loc) · 4.36 KB
/
project.sql
File metadata and controls
107 lines (95 loc) · 4.36 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
CREATE TABLE Users (
user_id SERIAL PRIMARY KEY,
full_name VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
role VARCHAR(50) DEFAULT 'member', -- e.g. admin, manager, member
date_joined TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE
);
CREATE TABLE Teams (
team_id SERIAL PRIMARY KEY,
team_name VARCHAR(100) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE TeamMembers (
team_id INT REFERENCES Teams(team_id) ON DELETE CASCADE,
user_id INT REFERENCES Users(user_id) ON DELETE CASCADE,
role VARCHAR(50) DEFAULT 'member',
PRIMARY KEY (team_id, user_id)
);
CREATE TABLE Projects (
project_id SERIAL PRIMARY KEY,
project_name VARCHAR(150) NOT NULL,
description TEXT,
start_date DATE,
end_date DATE,
status VARCHAR(50) DEFAULT 'Planning',
priority VARCHAR(20) DEFAULT 'Medium',
team_id INT REFERENCES Teams(team_id) ON DELETE SET NULL,
created_by INT REFERENCES Users(user_id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE ProjectMembers (
project_id INT REFERENCES Projects(project_id) ON DELETE CASCADE,
user_id INT REFERENCES Users(user_id) ON DELETE CASCADE,
role VARCHAR(50) DEFAULT 'Contributor',
PRIMARY KEY (project_id, user_id)
);
CREATE TABLE Tasks (
task_id SERIAL PRIMARY KEY,
project_id INT REFERENCES Projects(project_id) ON DELETE CASCADE,
assigned_to INT REFERENCES Users(user_id),
title VARCHAR(150) NOT NULL,
description TEXT,
status VARCHAR(50) DEFAULT 'To Do',
priority VARCHAR(20) DEFAULT 'Medium',
start_date DATE,
due_date DATE,
completed_at TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE Comments (
comment_id SERIAL PRIMARY KEY,
task_id INT REFERENCES Tasks(task_id) ON DELETE CASCADE,
user_id INT REFERENCES Users(user_id) ON DELETE CASCADE,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE Attachments (
attachment_id SERIAL PRIMARY KEY,
task_id INT REFERENCES Tasks(task_id) ON DELETE CASCADE,
file_path VARCHAR(255),
uploaded_by INT REFERENCES Users(user_id),
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE TimeLogs (
timelog_id SERIAL PRIMARY KEY,
task_id INT REFERENCES Tasks(task_id) ON DELETE CASCADE,
user_id INT REFERENCES Users(user_id),
hours DECIMAL(5,2),
log_date DATE DEFAULT CURRENT_DATE,
notes TEXT
);
-- | Entity | Description |
-- | ---------------------------- | ----------------------------------------------------------------- |
-- | **Users** | People using the system — can be managers, team members, clients. |
-- | **Projects** | Top-level work items that group related tasks. |
-- | **Tasks** | Individual units of work under projects. |
-- | **Teams** | Groups of users working together. |
-- | **ProjectMembers** | Relationship between users and projects (with roles). |
-- | **Comments** | Notes or discussion threads attached to tasks or projects. |
-- | **Attachments** | Files or links associated with tasks. |
-- | **TimeLogs** | Records of time spent on tasks. |
-- | **Status / Priority / Tags** | Optional lookup tables for categorization. |
-- | Relationship | Type | Description |
-- | ------------------ | ---- | -------------------------------------- |
-- | User → TeamMembers | 1:N | A user can belong to many teams. |
-- | Team → Projects | 1:N | A team can own multiple projects. |
-- | Project → Tasks | 1:N | A project has many tasks. |
-- | Task → Comments | 1:N | Tasks can have many comments. |
-- | Task → Attachments | 1:N | Tasks can have many attachments. |
-- | Task → TimeLogs | 1:N | Tasks can have multiple time logs. |
-- | User → Tasks | 1:N | A user can be assigned multiple tasks. |