Changes between Version 5 and Version 6 of LogicalAndPhysicalDesign


Ignore:
Timestamp:
12/19/25 10:41:06 (10 days ago)
Author:
231035
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • LogicalAndPhysicalDesign

    v5 v6  
    5555DROP TABLE IF EXISTS users CASCADE;
    5656
     57CREATE TABLE users (
     58  user_id     BIGSERIAL PRIMARY KEY,
     59  username    VARCHAR(30)  NOT NULL,
     60  email       VARCHAR(254) NOT NULL,
     61  name        VARCHAR(60)  NOT NULL,
     62  surname     VARCHAR(60)  NOT NULL,
     63  created_at  TIMESTAMP    NOT NULL DEFAULT NOW(),
     64  CONSTRAINT uq_users_username UNIQUE (username),
     65  CONSTRAINT uq_users_email    UNIQUE (email)
     66);
     67
     68CREATE TABLE admins (
     69  user_id BIGINT PRIMARY KEY REFERENCES users(user_id) ON DELETE CASCADE
     70);
     71
     72CREATE TABLE clients (
     73  user_id BIGINT PRIMARY KEY REFERENCES users(user_id) ON DELETE CASCADE
     74);
     75
     76CREATE TABLE owners (
     77  user_id BIGINT PRIMARY KEY REFERENCES clients(user_id) ON DELETE CASCADE
     78);
     79
     80CREATE TABLE notifications (
     81  notification_id BIGSERIAL PRIMARY KEY,
     82  user_id         BIGINT       NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,
     83  type            VARCHAR(40)  NOT NULL,
     84  message         TEXT         NOT NULL,
     85  is_read         BOOLEAN      NOT NULL DEFAULT FALSE,
     86  created_at      TIMESTAMP    NOT NULL DEFAULT NOW()
     87);
     88
     89CREATE TABLE vet_clinics (
     90  clinic_id   BIGSERIAL PRIMARY KEY,
     91  name        VARCHAR(120) NOT NULL,
     92  email       VARCHAR(254),
     93  phone       VARCHAR(40),
     94  city        VARCHAR(80)  NOT NULL,
     95  address     VARCHAR(200) NOT NULL,
     96  approved_by BIGINT REFERENCES admins(user_id) ON DELETE SET NULL
     97);
     98
     99CREATE TABLE animals (
     100  animal_id     BIGSERIAL PRIMARY KEY,
     101  owner_id      BIGINT      NOT NULL REFERENCES owners(user_id) ON DELETE CASCADE,
     102  name          VARCHAR(80) NOT NULL,
     103  sex           VARCHAR(10) NOT NULL CHECK (sex IN ('MALE','FEMALE','UNKNOWN')),
     104  date_of_birth DATE,
     105  photo_url     TEXT,
     106  type          VARCHAR(40),
     107  species       VARCHAR(60),
     108  breed         VARCHAR(60),
     109  located_name  VARCHAR(120)
     110);
     111
     112CREATE TABLE listings (
     113  listing_id   BIGSERIAL PRIMARY KEY,
     114  owner_id     BIGINT      NOT NULL REFERENCES owners(user_id) ON DELETE CASCADE,
     115  animal_id    BIGINT      NOT NULL REFERENCES animals(animal_id) ON DELETE CASCADE,
     116  status       VARCHAR(20) NOT NULL CHECK (status IN ('DRAFT','ACTIVE','PAUSED','SOLD','ARCHIVED')),
     117  price        NUMERIC(12,2) NOT NULL CHECK (price >= 0),
     118  description  TEXT,
     119  created_at   TIMESTAMP   NOT NULL DEFAULT NOW(),
     120  CONSTRAINT fk_listing_owner_matches_animal_owner
     121    FOREIGN KEY (owner_id) REFERENCES owners(user_id) ON DELETE CASCADE
     122);
     123
     124CREATE TABLE appointments (
     125  appointment_id       BIGSERIAL PRIMARY KEY,
     126  clinic_id            BIGINT      NOT NULL REFERENCES vet_clinics(clinic_id) ON DELETE CASCADE,
     127  animal_id            BIGINT      NOT NULL REFERENCES animals(animal_id) ON DELETE CASCADE,
     128  responsible_owner_id BIGINT      NOT NULL REFERENCES owners(user_id) ON DELETE CASCADE,
     129  status               VARCHAR(20) NOT NULL CHECK (status IN ('REQUESTED','CONFIRMED','CANCELLED','DONE','NO_SHOW')),
     130  date_time            TIMESTAMP   NOT NULL,
     131  notes                TEXT
     132);
     133
     134CREATE TABLE reviews (
     135  review_id    BIGSERIAL PRIMARY KEY,
     136  reviewer_id  BIGINT NOT NULL REFERENCES clients(user_id) ON DELETE CASCADE,
     137  rating       INT    NOT NULL CHECK (rating BETWEEN 1 AND 5),
     138  comment      TEXT,
     139  created_at   TIMESTAMP NOT NULL DEFAULT NOW()
     140);
     141
     142CREATE TABLE user_reviews (
     143  review_id      BIGINT PRIMARY KEY REFERENCES reviews(review_id) ON DELETE CASCADE,
     144  target_user_id BIGINT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE
     145);
     146
     147CREATE TABLE clinic_reviews (
     148  review_id        BIGINT PRIMARY KEY REFERENCES reviews(review_id) ON DELETE CASCADE,
     149  target_clinic_id BIGINT NOT NULL REFERENCES vet_clinics(clinic_id) ON DELETE CASCADE
     150);
     151
     152CREATE TABLE health_records (
     153  healthrecord_id BIGSERIAL PRIMARY KEY,
     154  animal_id       BIGINT NOT NULL REFERENCES animals(animal_id) ON DELETE CASCADE,
     155  appointment_id  BIGINT NOT NULL REFERENCES appointments(appointment_id) ON DELETE CASCADE,
     156  type            VARCHAR(40) NOT NULL,
     157  description     TEXT,
     158  date            DATE NOT NULL
     159);
    57160}}}
    58161== DML