| 1 | DROP TABLE IF EXISTS health_records CASCADE;
|
|---|
| 2 | DROP TABLE IF EXISTS clinic_reviews CASCADE;
|
|---|
| 3 | DROP TABLE IF EXISTS user_reviews CASCADE;
|
|---|
| 4 | DROP TABLE IF EXISTS reviews CASCADE;
|
|---|
| 5 | DROP TABLE IF EXISTS appointments CASCADE;
|
|---|
| 6 | DROP TABLE IF EXISTS listings CASCADE;
|
|---|
| 7 | DROP TABLE IF EXISTS animals CASCADE;
|
|---|
| 8 | DROP TABLE IF EXISTS vet_clinics CASCADE;
|
|---|
| 9 | DROP TABLE IF EXISTS notifications CASCADE;
|
|---|
| 10 | DROP TABLE IF EXISTS owners CASCADE;
|
|---|
| 11 | DROP TABLE IF EXISTS clients CASCADE;
|
|---|
| 12 | DROP TABLE IF EXISTS admins CASCADE;
|
|---|
| 13 | DROP TABLE IF EXISTS users CASCADE;
|
|---|
| 14 |
|
|---|
| 15 | CREATE 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 |
|
|---|
| 27 | CREATE 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 |
|
|---|
| 35 | CREATE 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 |
|
|---|
| 43 | CREATE 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 |
|
|---|
| 51 | CREATE 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 |
|
|---|
| 64 | CREATE 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 |
|
|---|
| 78 | CREATE 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 |
|
|---|
| 96 | CREATE 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 |
|
|---|
| 116 | CREATE 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 |
|
|---|
| 138 | CREATE 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 |
|
|---|
| 151 | CREATE 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 |
|
|---|
| 164 | CREATE 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 |
|
|---|
| 177 | CREATE 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 |
|
|---|