LogicalAndPhysicalDesign: schema_creation.sql

File schema_creation.sql, 6.3 KB (added by 231035, 17 hours ago)
Line 
1DROP TABLE IF EXISTS health_records CASCADE;
2DROP TABLE IF EXISTS clinic_reviews CASCADE;
3DROP TABLE IF EXISTS user_reviews CASCADE;
4DROP TABLE IF EXISTS reviews CASCADE;
5DROP TABLE IF EXISTS appointments CASCADE;
6DROP TABLE IF EXISTS listings CASCADE;
7DROP TABLE IF EXISTS animals CASCADE;
8DROP TABLE IF EXISTS vet_clinics CASCADE;
9DROP TABLE IF EXISTS notifications CASCADE;
10DROP TABLE IF EXISTS owners CASCADE;
11DROP TABLE IF EXISTS clients CASCADE;
12DROP TABLE IF EXISTS admins CASCADE;
13DROP TABLE IF EXISTS users CASCADE;
14
15CREATE TABLE users (
16 user_id BIGSERIAL,
17 username VARCHAR(30) NOT NULL,
18 email VARCHAR(254) NOT NULL,
19 name VARCHAR(60) NOT NULL,
20 surname VARCHAR(60) NOT NULL,
21 created_at TIMESTAMP NOT NULL DEFAULT NOW(),
22 CONSTRAINT users_PK PRIMARY KEY (user_id),
23 CONSTRAINT users_username_UQ UNIQUE (username),
24 CONSTRAINT users_email_UQ UNIQUE (email)
25);
26
27CREATE TABLE admins (
28 user_id BIGINT,
29 CONSTRAINT admins_PK PRIMARY KEY (user_id),
30 CONSTRAINT admins_user_FK FOREIGN KEY (user_id)
31 REFERENCES users(user_id)
32 ON DELETE RESTRICT
33);
34
35CREATE TABLE clients (
36 user_id BIGINT,
37 CONSTRAINT clients_PK PRIMARY KEY (user_id),
38 CONSTRAINT clients_user_FK FOREIGN KEY (user_id)
39 REFERENCES users(user_id)
40 ON DELETE RESTRICT
41);
42
43CREATE TABLE owners (
44 user_id BIGINT,
45 CONSTRAINT owners_PK PRIMARY KEY (user_id),
46 CONSTRAINT owners_client_FK FOREIGN KEY (user_id)
47 REFERENCES clients(user_id)
48 ON DELETE RESTRICT
49);
50
51CREATE TABLE notifications (
52 notification_id BIGSERIAL,
53 user_id BIGINT NOT NULL,
54 type VARCHAR(40) NOT NULL,
55 message TEXT NOT NULL,
56 is_read BOOLEAN NOT NULL DEFAULT FALSE,
57 created_at TIMESTAMP NOT NULL DEFAULT NOW(),
58 CONSTRAINT notifications_PK PRIMARY KEY (notification_id),
59 CONSTRAINT notifications_user_FK FOREIGN KEY (user_id)
60 REFERENCES users(user_id)
61 ON DELETE RESTRICT
62);
63
64CREATE TABLE vet_clinics (
65 clinic_id BIGSERIAL,
66 name VARCHAR(120) NOT NULL,
67 email VARCHAR(254),
68 phone VARCHAR(40),
69 city VARCHAR(80) NOT NULL,
70 address VARCHAR(200) NOT NULL,
71 approved_by BIGINT,
72 CONSTRAINT vet_clinics_PK PRIMARY KEY (clinic_id),
73 CONSTRAINT vet_clinics_admin_FK FOREIGN KEY (approved_by)
74 REFERENCES admins(user_id)
75 ON DELETE SET NULL
76);
77
78CREATE TABLE animals (
79 animal_id BIGSERIAL,
80 owner_id BIGINT NOT NULL,
81 name VARCHAR(80) NOT NULL,
82 sex VARCHAR(10) NOT NULL,
83 date_of_birth DATE,
84 photo_url TEXT,
85 type VARCHAR(40),
86 species VARCHAR(60),
87 breed VARCHAR(60),
88 located_name VARCHAR(120),
89 CONSTRAINT animals_PK PRIMARY KEY (animal_id),
90 CONSTRAINT animals_owner_FK FOREIGN KEY (owner_id)
91 REFERENCES owners(user_id)
92 ON DELETE RESTRICT,
93 CONSTRAINT animals_sex_CHK CHECK (sex IN ('MALE','FEMALE','UNKNOWN'))
94);
95
96CREATE TABLE listings (
97 listing_id BIGSERIAL,
98 owner_id BIGINT NOT NULL,
99 animal_id BIGINT NOT NULL,
100 status VARCHAR(20) NOT NULL,
101 price NUMERIC(12,2) NOT NULL,
102 description TEXT,
103 created_at TIMESTAMP NOT NULL DEFAULT NOW(),
104
105 CONSTRAINT listings_PK PRIMARY KEY (listing_id),
106 CONSTRAINT listings_owner_FK FOREIGN KEY (owner_id)
107 REFERENCES owners(user_id)
108 ON DELETE RESTRICT,
109 CONSTRAINT listings_animal_FK FOREIGN KEY (animal_id)
110 REFERENCES animals(animal_id)
111 ON DELETE RESTRICT,
112 CONSTRAINT listings_status_CHK CHECK (status IN ('DRAFT','ACTIVE','SOLD','ARCHIVED')),
113 CONSTRAINT listings_price_CHK CHECK (price >= 0)
114);
115
116CREATE TABLE appointments (
117 appointment_id BIGSERIAL,
118 clinic_id BIGINT NOT NULL,
119 animal_id BIGINT NOT NULL,
120 responsible_owner_id BIGINT NOT NULL,
121 status VARCHAR(20) NOT NULL,
122 date_time TIMESTAMP NOT NULL,
123 notes TEXT,
124
125 CONSTRAINT appointments_PK PRIMARY KEY (appointment_id),
126 CONSTRAINT appointments_clinic_FK FOREIGN KEY (clinic_id)
127 REFERENCES vet_clinics(clinic_id)
128 ON DELETE RESTRICT,
129 CONSTRAINT appointments_animal_FK FOREIGN KEY (animal_id)
130 REFERENCES animals(animal_id)
131 ON DELETE RESTRICT,
132 CONSTRAINT appointments_owner_FK FOREIGN KEY (responsible_owner_id)
133 REFERENCES owners(user_id)
134 ON DELETE RESTRICT,
135 CONSTRAINT appointments_status_CHK CHECK (status IN ('CONFIRMED','CANCELLED','DONE','NO_SHOW'))
136);
137
138CREATE TABLE reviews (
139 review_id BIGSERIAL,
140 reviewer_id BIGINT NOT NULL,
141 rating INT NOT NULL,
142 comment TEXT,
143 created_at TIMESTAMP NOT NULL DEFAULT NOW(),
144 CONSTRAINT reviews_PK PRIMARY KEY (review_id),
145 CONSTRAINT reviews_reviewer_FK FOREIGN KEY (reviewer_id)
146 REFERENCES clients(user_id)
147 ON DELETE RESTRICT,
148 CONSTRAINT reviews_rating_CHK CHECK (rating BETWEEN 1 AND 5)
149);
150
151CREATE TABLE user_reviews (
152 review_id BIGINT,
153 target_user_id BIGINT NOT NULL,
154
155 CONSTRAINT user_reviews_PK PRIMARY KEY (review_id),
156 CONSTRAINT user_reviews_review_FK FOREIGN KEY (review_id)
157 REFERENCES reviews(review_id)
158 ON DELETE RESTRICT,
159 CONSTRAINT user_reviews_target_FK FOREIGN KEY (target_user_id)
160 REFERENCES users(user_id)
161 ON DELETE RESTRICT
162);
163
164CREATE TABLE clinic_reviews (
165 review_id BIGINT,
166 target_clinic_id BIGINT NOT NULL,
167
168 CONSTRAINT clinic_reviews_PK PRIMARY KEY (review_id),
169 CONSTRAINT clinic_reviews_review_FK FOREIGN KEY (review_id)
170 REFERENCES reviews(review_id)
171 ON DELETE RESTRICT,
172 CONSTRAINT clinic_reviews_target_FK FOREIGN KEY (target_clinic_id)
173 REFERENCES vet_clinics(clinic_id)
174 ON DELETE RESTRICT
175);
176
177CREATE TABLE health_records (
178 healthrecord_id BIGSERIAL,
179 animal_id BIGINT NOT NULL,
180 appointment_id BIGINT NOT NULL,
181 type VARCHAR(40) NOT NULL,
182 description TEXT,
183 date DATE NOT NULL,
184
185 CONSTRAINT health_records_PK PRIMARY KEY (healthrecord_id),
186 CONSTRAINT health_records_animal_FK FOREIGN KEY (animal_id)
187 REFERENCES animals(animal_id)
188 ON DELETE RESTRICT,
189 CONSTRAINT health_records_appointment_FK FOREIGN KEY (appointment_id)
190 REFERENCES appointments(appointment_id)
191 ON DELETE RESTRICT
192);
193
194
195