Changes between Version 1 and Version 2 of ERModel
- Timestamp:
- 04/21/26 22:14:38 (11 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ERModel
v1 v2 7 7 8 8 **ADMIN** 9 * user_id INTEGER PRIMARY KEY DEFAULT 1,9 * user_id int, примарен клуч DEFAULT 1 10 10 * CONSTRAINT fk_admin_user 11 11 FOREIGN KEY (user_id) … … 14 14 ON DELETE SET DEFAULT 15 15 16 **AL ERGEN**17 * al ergen_id SERIAL PRIMARY KEY,18 * al ergen_name VARCHAR(255) NOT NULL UNIQUE,19 * al ergen_description VARCHAR(255)16 **ALLERGEN** 17 * allergen_id serial, примарен клуч 18 * allergen_name string, задолжителен и уникатен 19 * allergen_description string 20 20 21 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 NULL22 * user_id serial, примарен клуч 23 * user_first_name string, задолжителен 24 * user_last_name string, задолжителен 25 * user_email string, задолжителен и уникатен 26 * user_phone_no string, уникатен 27 * user_password_hash TEXT, задолжителен 28 28 29 29 **CATEGORY** 30 * cat_id SERIAL PRIMARY KEY,31 * cat_name VARCHAR(255) NOT NULL UNIQUE,32 * cat_description VARCHAR(255)30 * cat_id serial, примарен клуч 31 * cat_name string, задолжителен и уникатен 32 * cat_description string 33 33 34 34 **COMPANY** 35 * company_id SERIAL PRIMARY KEY,36 * company_name VARCHAR(255) NOT NULL UNIQUE,37 * company_address VARCHAR(255) NOT NULL35 * company_id serial, примарен клуч 36 * company_name string, задолжителен и уникатен 37 * company_address string, задолжителен 38 38 39 39 **COMPANY_ORDER** 40 * comp_order_id SERIAL PRIMARY KEY,41 * company_id INTEGER NOT NULL,42 * delivery_id INTEGER UNIQUE,40 * comp_order_id serial, примарен клуч 41 * company_id int, задолжителен 42 * delivery_id int, уникатен 43 43 * CONSTRAINT fk_company_order_company 44 44 FOREIGN KEY (company_id) 45 45 REFERENCES company(company_id) 46 46 ON UPDATE CASCADE 47 ON DELETE RESTRICT ,47 ON DELETE RESTRICT 48 48 * CONSTRAINT fk_company_order_delivery 49 49 FOREIGN KEY (delivery_id) … … 53 53 54 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,55 * contract_id serial, примарен клуч 56 * company_id int, задолжителен 57 * rest_id int, задолжителен 58 * contract_status_id int, задолжителен 59 * contract_start_date date, задолжителен 60 * contract_end_date date, задолжителен 61 61 * CONSTRAINT fk_contract_company 62 62 FOREIGN KEY (company_id) 63 63 REFERENCES company(company_id) 64 64 ON UPDATE CASCADE 65 ON DELETE RESTRICT ,65 ON DELETE RESTRICT 66 66 * CONSTRAINT fk_contract_restaurant 67 67 FOREIGN KEY (rest_id) 68 68 REFERENCES restaurant(rest_id) 69 69 ON UPDATE CASCADE 70 ON DELETE RESTRICT ,70 ON DELETE RESTRICT 71 71 * CONSTRAINT fk_contract_status 72 72 FOREIGN KEY (contract_status_id) 73 73 REFERENCES contract_status(contract_status_id) 74 74 ON UPDATE CASCADE 75 ON DELETE RESTRICT ,75 ON DELETE RESTRICT 76 76 * CONSTRAINT chk_contract_dates CHECK (contract_end_date >= contract_start_date) 77 77 78 78 **CONTRACT_STATUS** 79 * contract_status_id SERIAL PRIMARY KEY,80 * contract_status_name VARCHAR(255) NOT NULL UNIQUE79 * contract_status_id serial, примарен клуч 80 * contract_status_name string, задолжителен и уникатен 81 81 82 82 **CUSTOMER** 83 * user_id INTEGER PRIMARY KEY DEFAULT 1,83 * user_id int PRIMARY KEY DEFAULT 1 84 84 * CONSTRAINT fk_customer_user 85 85 FOREIGN KEY (user_id) … … 89 89 90 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,91 * order_id serial, примарен клуч 92 * comp_order_id int, задолжителен 93 * company_employee_user_id int, задолжителен DEFAULT 1 94 * order_datetime timestamp, задолжителен DEFAULT CURRENT_TIMESTAMP 95 * o_status_id int, задолжителен 96 * order_total NUMERIC(10,2), задолжителен 97 97 * CONSTRAINT fk_customer_order_company_order 98 98 FOREIGN KEY (comp_order_id) 99 99 REFERENCES company_order(comp_order_id) 100 100 ON UPDATE CASCADE 101 ON DELETE RESTRICT ,101 ON DELETE RESTRICT 102 102 * CONSTRAINT fk_customer_order_employee 103 103 FOREIGN KEY (company_employee_user_id) 104 104 REFERENCES company_employee(user_id) 105 105 ON UPDATE CASCADE 106 ON DELETE SET DEFAULT ,106 ON DELETE SET DEFAULT 107 107 * CONSTRAINT fk_customer_order_status 108 108 FOREIGN KEY (o_status_id) 109 109 REFERENCES order_status(o_status_id) 110 110 ON UPDATE CASCADE 111 ON DELETE RESTRICT ,111 ON DELETE RESTRICT 112 112 * CONSTRAINT chk_order_total CHECK (order_total >= 0) 113 113 114 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,115 * delivery_id serial, примарен клуч 116 * delivery_date DATE, задолжителен DEFAULT CURRENT_DATE 117 * delivery_notes string 118 * d_status_id int, задолжителен 119 * driver_user_id int, задолжителен DEFAULT 1 120 120 * CONSTRAINT fk_delivery_status 121 121 FOREIGN KEY (d_status_id) 122 122 REFERENCES delivery_status(d_status_id) 123 123 ON UPDATE CASCADE 124 ON DELETE RESTRICT ,124 ON DELETE RESTRICT 125 125 * CONSTRAINT fk_delivery_driver 126 126 FOREIGN KEY (driver_user_id) … … 130 130 131 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,132 * delivery_review_id serial, примарен клуч 133 * delivery_id int, задолжителен и уникатен 134 * del_review_courier_rating int, задолжителен 135 * del_review_speed_rating int, задолжителен 136 136 * CONSTRAINT fk_delivery_review_delivery 137 137 FOREIGN KEY (delivery_id) 138 138 REFERENCES delivery(delivery_id) 139 139 ON UPDATE CASCADE 140 ON DELETE CASCADE ,141 * CONSTRAINT chk_delivery_review_courier_rating CHECK (del_review_courier_rating BETWEEN 1 AND 5) ,140 ON DELETE CASCADE 141 * CONSTRAINT chk_delivery_review_courier_rating CHECK (del_review_courier_rating BETWEEN 1 AND 5) 142 142 * CONSTRAINT chk_delivery_review_speed_rating CHECK (del_review_speed_rating BETWEEN 1 AND 5) 143 143 144 144 **DELIVERY_STATUS** 145 * d_status_id SERIAL PRIMARY KEY,146 * d_status_name VARCHAR(255) NOT NULL UNIQUE145 * d_status_id serial, примарен клуч 146 * d_status_name string, задолжителен и уникатен 147 147 148 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,149 * drink_id serial, примарен клуч 150 * rest_id int, задолжителен 151 * drink_name string, задолжителен 152 * drink_milliliters int, задолжителен 153 * drink_price NUMERIC(10,2), задолжителен 154 154 * CONSTRAINT fk_drink_restaurant 155 155 FOREIGN KEY (rest_id) 156 156 REFERENCES restaurant(rest_id) 157 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) ,158 ON DELETE RESTRICT 159 * CONSTRAINT chk_drink_milliliters CHECK (drink_milliliters > 0) 160 * CONSTRAINT chk_drink_price CHECK (drink_price >= 0) 161 161 * CONSTRAINT uq_drink_restaurant_name UNIQUE (rest_id, drink_name) 162 162 163 163 **DRIVER** 164 * user_id INTEGER PRIMARY KEY DEFAULT 1,164 * user_id int PRIMARY KEY DEFAULT 1 165 165 * CONSTRAINT fk_driver_user 166 166 FOREIGN KEY (user_id) … … 170 170 171 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,172 * emp_loyalty_id serial, примарен клуч 173 * user_id int, задолжителен и уникатен 174 * emp_loyalty_curr_points int, задолжителен DEFAULT 0 175 * emp_loyalty_joined_at timestamp, задолжителен DEFAULT CURRENT_TIMESTAMP 176 * emp_loyalty_status_id int, задолжителен 177 * tier_id int, задолжителен 178 178 * CONSTRAINT fk_employee_loyalty_user 179 179 FOREIGN KEY (user_id) 180 180 REFERENCES company_employee(user_id) 181 181 ON UPDATE CASCADE 182 ON DELETE CASCADE ,182 ON DELETE CASCADE 183 183 * CONSTRAINT fk_employee_loyalty_status 184 184 FOREIGN KEY (emp_loyalty_status_id) 185 185 REFERENCES employee_loyalty_status(emp_loyalty_status_id) 186 186 ON UPDATE CASCADE 187 ON DELETE RESTRICT ,187 ON DELETE RESTRICT 188 188 * CONSTRAINT fk_employee_loyalty_tier 189 189 FOREIGN KEY (tier_id) 190 190 REFERENCES loyalty_tier(tier_id) 191 191 ON UPDATE CASCADE 192 ON DELETE RESTRICT ,192 ON DELETE RESTRICT 193 193 * CONSTRAINT chk_employee_loyalty_points CHECK (emp_loyalty_curr_points >= 0) 194 194 195 195 **EMPLOYEE_LOYALTY_STATUS** 196 * emp_loyalty_status_id SERIAL PRIMARY KEY,197 * emp_loyalty_status_name VARCHAR(255) NOT NULL UNIQUE196 * emp_loyalty_status_id serial, примарен клуч 197 * emp_loyalty_status_name string, задолжителен и уникатен 198 198 199 199 **INGREDIENT** 200 * ingr_id SERIAL PRIMARY KEY,201 * ingr_name VARCHAR(255) NOT NULL UNIQUE200 * ingr_id serial, примарен клуч 201 * ingr_name string, задолжителен и уникатен 202 202 203 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) ,204 * tier_id serial, примарен клуч 205 * tier_name string, задолжителен и уникатен 206 * tier_minimum_points int, задолжителен 207 * tier_maximum_points int, задолжителен 208 * tier_discount_percentage NUMERIC(5,2), задолжителен 209 * tier_free_delivery_eligibility bool, задолжителен DEFAULT FALSE 210 * tier_priority_support bool, задолжителен DEFAULT FALSE 211 * tier_created_at DATE, задолжителен DEFAULT CURRENT_DATE 212 * tier_update_at timestamp, задолжителен 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 215 * CONSTRAINT chk_tier_discount CHECK (tier_discount_percentage >= 0 AND tier_discount_percentage <= 100) 216 216 217 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,218 * lunch_time_id serial, примарен клуч 219 * comp_order_id int 220 * contract_id int, задолжителен 221 * lunch_start timestamp, задолжителен 222 * lunch_end timestamp, задолжителен 223 * lunch_preorder_offset int, задолжителен DEFAULT 0 224 * lunch_weekday string, задолжителен 225 225 * CONSTRAINT fk_lunch_time_company_order 226 226 FOREIGN KEY (comp_order_id) 227 227 REFERENCES company_order(comp_order_id) 228 228 ON UPDATE CASCADE 229 ON DELETE SET NULL ,229 ON DELETE SET NULL 230 230 * CONSTRAINT fk_lunch_time_contract 231 231 FOREIGN KEY (contract_id) 232 232 REFERENCES contract(contract_id) 233 233 ON UPDATE CASCADE 234 ON DELETE CASCADE ,235 * CONSTRAINT chk_lunch_time_offset CHECK (lunch_preorder_offset >= 0) ,234 ON DELETE CASCADE 235 * CONSTRAINT chk_lunch_time_offset CHECK (lunch_preorder_offset >= 0) 236 236 * CONSTRAINT chk_lunch_weekday CHECK ( 237 237 lunch_weekday IN ('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday') 238 ) ,238 ) 239 239 * CONSTRAINT chk_lunch_interval CHECK (lunch_end > lunch_start) 240 240 241 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,242 * meal_id serial, примарен клуч 243 * cat_id int, задолжителен 244 * rest_id int, задолжителен 245 * meal_name string, задолжителен 246 * meal_description string 247 * meal_price NUMERIC(10,2), задолжителен 248 * meal_weight int, задолжителен 249 249 * CONSTRAINT fk_meal_category 250 250 FOREIGN KEY (cat_id) 251 251 REFERENCES category(cat_id) 252 252 ON UPDATE CASCADE 253 ON DELETE RESTRICT ,253 ON DELETE RESTRICT 254 254 * CONSTRAINT fk_meal_restaurant 255 255 FOREIGN KEY (rest_id) 256 256 REFERENCES restaurant(rest_id) 257 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) ,258 ON DELETE RESTRICT 259 * CONSTRAINT chk_meal_price CHECK (meal_price >= 0) 260 * CONSTRAINT chk_meal_weight CHECK (meal_weight > 0) 261 261 * CONSTRAINT uq_meal_restaurant_name UNIQUE (rest_id, meal_name) 262 262 263 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,264 * order_review_id serial, примарен клуч 265 * order_id int, задолжителен и уникатен 266 * order_review_food_rating int, задолжителен 267 * order_review_res_rating int, задолжителен 268 268 * CONSTRAINT fk_order_review_order 269 269 FOREIGN KEY (order_id) 270 270 REFERENCES customer_order(order_id) 271 271 ON UPDATE CASCADE 272 ON DELETE CASCADE ,273 * CONSTRAINT chk_order_review_food_rating CHECK (order_review_food_rating BETWEEN 1 AND 5) ,272 ON DELETE CASCADE 273 * CONSTRAINT chk_order_review_food_rating CHECK (order_review_food_rating BETWEEN 1 AND 5) 274 274 * CONSTRAINT chk_order_review_res_rating CHECK (order_review_res_rating BETWEEN 1 AND 5) 275 275 276 276 **ORDER_STATUS** 277 * o_status_id SERIAL PRIMARY KEY,278 * o_status_name VARCHAR(255) NOT NULL UNIQUE277 * o_status_id serial, примарен клуч 278 * o_status_name string, задолжителен и уникатен 279 279 280 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) UNIQUE281 * rest_id serial, примарен клуч 282 * rest_name string, задолжителен 283 * rest_email string, задолжителен и уникатен 284 * rest_location string, задолжителен 285 * rest_phone string, задолжителен и уникатен 286 * rest_website string, уникатен 287 287 288 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,289 * review_id serial, примарен клуч 290 * review_comment string 291 * review_created_at timestamp, задолжителен DEFAULT CURRENT_TIMESTAMP 292 * review_rating int, задолжителен 293 293 * CONSTRAINT chk_review_rating CHECK (review_rating BETWEEN 1 AND 5) 294 295 ==== Релациски табели 296 297 **Order_Meal** 298 * order_id int, задолжителен 299 * meal_id int, задолжителен 300 * quantity int, задолжителен DEFAULT 1 301 * PRIMARY KEY (order_id, meal_id), примарен клуч 302 * CONSTRAINT fk_order_meal_order 303 FOREIGN KEY (order_id) 304 REFERENCES customer_order(order_id) 305 ON UPDATE CASCADE 306 ON DELETE CASCADE 307 * CONSTRAINT fk_order_meal_meal 308 FOREIGN KEY (meal_id) 309 REFERENCES meal(meal_id) 310 ON UPDATE CASCADE 311 ON DELETE RESTRICT 312 * CONSTRAINT chk_order_meal_quantity CHECK (quantity > 0) 313 314 **Order_Drink** 315 * order_id int, задолжителен 316 * drink_id int, задолжителен 317 * quantity int, задолжителен DEFAULT 1 318 * PRIMARY KEY (order_id, drink_id), примарен клуч 319 * CONSTRAINT fk_order_drink_order 320 FOREIGN KEY (order_id) 321 REFERENCES customer_order(order_id) 322 ON UPDATE CASCADE 323 ON DELETE CASCADE 324 * CONSTRAINT fk_order_drink_drink 325 FOREIGN KEY (drink_id) 326 REFERENCES drink(drink_id) 327 ON UPDATE CASCADE 328 ON DELETE RESTRICT 329 * CONSTRAINT chk_order_drink_quantity CHECK (quantity > 0) 330 331 **Meal_Ingredient** 332 * meal_id int, задолжителен 333 * ingr_id int, задолжителен 334 * PRIMARY KEY (meal_id, ingr_id), примарен клуч 335 * CONSTRAINT fk_meal_ingredient_meal 336 FOREIGN KEY (meal_id) 337 REFERENCES meal(meal_id) 338 ON UPDATE CASCADE 339 ON DELETE CASCADE 340 * CONSTRAINT fk_meal_ingredient_ingredient 341 FOREIGN KEY (ingr_id) 342 REFERENCES ingredient(ingr_id) 343 ON UPDATE CASCADE 344 ON DELETE CASCADE 345 346 **Allergen_Ingredient** 347 * allergen_id int, задолжителен 348 * ingr_id int, задолжителен 349 * PRIMARY KEY (allergen_id, ingr_id), примарен клуч 350 * CONSTRAINT fk_allergen_ingredient_allergen 351 FOREIGN KEY (allergen_id) 352 REFERENCES allergen(allergen_id) 353 ON UPDATE CASCADE 354 ON DELETE CASCADE 355 * CONSTRAINT fk_allergen_ingredient_ingredient 356 FOREIGN KEY (ingr_id) 357 REFERENCES ingredient(ingr_id) 358 ON UPDATE CASCADE 359 ON DELETE CASCADE
