RelationalDesign: V1__init_ddl.6.sql

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