source: backend/src/main/resources/db/migration/V1__initial_schema.sql

main
Last change on this file was 700e2f9, checked in by 186079 <matej.milevski@…>, 5 days ago

Init

  • Property mode set to 100644
File size: 4.8 KB
Line 
1CREATE SCHEMA IF NOT EXISTS project;
2SET search_path = project, public;
3
4-- ========== TABLES ==========
5
6-- USER
7CREATE TABLE IF NOT EXISTS "user" (
8 id_user SERIAL PRIMARY KEY,
9 username VARCHAR(50) NOT NULL UNIQUE,
10 name VARCHAR(100) NOT NULL,
11 surname VARCHAR(100) NOT NULL,
12 email VARCHAR(255) NOT NULL UNIQUE,
13 password VARCHAR(255) NOT NULL
14);
15
16-- THERAPIST (extends USER)
17CREATE TABLE IF NOT EXISTS therapist (
18 id_user INTEGER PRIMARY KEY,
19 office_location VARCHAR(255) NOT NULL,
20 degree VARCHAR(100) NOT NULL,
21 years_exp INTEGER NOT NULL CHECK (years_exp >= 0),
22 phone_number VARCHAR(20) NOT NULL,
23 consultation_slots DATE[],
24 CONSTRAINT fk_therapist_user
25 FOREIGN KEY (id_user) REFERENCES "user"(id_user)
26 ON UPDATE CASCADE ON DELETE CASCADE
27);
28
29-- PATIENT (extends USER)
30CREATE TABLE IF NOT EXISTS patient (
31 id_user INTEGER PRIMARY KEY,
32 id_therapist INTEGER,
33 CONSTRAINT fk_patient_user
34 FOREIGN KEY (id_user) REFERENCES "user"(id_user)
35 ON UPDATE CASCADE ON DELETE CASCADE,
36 CONSTRAINT fk_patient_therapist
37 FOREIGN KEY (id_therapist) REFERENCES therapist(id_user)
38 ON UPDATE CASCADE ON DELETE SET NULL
39);
40
41-- BLOG
42CREATE TABLE IF NOT EXISTS blog (
43 id_blog SERIAL PRIMARY KEY,
44 id_patient INTEGER NOT NULL,
45 content TEXT NOT NULL,
46 title VARCHAR(200) NOT NULL,
47 date_of_post TIMESTAMPTZ NOT NULL DEFAULT NOW(),
48 CONSTRAINT fk_blog_patient
49 FOREIGN KEY (id_patient) REFERENCES patient(id_user)
50 ON UPDATE CASCADE ON DELETE CASCADE
51);
52
53-- COMMENT
54CREATE TABLE IF NOT EXISTS comment (
55 id_comment SERIAL PRIMARY KEY,
56 id_blog INTEGER NOT NULL,
57 id_patient INTEGER NOT NULL,
58 content TEXT NOT NULL,
59 date_of_comment TIMESTAMPTZ NOT NULL DEFAULT NOW(),
60 CONSTRAINT fk_comment_blog
61 FOREIGN KEY (id_blog) REFERENCES blog(id_blog)
62 ON UPDATE CASCADE ON DELETE CASCADE,
63 CONSTRAINT fk_comment_patient
64 FOREIGN KEY (id_patient) REFERENCES patient(id_user)
65 ON UPDATE CASCADE ON DELETE CASCADE
66);
67
68-- DIARY
69CREATE TABLE IF NOT EXISTS diary (
70 id_diary SERIAL PRIMARY KEY,
71 id_patient INTEGER NOT NULL,
72 date DATE NOT NULL,
73 daily_rating SMALLINT NOT NULL CHECK (daily_rating BETWEEN 1 AND 10),
74 content TEXT NOT NULL,
75 CONSTRAINT uq_diary_patient_date UNIQUE (id_patient, date),
76 CONSTRAINT fk_diary_patient
77 FOREIGN KEY (id_patient) REFERENCES patient(id_user)
78 ON UPDATE CASCADE ON DELETE CASCADE
79);
80
81-- CONSULTATION
82CREATE TABLE IF NOT EXISTS consultation (
83 id_consultation SERIAL PRIMARY KEY,
84 id_patient INTEGER NOT NULL,
85 id_therapist INTEGER NOT NULL,
86 date DATE NOT NULL,
87 date_of_payment DATE NULL,
88 price DECIMAL(10,2) NOT NULL CHECK (price >= 0),
89 advice TEXT,
90 CONSTRAINT fk_consultation_patient
91 FOREIGN KEY (id_patient) REFERENCES patient(id_user)
92 ON UPDATE CASCADE ON DELETE CASCADE,
93 CONSTRAINT fk_consultation_therapist
94 FOREIGN KEY (id_therapist) REFERENCES therapist(id_user)
95 ON UPDATE CASCADE ON DELETE CASCADE
96);
97
98-- THERAPY
99CREATE TABLE IF NOT EXISTS therapy (
100 id_therapy SERIAL PRIMARY KEY,
101 name VARCHAR(100) NOT NULL,
102 dose VARCHAR(50) NOT NULL,
103 exp_date DATE NOT NULL,
104 id_consultation INTEGER NOT NULL,
105 CONSTRAINT fk_therapy_consultation
106 FOREIGN KEY (id_consultation) REFERENCES consultation(id_consultation)
107 ON UPDATE CASCADE ON DELETE CASCADE
108);
109
110-- ========== RELATIONS ==========
111
112-- Likes: patients <-> blogs
113CREATE TABLE IF NOT EXISTS patient_likes_blog (
114 id_patient INTEGER NOT NULL,
115 id_blog INTEGER NOT NULL,
116 PRIMARY KEY (id_patient, id_blog),
117 CONSTRAINT fk_plb_patient
118 FOREIGN KEY (id_patient) REFERENCES patient(id_user)
119 ON UPDATE CASCADE ON DELETE CASCADE,
120 CONSTRAINT fk_plb_blog
121 FOREIGN KEY (id_blog) REFERENCES blog(id_blog)
122 ON UPDATE CASCADE ON DELETE CASCADE
123);
124
125-- ========== INDEXES ==========
126CREATE INDEX IF NOT EXISTS idx_patient_therapist
127 ON patient (id_therapist);
128
129CREATE INDEX IF NOT EXISTS idx_blog_patient_date
130 ON blog (id_patient, date_of_post DESC);
131
132CREATE INDEX IF NOT EXISTS idx_comment_blog_date
133 ON comment (id_blog, date_of_comment DESC);
134
135CREATE INDEX IF NOT EXISTS idx_consultation_patient_date
136 ON consultation (id_patient, date DESC);
137
138CREATE INDEX IF NOT EXISTS idx_consultation_therapist_date
139 ON consultation (id_therapist, date DESC);
140
Note: See TracBrowser for help on using the repository browser.