RelationalDesign: V1__init_ddl.5.sql

File V1__init_ddl.5.sql, 8.3 KB (added by 225144, 9 hours ago)
Line 
1DROP TABLE IF EXISTS users CASCADE;
2DROP TABLE IF EXISTS moderator CASCADE;
3DROP TABLE IF EXISTS developer CASCADE;
4DROP TABLE IF EXISTS project_manager CASCADE;
5DROP TABLE IF EXISTS thread CASCADE;
6DROP TABLE IF EXISTS likes CASCADE;
7DROP TABLE IF EXISTS topic_threads_moderators CASCADE;
8DROP TABLE IF EXISTS tag CASCADE;
9DROP TABLE IF EXISTS tag_threads CASCADE;
10DROP TABLE IF EXISTS topic_thread CASCADE;
11DROP TABLE IF EXISTS topic_belongs_to_project CASCADE;
12DROP TABLE IF EXISTS blacklisted_user CASCADE;
13DROP TABLE IF EXISTS project_thread CASCADE;
14DROP TABLE IF EXISTS discussion_thread CASCADE;
15DROP TABLE IF EXISTS developer_associated_with_project CASCADE;
16DROP TABLE IF EXISTS permissions CASCADE;
17DROP TABLE IF EXISTS project_roles CASCADE;
18DROP TABLE IF EXISTS users_project_roles CASCADE;
19DROP TABLE IF EXISTS project_roles_permissions CASCADE;
20DROP TABLE IF EXISTS project_request CASCADE;
21DROP TABLE IF EXISTS report CASCADE;
22DROP TABLE IF EXISTS channel CASCADE;
23DROP TABLE IF EXISTS messages CASCADE;
24DROP TABLE IF EXISTS threads_moderators CASCADE;
25DROP TYPE IF EXISTS status;
26DROP VIEW IF EXISTS v_topic_thread CASCADE;
27DROP VIEW IF EXISTS v_project_thread CASCADE;
28DROP VIEW IF EXISTS v_discussion_thread CASCADE;
29DROP VIEW IF EXISTS v_project_owner CASCADE;
30DROP VIEW IF EXISTS v_moderator CASCADE;
31drop function if exists fn_insert_project_manager CASCADE;
32drop function if exists fn_insert_topics_creator_as_moderator CASCADE;
33drop function if exists fn_validate_topic_title CASCADE;
34drop function if exists clean_tables CASCADE;
35drop function if exists clean_routines CASCADE;
36DROP TRIGGER IF EXISTS validate_same_parent ON discussion_thread CASCADE;
37drop table if exists topic_guidelines cascade;
38drop table if exists submission cascade;
39drop table if exists feedback;
40drop table if exists embeddable_thread;
41
42CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
43
44
45---- DDL
46CREATE TABLE users
47(
48 id SERIAL PRIMARY KEY,
49 username VARCHAR(32) UNIQUE NOT NULL,
50 email varchar(60) not null,
51 name varchar(32) not null,
52 is_activate bool DEFAULT true,
53 password VARCHAR(72) NOT NULL,
54 description VARCHAR(200),
55 registered_at TIMESTAMP DEFAULT NOW() NOT NULL,
56 sex VARCHAR(1) NOT NULL
57);
58CREATE TABLE moderator
59(
60 id INT PRIMARY KEY REFERENCES users (id) on delete cascade
61);
62CREATE TABLE developer
63(
64 id INT PRIMARY KEY REFERENCES users (id) on delete cascade
65);
66CREATE TABLE project_manager
67(
68 id INT PRIMARY KEY REFERENCES users (id) on delete cascade
69);
70CREATE TABLE thread
71(
72 id SERIAL PRIMARY KEY,
73 content TEXT,
74 created_at timestamp DEFAULT NOW() NOT NULL,
75 user_id INT REFERENCES users (id) NOT NULL --IS_CREATED_BY TOTAL
76);
77CREATE TABLE project_thread
78(
79 title VARCHAR(256) UNIQUE NOT NULL,
80 repo_url TEXT,
81 id INT PRIMARY KEY REFERENCES thread (id) on delete cascade --INHERITANCE
82);
83create table embeddable_thread
84(
85 id int primary key references thread (id) on delete cascade
86);
87
88CREATE TABLE topic_thread
89(
90 title VARCHAR(256) NOT NULL,
91 id INT PRIMARY KEY REFERENCES embeddable_thread (id) on delete cascade, --INHERITANCE
92 parent_id int REFERENCES project_thread (id) on delete CASCADE, --PARENT
93 UNIQUE (parent_id, title)
94);
95create table topic_guidelines
96(
97 id serial,
98 topic_id int references topic_thread (id) on delete cascade,
99 description text,
100 PRIMARY KEY (id, topic_id)
101);
102CREATE TABLE discussion_thread
103(
104 id INT PRIMARY KEY REFERENCES embeddable_thread (id) on delete cascade, --INHERITANCE,
105 parent_id int REFERENCES embeddable_thread (id) NOT NULL --on delete CASCADE ne tuku preku trigger PARENT TOTAL BIGINT
106);
107
108CREATE TABLE likes
109(
110 user_id INT REFERENCES users (id) on delete cascade,
111 thread_id INT REFERENCES thread (id) on delete cascade,
112 PRIMARY KEY (user_id, thread_id)
113);
114CREATE TABLE topic_threads_moderators
115(
116 thread_id INT REFERENCES topic_thread (id) ON DELETE CASCADE NOT NULL,
117 user_id INT REFERENCES moderator (id) ON DELETE CASCADE NOT NULL,
118 started_at TIMESTAMP DEFAULT NOW() NOT NULL,
119 PRIMARY KEY (thread_id, user_id)
120);
121CREATE TABLE tag
122(
123 name VARCHAR(64) PRIMARY KEY,
124 creator_id int REFERENCES users (id) on delete CASCADE not null
125);
126CREATE TABLE tag_threads
127(
128 thread_id INT REFERENCES thread (id) ON DELETE CASCADE,
129 tag_name VARCHAR(64) REFERENCES tag (name) ON DELETE CASCADE,
130 PRIMARY KEY (thread_id, tag_name)
131);
132
133CREATE TABLE blacklisted_user
134(
135 id serial primary key,
136 topic_id INT REFERENCES thread (id) ON DELETE CASCADE,
137 user_id INT REFERENCES users (id) ON DELETE CASCADE,
138 moderator_id INT REFERENCES users (id) ON DELETE CASCADE,
139 start_date TIMESTAMP,
140 end_date TIMESTAMP,
141 reason TEXT,
142 UNIQUE (user_id, moderator_id, topic_id, start_date)
143);
144CREATE TABLE developer_associated_with_project
145(
146 project_id INT REFERENCES project_thread (id) on delete cascade,
147 developer_id INT REFERENCES developer (id) on delete cascade,
148 started_at TIMESTAMP DEFAULT NOW() NOT NULL,
149 ended_at TIMESTAMP,
150 PRIMARY KEY (project_id, developer_id, started_at)
151);
152CREATE TABLE channel
153(
154 id uuid primary key default uuid_generate_v4(),
155 name VARCHAR(64) NOT NULL,
156 description VARCHAR(200),
157 project_id INT REFERENCES project_thread (id) ON DELETE CASCADE NOT NULL, --HAS
158 developer_id INT REFERENCES developer (id) NOT NULL, --CONSTRUCTS
159 UNIQUE (name,project_id)
160);
161CREATE TABLE permissions
162(
163 name VARCHAR(32) PRIMARY KEY
164);
165
166
167create table project_role
168(
169 id serial PRIMARY KEY ,
170 name varchar(32) NOT NULL,
171 project_id int references project_thread (id) ON DELETE CASCADE NOT NULL,
172 override_type varchar(20) check ( override_type in ('INCLUDE','EXCLUDE')) NOT NULL DEFAULT 'EXCLUDE'
173);
174
175CREATE TABLE role_permissions
176(
177 permission_name VARCHAR(32) NOT NULl,
178 role_id INT REFERENCES project_role(id) ON DELETE CASCADE NOT NULL,
179 FOREIGN KEY (permission_name) REFERENCES permissions(name),
180 PRIMARY KEY (permission_name, role_id)
181);
182
183CREATE TABLE role_permissions_overrides
184(
185 channel_id uuid references channel(id) on delete cascade ,
186 permission_name VARCHAR(32) NOT NULL,
187 role_id INT REFERENCES project_role(id) ON DELETE CASCADE NOT NULL,
188 FOREIGN KEY (role_id,permission_name) REFERENCES role_permissions (role_id,permission_name) ON DELETE CASCADE,
189 PRIMARY KEY (role_id,permission_name,channel_id)
190);
191
192CREATE TABLE users_project_roles
193(
194 user_id INT REFERENCES developer (id) on delete cascade NOT NULL,
195 role_id INT REFERENCES project_role(id) on delete cascade NOT NULL,
196 PRIMARY KEY (user_id, role_id)
197);
198
199
200create table submission
201(
202 id serial primary key,
203 created_at TIMESTAMP default now() NOT NULL ,
204 description VARCHAR(200) NOT NULL,
205 status varchar(32) default 'PENDING' CHECK (status IN ('ACCEPTED', 'DENIED', 'PENDING')) NOT NULL,
206 created_by int REFERENCES users (id) NOT NULL
207);
208
209CREATE TABLE project_request
210(
211 id int PRIMARY KEY REFERENCES submission (id),
212 project_id INT REFERENCES thread (id) ON DELETE CASCADE NOT NULL --RECIEVES
213);
214
215create table feedback
216(
217 description TEXT,
218 submission_type varchar(1) CHECK (submission_type IN ('P', 'R')) NOT NULL,
219 created_at timestamp default now() not null,
220 created_by int references users (id) NOT NULL, --WRITTEN_BY
221 submission_id int PRIMARY KEY references submission (id) on delete cascade
222);
223
224CREATE TABLE report
225(
226 id int PRIMARY KEY REFERENCES submission (id),
227 thread_id INT REFERENCES topic_thread (id) on delete cascade NOT NULL, --FOR_MISCONDUCT
228 for_user_id INT REFERENCES users (id) on delete cascade NOT NULL --ABOUT
229);
230
231CREATE TABLE messages
232(
233 sent_at TIMESTAMP NOT NULL,
234 content VARCHAR(200) NOT NULL,
235 sent_by INT REFERENCES developer (id) NOT NULL,
236 project_id INT NOT NULL,
237 channel_name VARCHAR(64) NOT NULL,
238 FOREIGN KEY (channel_name, project_id)
239 REFERENCES channel (name, project_id) ON DELETE CASCADE,
240 PRIMARY KEY (channel_name, project_id, sent_at, sent_by)
241);
242
243