Changes between Initial Version and Version 1 of ERModel


Ignore:
Timestamp:
04/20/26 17:49:00 (12 days ago)
Author:
185022
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ERModel

    v1 v1  
     1== ЕР Дијаграм
     2[[Image(kbnteam_ERDiagram.jpg)]]
     3== Податочни побарувања
     4=== Ентитети
     5
     6
     7
     8**ADMIN**
     9* user_id INTEGER PRIMARY KEY DEFAULT 1,
     10* CONSTRAINT fk_admin_user
     11        FOREIGN KEY (user_id)
     12        REFERENCES api_user(user_id)
     13        ON UPDATE CASCADE
     14        ON DELETE SET DEFAULT
     15
     16**ALERGEN**
     17* alergen_id SERIAL PRIMARY KEY,
     18* alergen_name VARCHAR(255) NOT NULL UNIQUE,
     19* alergen_description VARCHAR(255)
     20
     21**API_USER**
     22* user_id SERIAL PRIMARY KEY,
     23* user_first_name VARCHAR(255) NOT NULL,
     24* user_last_name VARCHAR(255) NOT NULL,
     25* user_email VARCHAR(255) NOT NULL UNIQUE,
     26* user_phone_no VARCHAR(20) UNIQUE,
     27* user_password_hash TEXT NOT NULL
     28
     29**CATEGORY**
     30* cat_id SERIAL PRIMARY KEY,
     31* cat_name VARCHAR(255) NOT NULL UNIQUE,
     32* cat_description VARCHAR(255)
     33
     34**COMPANY**
     35* company_id SERIAL PRIMARY KEY,
     36* company_name VARCHAR(255) NOT NULL UNIQUE,
     37* company_address VARCHAR(255) NOT NULL
     38
     39**COMPANY_ORDER**
     40* comp_order_id SERIAL PRIMARY KEY,
     41* company_id INTEGER NOT NULL,
     42* delivery_id INTEGER UNIQUE,
     43* CONSTRAINT fk_company_order_company
     44    FOREIGN KEY (company_id)
     45    REFERENCES company(company_id)
     46    ON UPDATE CASCADE
     47    ON DELETE RESTRICT,
     48* CONSTRAINT fk_company_order_delivery
     49    FOREIGN KEY (delivery_id)
     50    REFERENCES delivery(delivery_id)
     51    ON UPDATE CASCADE
     52    ON DELETE SET NULL
     53
     54**CONTRACT**
     55* contract_id SERIAL PRIMARY KEY,
     56* company_id INTEGER NOT NULL,
     57* rest_id INTEGER NOT NULL,
     58* contract_status_id INTEGER NOT NULL,
     59* contract_start_date DATE NOT NULL,
     60* contract_end_date DATE NOT NULL,
     61* CONSTRAINT fk_contract_company
     62    FOREIGN KEY (company_id)
     63    REFERENCES company(company_id)
     64    ON UPDATE CASCADE
     65    ON DELETE RESTRICT,
     66* CONSTRAINT fk_contract_restaurant
     67    FOREIGN KEY (rest_id)
     68    REFERENCES restaurant(rest_id)
     69    ON UPDATE CASCADE
     70    ON DELETE RESTRICT,
     71* CONSTRAINT fk_contract_status
     72    FOREIGN KEY (contract_status_id)
     73    REFERENCES contract_status(contract_status_id)
     74    ON UPDATE CASCADE
     75    ON DELETE RESTRICT,
     76* CONSTRAINT chk_contract_dates CHECK (contract_end_date >= contract_start_date)
     77
     78**CONTRACT_STATUS**
     79* contract_status_id SERIAL PRIMARY KEY,
     80* contract_status_name VARCHAR(255) NOT NULL UNIQUE
     81
     82**CUSTOMER**
     83*  user_id INTEGER PRIMARY KEY DEFAULT 1,
     84* CONSTRAINT fk_customer_user
     85    FOREIGN KEY (user_id)
     86    REFERENCES api_user(user_id)
     87    ON UPDATE CASCADE
     88    ON DELETE SET DEFAULT
     89
     90**CUSTOMER_ORDER**
     91* order_id SERIAL PRIMARY KEY,
     92* comp_order_id INTEGER NOT NULL,
     93* company_employee_user_id INTEGER NOT NULL DEFAULT 1,
     94* order_datetime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
     95* o_status_id INTEGER NOT NULL,
     96* order_total NUMERIC(10,2) NOT NULL,
     97* CONSTRAINT fk_customer_order_company_order
     98    FOREIGN KEY (comp_order_id)
     99    REFERENCES company_order(comp_order_id)
     100    ON UPDATE CASCADE
     101    ON DELETE RESTRICT,
     102* CONSTRAINT fk_customer_order_employee
     103    FOREIGN KEY (company_employee_user_id)
     104    REFERENCES company_employee(user_id)
     105    ON UPDATE CASCADE
     106    ON DELETE SET DEFAULT,
     107* CONSTRAINT fk_customer_order_status
     108    FOREIGN KEY (o_status_id)
     109    REFERENCES order_status(o_status_id)
     110    ON UPDATE CASCADE
     111    ON DELETE RESTRICT,
     112* CONSTRAINT chk_order_total CHECK (order_total >= 0)
     113   
     114**DELIVERY**
     115* delivery_id SERIAL PRIMARY KEY,
     116* delivery_date DATE NOT NULL DEFAULT CURRENT_DATE,
     117* delivery_notes VARCHAR(255),
     118* d_status_id INTEGER NOT NULL,
     119* driver_user_id INTEGER NOT NULL DEFAULT 1,
     120* CONSTRAINT fk_delivery_status
     121    FOREIGN KEY (d_status_id)
     122    REFERENCES delivery_status(d_status_id)
     123    ON UPDATE CASCADE
     124    ON DELETE RESTRICT,
     125* CONSTRAINT fk_delivery_driver
     126    FOREIGN KEY (driver_user_id)
     127    REFERENCES driver(user_id)
     128    ON UPDATE CASCADE
     129    ON DELETE SET DEFAULT
     130
     131**DELIVERY_REVIEW**
     132* delivery_review_id SERIAL PRIMARY KEY,
     133* delivery_id INTEGER NOT NULL UNIQUE,
     134* del_review_courier_rating INTEGER NOT NULL,
     135* del_review_speed_rating INTEGER NOT NULL,
     136* CONSTRAINT fk_delivery_review_delivery
     137        FOREIGN KEY (delivery_id)
     138        REFERENCES delivery(delivery_id)
     139        ON UPDATE CASCADE
     140        ON DELETE CASCADE,
     141* CONSTRAINT chk_delivery_review_courier_rating CHECK (del_review_courier_rating BETWEEN 1 AND 5),
     142* CONSTRAINT chk_delivery_review_speed_rating CHECK (del_review_speed_rating BETWEEN 1 AND 5)
     143
     144**DELIVERY_STATUS**
     145* d_status_id SERIAL PRIMARY KEY,
     146* d_status_name VARCHAR(255) NOT NULL UNIQUE
     147
     148**DRINK**
     149* drink_id SERIAL PRIMARY KEY,
     150* rest_id INTEGER NOT NULL,
     151* drink_name VARCHAR(255) NOT NULL,
     152* drink_milliliters INTEGER NOT NULL,
     153* drink_price NUMERIC(10,2) NOT NULL,
     154* CONSTRAINT fk_drink_restaurant
     155    FOREIGN KEY (rest_id)
     156    REFERENCES restaurant(rest_id)
     157    ON UPDATE CASCADE
     158    ON DELETE RESTRICT,
     159* CONSTRAINT chk_drink_milliliters CHECK (drink_milliliters > 0),
     160* CONSTRAINT chk_drink_price CHECK (drink_price >= 0),
     161* CONSTRAINT uq_drink_restaurant_name UNIQUE (rest_id, drink_name)
     162
     163**DRIVER**
     164* user_id INTEGER PRIMARY KEY DEFAULT 1,
     165* CONSTRAINT fk_driver_user
     166    FOREIGN KEY (user_id)
     167    REFERENCES api_user(user_id)
     168    ON UPDATE CASCADE
     169    ON DELETE SET DEFAULT
     170
     171**EMPLOYEE_LOYALTY**
     172* emp_loyalty_id SERIAL PRIMARY KEY,
     173* user_id INTEGER NOT NULL UNIQUE,
     174* emp_loyalty_curr_points INTEGER NOT NULL DEFAULT 0,
     175* emp_loyalty_joined_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
     176* emp_loyalty_status_id INTEGER NOT NULL,
     177* tier_id INTEGER NOT NULL,
     178* CONSTRAINT fk_employee_loyalty_user
     179    FOREIGN KEY (user_id)
     180    REFERENCES company_employee(user_id)
     181    ON UPDATE CASCADE
     182    ON DELETE CASCADE,
     183* CONSTRAINT fk_employee_loyalty_status
     184    FOREIGN KEY (emp_loyalty_status_id)
     185    REFERENCES employee_loyalty_status(emp_loyalty_status_id)
     186    ON UPDATE CASCADE
     187    ON DELETE RESTRICT,
     188* CONSTRAINT fk_employee_loyalty_tier
     189    FOREIGN KEY (tier_id)
     190    REFERENCES loyalty_tier(tier_id)
     191    ON UPDATE CASCADE
     192    ON DELETE RESTRICT,
     193* CONSTRAINT chk_employee_loyalty_points CHECK (emp_loyalty_curr_points >= 0)
     194
     195**EMPLOYEE_LOYALTY_STATUS**
     196* emp_loyalty_status_id SERIAL PRIMARY KEY,
     197* emp_loyalty_status_name VARCHAR(255) NOT NULL UNIQUE
     198
     199**INGREDIENT**
     200* ingr_id SERIAL PRIMARY KEY,
     201* ingr_name VARCHAR(255) NOT NULL UNIQUE
     202
     203**LOYALTY_TIER**
     204* tier_id SERIAL PRIMARY KEY,
     205* tier_name VARCHAR(255) NOT NULL UNIQUE,
     206* tier_minimum_points INTEGER NOT NULL,
     207* tier_maximum_points INTEGER NOT NULL,
     208* tier_discount_percentage NUMERIC(5,2) NOT NULL,
     209* tier_free_delivery_eligibility BOOLEAN NOT NULL DEFAULT FALSE,
     210* tier_priority_support BOOLEAN NOT NULL DEFAULT FALSE,
     211* tier_created_at DATE NOT NULL DEFAULT CURRENT_DATE,
     212* tier_update_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
     213* CONSTRAINT chk_tier_points_nonnegative CHECK (tier_minimum_points >= 0 AND tier_maximum_points >= 0),
     214* CONSTRAINT chk_tier_points_range CHECK (tier_maximum_points >= tier_minimum_points),
     215* CONSTRAINT chk_tier_discount CHECK (tier_discount_percentage >= 0 AND tier_discount_percentage <= 100)
     216
     217**LUNCH_TIME**
     218* lunch_time_id SERIAL PRIMARY KEY,
     219* comp_order_id INTEGER,
     220* contract_id INTEGER NOT NULL,
     221* lunch_start TIMESTAMP NOT NULL,
     222* lunch_end TIMESTAMP NOT NULL,
     223* lunch_preorder_offset INTEGER NOT NULL DEFAULT 0,
     224* lunch_weekday VARCHAR(15) NOT NULL,
     225* CONSTRAINT fk_lunch_time_company_order
     226    FOREIGN KEY (comp_order_id)
     227    REFERENCES company_order(comp_order_id)
     228    ON UPDATE CASCADE
     229    ON DELETE SET NULL,
     230* CONSTRAINT fk_lunch_time_contract
     231    FOREIGN KEY (contract_id)
     232    REFERENCES contract(contract_id)
     233    ON UPDATE CASCADE
     234    ON DELETE CASCADE,
     235* CONSTRAINT chk_lunch_time_offset CHECK (lunch_preorder_offset >= 0),
     236* CONSTRAINT chk_lunch_weekday CHECK (
     237    lunch_weekday IN ('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday')
     238),
     239* CONSTRAINT chk_lunch_interval CHECK (lunch_end > lunch_start)
     240
     241**MEAL**
     242* meal_id SERIAL PRIMARY KEY,
     243* cat_id INTEGER NOT NULL,
     244* rest_id INTEGER NOT NULL,
     245* meal_name VARCHAR(255) NOT NULL,
     246* meal_description VARCHAR(255),
     247* meal_price NUMERIC(10,2) NOT NULL,
     248* meal_weight INTEGER NOT NULL,
     249* CONSTRAINT fk_meal_category
     250    FOREIGN KEY (cat_id)
     251    REFERENCES category(cat_id)
     252    ON UPDATE CASCADE
     253    ON DELETE RESTRICT,
     254* CONSTRAINT fk_meal_restaurant
     255    FOREIGN KEY (rest_id)
     256    REFERENCES restaurant(rest_id)
     257    ON UPDATE CASCADE
     258    ON DELETE RESTRICT,
     259* CONSTRAINT chk_meal_price CHECK (meal_price >= 0),
     260* CONSTRAINT chk_meal_weight CHECK (meal_weight > 0),
     261* CONSTRAINT uq_meal_restaurant_name UNIQUE (rest_id, meal_name)
     262
     263**ORDER_REVIEW**
     264* order_review_id SERIAL PRIMARY KEY,
     265* order_id INTEGER NOT NULL UNIQUE,
     266* order_review_food_rating INTEGER NOT NULL,
     267* order_review_res_rating INTEGER NOT NULL,
     268* CONSTRAINT fk_order_review_order
     269    FOREIGN KEY (order_id)
     270    REFERENCES customer_order(order_id)
     271    ON UPDATE CASCADE
     272    ON DELETE CASCADE,
     273* CONSTRAINT chk_order_review_food_rating CHECK (order_review_food_rating BETWEEN 1 AND 5),
     274* CONSTRAINT chk_order_review_res_rating CHECK (order_review_res_rating BETWEEN 1 AND 5)
     275
     276**ORDER_STATUS**
     277* o_status_id SERIAL PRIMARY KEY,
     278* o_status_name VARCHAR(255) NOT NULL UNIQUE
     279
     280**RESTAURANT**
     281* rest_id SERIAL PRIMARY KEY,
     282* rest_name VARCHAR(255) NOT NULL,
     283* rest_email VARCHAR(255) NOT NULL UNIQUE,
     284* rest_location VARCHAR(255) NOT NULL,
     285* rest_phone VARCHAR(20) NOT NULL UNIQUE,
     286* rest_website VARCHAR(255) UNIQUE
     287
     288**REVIEW**
     289* review_id SERIAL PRIMARY KEY,
     290* review_comment VARCHAR(255),
     291* review_created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
     292* review_rating INTEGER NOT NULL,
     293* CONSTRAINT chk_review_rating CHECK (review_rating BETWEEN 1 AND 5)