Changes between Version 3 and Version 4 of DdlScript
- Timestamp:
- 06/10/26 16:10:33 (2 months ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
DdlScript
v3 v4 10 10 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 11 11 updated_at TIMESTAMP, 12 deleted_at TIMESTAMP, 13 14 CONSTRAINT chk_user_updated_at CHECK (updated_at IS NULL OR updated_at >= created_at), 15 CONSTRAINT chk_user_deleted_at CHECK (deleted_at IS NULL OR deleted_at >= created_at), 16 CONSTRAINT chk_email CHECK (email ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'), 17 CONSTRAINT chk_phone CHECK (phone_number ~ '^\+?[0-9]{7,15}$'), 18 CONSTRAINT chk_user_created_at CHECK (created_at <= CURRENT_TIMESTAMP) 19 ); 12 13 CONSTRAINT chk_user_updated_at 14 CHECK (updated_at IS NULL OR updated_at >= created_at), 15 16 CONSTRAINT chk_email 17 CHECK (email ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'), 18 19 CONSTRAINT chk_phone 20 CHECK (phone_number ~ '^\+?[0-9]{7,15}$'), 21 22 CONSTRAINT chk_user_created_at 23 CHECK (created_at <= CURRENT_TIMESTAMP) 24 ); 25 20 26 21 27 CREATE TABLE Location ( … … 24 30 latitude DECIMAL(9,6) NOT NULL, 25 31 longitude DECIMAL(9,6) NOT NULL, 26 CONSTRAINT uq_location_cords UNIQUE (latitude, longitude), 27 CONSTRAINT chk_latitude CHECK (latitude BETWEEN -90 AND 90), 28 CONSTRAINT chk_longitude CHECK (longitude BETWEEN -180 AND 180) 29 ); 32 33 CONSTRAINT uq_location_cords 34 UNIQUE (latitude, longitude), 35 36 CONSTRAINT chk_latitude 37 CHECK (latitude BETWEEN -90 AND 90), 38 39 CONSTRAINT chk_longitude 40 CHECK (longitude BETWEEN -180 AND 180) 41 ); 42 30 43 31 44 CREATE TABLE Category ( … … 34 47 description VARCHAR(500), 35 48 parent_category_id INT, 49 36 50 CONSTRAINT fk_category_parent 37 51 FOREIGN KEY (parent_category_id) 38 52 REFERENCES Category(id) 39 ON DELETE SET NULL 40 ); 53 ON DELETE RESTRICT 54 ); 55 41 56 42 57 CREATE TABLE NotificationType ( … … 45 60 description VARCHAR(500) 46 61 ); 47 48 62 CREATE TABLE Badge ( 49 63 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, … … 55 69 tier_level INT, 56 70 57 CONSTRAINT chk_min_price CHECK (min_price >= 0), 58 CONSTRAINT chk_max_price CHECK (max_price >= 0), 59 CONSTRAINT chk_price_range CHECK (min_price <= max_price), 60 CONSTRAINT chk_tier_range CHECK (1<=tier_level and 5>=tier_level), 71 CONSTRAINT chk_min_price 72 CHECK (min_price >= 0), 73 74 CONSTRAINT chk_max_price 75 CHECK (max_price >= 0), 76 77 CONSTRAINT chk_price_range 78 CHECK (min_price <= max_price), 79 80 CONSTRAINT chk_tier_range 81 CHECK (tier_level BETWEEN 1 AND 5), 61 82 62 83 CONSTRAINT fk_badge_category 63 84 FOREIGN KEY (category_id) 64 85 REFERENCES Category(id) 65 ON DELETE RESTRICT 66 ); 86 ON DELETE CASCADE 87 ); 88 67 89 68 90 CREATE TABLE Worker ( … … 75 97 updated_at TIMESTAMP, 76 98 77 CONSTRAINT chk_worker_created_at CHECK (created_at<=CURRENT_TIMESTAMP), 78 CONSTRAINT chk_worker_updated_at CHECK (updated_at IS NULL OR updated_at >= created_at), 79 CONSTRAINT chk_radius CHECK (service_radius_km > 0), 80 CONSTRAINT chk_worker_work_mode CHECK (work_mode IN ('HYBRID','ONSITE','REMOTE')), 99 CONSTRAINT chk_worker_created_at 100 CHECK (created_at <= CURRENT_TIMESTAMP), 101 102 CONSTRAINT chk_worker_updated_at 103 CHECK (updated_at IS NULL OR updated_at >= created_at), 104 105 CONSTRAINT chk_radius 106 CHECK (service_radius_km > 0), 107 108 CONSTRAINT chk_worker_work_mode 109 CHECK (work_mode IN ('HYBRID', 'ONSITE', 'REMOTE')), 110 81 111 CONSTRAINT fk_worker_user 82 112 FOREIGN KEY (user_id) 83 113 REFERENCES UserAccount(id) 84 114 ON DELETE CASCADE, 115 85 116 CONSTRAINT fk_worker_location 86 117 FOREIGN KEY (location_id) … … 89 120 ); 90 121 122 91 123 CREATE TABLE Client ( 92 124 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, 93 125 user_id INT NOT NULL, 126 94 127 CONSTRAINT fk_client_user 95 128 FOREIGN KEY (user_id) … … 98 131 ); 99 132 133 100 134 CREATE TABLE Favourite ( 101 135 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, 102 136 worker_id INT NOT NULL, 103 137 client_id INT NOT NULL, 138 104 139 CONSTRAINT fk_favourite_worker 105 140 FOREIGN KEY (worker_id) 106 141 REFERENCES Worker(id) 107 142 ON DELETE CASCADE, 143 108 144 CONSTRAINT fk_favourite_client 109 145 FOREIGN KEY (client_id) 110 146 REFERENCES Client(id) 111 147 ON DELETE CASCADE, 112 CONSTRAINT unq_worker_client UNIQUE(worker_id,client_id) 113 ); 114 148 149 CONSTRAINT unq_worker_client 150 UNIQUE (worker_id, client_id) 151 ); 115 152 CREATE TABLE WorkerCategory ( 116 153 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, 117 154 worker_id INT NOT NULL, 118 155 category_id INT NOT NULL, 119 CONSTRAINT unq_worker_category UNIQUE(worker_id, category_id), 156 157 CONSTRAINT unq_worker_category 158 UNIQUE (worker_id, category_id), 159 120 160 CONSTRAINT fk_worker_category_worker 121 161 FOREIGN KEY (worker_id) 122 162 REFERENCES Worker(id) 123 ON DELETE CASCADE , 163 ON DELETE CASCADE, 164 124 165 CONSTRAINT fk_worker_category_category 125 166 FOREIGN KEY (category_id) … … 128 169 ); 129 170 171 130 172 CREATE TABLE WorkerBadge ( 131 173 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, … … 134 176 date_acquired DATE, 135 177 is_active BOOLEAN, 136 CONSTRAINT unq_worker_badge UNIQUE(badge_id, worker_id), 178 179 CONSTRAINT unq_worker_badge 180 UNIQUE (badge_id, worker_id), 181 137 182 CONSTRAINT fk_worker_badge_badge 138 183 FOREIGN KEY (badge_id) 139 184 REFERENCES Badge(id) 140 185 ON DELETE CASCADE, 186 141 187 CONSTRAINT fk_worker_badge_worker 142 188 FOREIGN KEY (worker_id) … … 145 191 ); 146 192 193 147 194 CREATE TABLE TaskRequest ( 148 195 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, … … 150 197 description VARCHAR(1000) NOT NULL, 151 198 work_mode VARCHAR(20) NOT NULL, 152 status VARCHAR(20) CHECK (status in('OPEN','CLOSED')), 199 status VARCHAR(20) 200 CHECK (status IN ('OPEN', 'CLOSED')), 153 201 category_id INT NOT NULL, 154 202 location_id INT NOT NULL, 155 203 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 156 204 updated_at TIMESTAMP, 157 deleted_at TIMESTAMP, 158 CONSTRAINT chk_task_req_work_mode CHECK (work_mode IN ('HYBRID','ONSITE','REMOTE')), 159 CONSTRAINT chk_task_req_created_at CHECK (created_at <= CURRENT_TIMESTAMP), 160 CONSTRAINT chk_task_req_updated_at CHECK 161 (updated_at IS NULL OR (updated_at >= created_at AND updated_at <= CURRENT_TIMESTAMP)), 162 CONSTRAINT chk_task_req_deleted_at CHECK 163 (deleted_at IS NULL OR (deleted_at >= created_at AND deleted_at <= CURRENT_TIMESTAMP)), 205 206 CONSTRAINT chk_task_req_work_mode 207 CHECK (work_mode IN ('HYBRID', 'ONSITE', 'REMOTE')), 208 209 CONSTRAINT chk_task_req_created_at 210 CHECK (created_at <= CURRENT_TIMESTAMP), 211 212 CONSTRAINT chk_task_req_updated_at 213 CHECK ( 214 updated_at IS NULL OR 215 (updated_at >= created_at 216 AND updated_at <= CURRENT_TIMESTAMP) 217 ), 218 164 219 CONSTRAINT fk_task_request_client 165 220 FOREIGN KEY (client_id) 166 221 REFERENCES Client(id) 167 222 ON DELETE CASCADE, 223 168 224 CONSTRAINT fk_task_request_category 169 225 FOREIGN KEY (category_id) 170 226 REFERENCES Category(id) 171 227 ON DELETE RESTRICT, 228 172 229 CONSTRAINT fk_task_request_location 173 230 FOREIGN KEY (location_id) … … 176 233 ); 177 234 235 178 236 CREATE TABLE Offer ( 179 237 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, … … 182 240 price INT NOT NULL, 183 241 offer_status VARCHAR(20) NOT NULL, 184 initiated_by VARCHAR(10) NOT NULL CHECK (initiated_by IN ('CLIENT','WORKER')), 185 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 186 updated_at TIMESTAMP, 187 deleted_at TIMESTAMP, 188 CONSTRAINT chk_price CHECK (price > 0), 189 CONSTRAINT chk_offer_status CHECK (offer_status IN ('PENDING', 'ACCEPTED', 'REJECTED')), 190 CONSTRAINT chk_offer_created_at CHECK (created_at <= CURRENT_TIMESTAMP), 191 CONSTRAINT chk_task_off_updated_at CHECK 192 (updated_at IS NULL OR (updated_at >= created_at AND updated_at <= CURRENT_TIMESTAMP)), 193 CONSTRAINT chk_task_off_deleted_at CHECK 194 (deleted_at IS NULL OR (deleted_at >= created_at AND deleted_at <= CURRENT_TIMESTAMP)), 242 initiated_by VARCHAR(10) NOT NULL 243 CHECK (initiated_by IN ('CLIENT', 'WORKER')), 244 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 245 updated_at TIMESTAMP, 246 247 CONSTRAINT chk_price 248 CHECK (price > 0), 249 250 CONSTRAINT chk_offer_status 251 CHECK (offer_status IN ('PENDING', 'ACCEPTED', 'REJECTED')), 252 253 CONSTRAINT chk_offer_created_at 254 CHECK (created_at <= CURRENT_TIMESTAMP), 255 256 CONSTRAINT chk_task_off_updated_at 257 CHECK ( 258 updated_at IS NULL OR 259 (updated_at >= created_at 260 AND updated_at <= CURRENT_TIMESTAMP) 261 ), 262 195 263 CONSTRAINT fk_offer_worker 196 264 FOREIGN KEY (worker_id) 197 265 REFERENCES Worker(id) 198 266 ON DELETE CASCADE, 267 199 268 CONSTRAINT fk_offer_task_request 200 269 FOREIGN KEY (task_request_id) 201 270 REFERENCES TaskRequest(id) 202 ON DELETE RESTRICT 203 ); 204 271 ON DELETE CASCADE 272 ); 205 273 CREATE TABLE Task ( 206 274 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, … … 209 277 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 210 278 updated_at TIMESTAMP, 211 completed_at TIMESTAMP, 212 CONSTRAINT chk_task_status CHECK (status IN ('ACTIVE', 'COMPLETED', 'CANCELLED')), 213 CONSTRAINT chk_created_at CHECK (created_at <= CURRENT_TIMESTAMP), 214 CONSTRAINT chk_completed_at CHECK (completed_at <= CURRENT_TIMESTAMP), 215 CONSTRAINT chk_timeline CHECK (updated_at IS NULL OR updated_at >= created_at), 279 280 CONSTRAINT chk_task_status 281 CHECK (status IN ('ACTIVE', 'COMPLETED', 'CANCELLED')), 282 283 CONSTRAINT chk_created_at 284 CHECK (created_at <= CURRENT_TIMESTAMP), 285 286 CONSTRAINT chk_timeline 287 CHECK (updated_at IS NULL OR updated_at >= created_at), 288 216 289 CONSTRAINT fk_task_offer 217 290 FOREIGN KEY (offer_id) … … 220 293 ); 221 294 295 222 296 CREATE TABLE Message ( 223 297 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, … … 225 299 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 226 300 task_id INT NOT NULL, 227 sender_id INT NOT NULL, 228 229 CONSTRAINT chk_sent_at CHECK (created_at <= CURRENT_TIMESTAMP), 301 sender_id INT, 302 303 CONSTRAINT chk_sent_at 304 CHECK (created_at <= CURRENT_TIMESTAMP), 230 305 231 306 CONSTRAINT fk_message_task 232 307 FOREIGN KEY (task_id) 233 308 REFERENCES Task(id) 234 ON DELETE RESTRICT, 309 ON DELETE CASCADE, 310 235 311 CONSTRAINT fk_message_sender 236 312 FOREIGN KEY (sender_id) 237 313 REFERENCES UserAccount(id) 238 ON DELETE RESTRICT 239 ); 314 ON DELETE SET NULL 315 ); 316 240 317 241 318 CREATE TABLE Review ( … … 245 322 task_id INT NOT NULL, 246 323 reviewed_id INT NOT NULL, 247 reviewer_id INT NOT NULL, 248 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 249 CONSTRAINT chk_rating CHECK (rating BETWEEN 1 AND 5), 250 CONSTRAINT chk_created CHECK (created_at <= CURRENT_TIMESTAMP), 324 reviewer_id INT, 325 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 326 327 CONSTRAINT chk_rating 328 CHECK (rating BETWEEN 1 AND 5), 329 330 CONSTRAINT chk_created 331 CHECK (created_at <= CURRENT_TIMESTAMP), 332 251 333 CONSTRAINT fk_review_task 252 334 FOREIGN KEY (task_id) 253 335 REFERENCES Task(id) 254 ON DELETE RESTRICT, 336 ON DELETE CASCADE, 337 255 338 CONSTRAINT fk_review_reviewed 256 339 FOREIGN KEY (reviewed_id) 257 340 REFERENCES UserAccount(id) 258 ON DELETE RESTRICT, 341 ON DELETE CASCADE, 342 259 343 CONSTRAINT fk_review_reviewer 260 344 FOREIGN KEY (reviewer_id) 261 345 REFERENCES UserAccount(id) 262 ON DELETE RESTRICT, 263 CONSTRAINT unq UNIQUE(task_id, reviewer_id) 264 ); 346 ON DELETE SET NULL, 347 348 CONSTRAINT unq 349 UNIQUE (task_id, reviewer_id) 350 ); 351 265 352 266 353 CREATE TABLE Complaint ( … … 274 361 client_id INT NOT NULL, 275 362 worker_id INT NOT NULL, 276 CONSTRAINT chk_complaint_status CHECK (status IN ('OPEN', 'RESOLVED', 'DISMISSED')), 277 CONSTRAINT chk_complaint_created_at CHECK (created_at <= CURRENT_TIMESTAMP), 278 CONSTRAINT chk_timeline CHECK (updated_at IS NULL OR updated_at >= created_at), 363 364 CONSTRAINT chk_complaint_status 365 CHECK (status IN ('OPEN', 'RESOLVED', 'DISMISSED')), 366 367 CONSTRAINT chk_complaint_created_at 368 CHECK (created_at <= CURRENT_TIMESTAMP), 369 370 CONSTRAINT chk_timeline 371 CHECK (updated_at IS NULL OR updated_at >= created_at), 372 279 373 CONSTRAINT fk_complaint_task 280 374 FOREIGN KEY (task_id) 281 375 REFERENCES Task(id) 282 ON DELETE RESTRICT, 376 ON DELETE CASCADE, 377 283 378 CONSTRAINT fk_complaint_client 284 379 FOREIGN KEY (client_id) 285 380 REFERENCES Client(id) 286 ON DELETE RESTRICT, 381 ON DELETE CASCADE, 382 287 383 CONSTRAINT fk_complaint_worker 288 384 FOREIGN KEY (worker_id) 289 385 REFERENCES Worker(id) 290 ON DELETE RESTRICT 291 ); 292 386 ON DELETE CASCADE 387 ); 293 388 CREATE TABLE ComplaintAttachment ( 294 389 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, … … 297 392 complaint_id INT NOT NULL, 298 393 user_id INT, 394 299 395 CONSTRAINT fk_complaint_attachment_complaint 300 396 FOREIGN KEY (complaint_id) 301 397 REFERENCES Complaint(id) 302 398 ON DELETE CASCADE, 399 303 400 CONSTRAINT fk_complaint_attachment_user 304 401 FOREIGN KEY (user_id) … … 306 403 ON DELETE SET NULL 307 404 ); 405 308 406 309 407 CREATE TABLE Payment ( … … 312 410 payment_method VARCHAR(50) NOT NULL, 313 411 status VARCHAR(20) NOT NULL, 314 task_id INT NOT NULL, 315 client_id INT NOT NULL, 316 worker_id INT NOT NULL, 317 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 318 updated_at TIMESTAMP, 319 320 CONSTRAINT chk_amount CHECK (amount > 0), 321 CONSTRAINT chk_status CHECK (status IN ('PENDING', 'PAID', 'FAILED')), 322 CONSTRAINT chk_payment_method CHECK (payment_method IN ('CARD','CASH','PAYPAL')), 323 CONSTRAINT chk_p_created_at CHECK (created_at <= CURRENT_TIMESTAMP), 324 CONSTRAINT chk_task_p_updated_at CHECK 325 (updated_at IS NULL OR (updated_at >= created_at AND updated_at <= CURRENT_TIMESTAMP)), 412 task_id INT, 413 client_id INT, 414 worker_id INT, 415 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 416 updated_at TIMESTAMP, 417 418 CONSTRAINT chk_amount 419 CHECK (amount > 0), 420 421 CONSTRAINT chk_status 422 CHECK (status IN ('PENDING', 'PAID', 'FAILED')), 423 424 CONSTRAINT chk_payment_method 425 CHECK (payment_method IN ('CARD','CASH','PAYPAL')), 426 427 CONSTRAINT chk_p_created_at 428 CHECK (created_at <= CURRENT_TIMESTAMP), 429 430 CONSTRAINT chk_task_p_updated_at 431 CHECK ( 432 updated_at IS NULL OR 433 (updated_at >= created_at 434 AND updated_at <= CURRENT_TIMESTAMP) 435 ), 436 326 437 CONSTRAINT fk_payment_task 327 438 FOREIGN KEY (task_id) 328 439 REFERENCES Task(id) 329 ON DELETE RESTRICT, 440 ON DELETE SET NULL, 441 330 442 CONSTRAINT fk_payment_client 331 443 FOREIGN KEY (client_id) 332 444 REFERENCES Client(id) 333 ON DELETE RESTRICT, 445 ON DELETE SET NULL, 446 334 447 CONSTRAINT fk_payment_worker 335 448 FOREIGN KEY (worker_id) 336 449 REFERENCES Worker(id) 337 ON DELETE RESTRICT450 ON DELETE SET NULL 338 451 ); 339 452 … … 345 458 user_id INT NOT NULL, 346 459 notification_type_id INT NOT NULL, 460 347 461 CONSTRAINT fk_notification_preference_user 348 462 FOREIGN KEY (user_id) 349 463 REFERENCES UserAccount(id) 350 464 ON DELETE CASCADE, 465 351 466 CONSTRAINT fk_notification_preference_type 352 467 FOREIGN KEY (notification_type_id) 353 468 REFERENCES NotificationType(id) 354 ON DELETE RESTRICT, 355 CONSTRAINT chk_channel CHECK (channel IN ('EMAIL','SMS','PUSH')) 356 ); 469 ON DELETE CASCADE, 470 471 CONSTRAINT chk_channel 472 CHECK (channel IN ('EMAIL','SMS','PUSH')) 473 ); 474 357 475 358 476 CREATE TABLE Notification ( … … 366 484 offer_id INT, 367 485 payment_id INT, 368 CONSTRAINT chk_notification_time CHECK (created_at <= CURRENT_TIMESTAMP), 486 487 CONSTRAINT chk_notification_time 488 CHECK (created_at <= CURRENT_TIMESTAMP), 489 369 490 CONSTRAINT fk_notification_user 370 491 FOREIGN KEY (user_id) 371 492 REFERENCES UserAccount(id) 372 493 ON DELETE CASCADE, 494 373 495 CONSTRAINT fk_notification_type 374 496 FOREIGN KEY (notification_type_id) 375 497 REFERENCES NotificationType(id) 376 498 ON DELETE SET NULL, 499 377 500 CONSTRAINT fk_notification_task 378 501 FOREIGN KEY (task_id) 379 502 REFERENCES Task(id) 380 503 ON DELETE SET NULL, 504 381 505 CONSTRAINT fk_notification_offer 382 506 FOREIGN KEY (offer_id) 383 507 REFERENCES Offer(id) 384 508 ON DELETE SET NULL, 509 385 510 CONSTRAINT fk_notification_payment 386 511 FOREIGN KEY (payment_id) … … 389 514 ); 390 515 516 391 517 CREATE TABLE cities ( 392 518 city VARCHAR(25),
