RelationalDesign: V1__init_ddl.4.sql

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