Changes between Version 9 and Version 10 of ddlScript-with-help-of-AI.sql
- Timestamp:
- 09/19/26 07:46:38 (10 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ddlScript-with-help-of-AI.sql
v9 v10 1 1 {{{#!sql 2 -- Delete tables if they exist (in reverse dependency order)2 -- Delete tables if they exist 3 3 DROP TABLE IF EXISTS category; 4 DROP TABLE IF EXISTS store;5 4 DROP TABLE IF EXISTS product; 6 5 DROP TABLE IF EXISTS image; 7 6 DROP TABLE IF EXISTS color; 7 DROP TABLE IF EXISTS store; 8 8 DROP TABLE IF EXISTS personal; 9 9 DROP TABLE IF EXISTS permissions; … … 22 22 DROP TABLE IF EXISTS "change"; 23 23 DROP TABLE IF EXISTS makes_change; 24 -- DROP TABLE IF EXISTS made_on CASCADE;25 24 DROP TABLE IF EXISTS works_in_store; 26 25 DROP TABLE IF EXISTS worked; … … 36 35 id SERIAL PRIMARY KEY, 37 36 name VARCHAR(50) NOT NULL, 38 parent_category_id INTEGER REFERENCES category(id) 37 parent_category_id INTEGER REFERENCES category(id) NOT NULL 38 ); 39 40 -- Table 1 41 -- Create PRODUCT table 42 CREATE TABLE product ( 43 code VARCHAR(8) PRIMARY KEY DEFAULT -1, -- In format 3 digits for store, 5 digits for product (Total 8 digits). Ex. 00100155, 01500020,... 44 price DECIMAL(10,2) NOT NULL CHECK (price >= 0.0), 45 availability INTEGER NOT NULL, 46 weight DECIMAL(5,2) NOT NULL CHECK (weight > 0), -- Shown in kg 47 width_x_length_x_depth VARCHAR(20) NOT NULL, 48 aprox_production_time INTEGER NOT NULL, 49 description VARCHAR(500) NOT NULL, 50 category_id INTEGER NOT NULL REFERENCES category(id) 51 ON DELETE SET DEFAULT 52 ); 53 54 -- Table 2 55 -- Create IMAGE table 56 CREATE TABLE image( 57 product_code VARCHAR(8) REFERENCES product(code) 58 ON DELETE CASCADE, 59 image VARCHAR NOT NULL DEFAULT 'Image NOT found!' 60 ); 61 62 -- Table 3 63 -- Create COLOR table 64 CREATE TABLE color ( 65 product_code VARCHAR(8) REFERENCES product(code) 66 ON DELETE CASCADE, 67 color VARCHAR(50) 39 68 ); 40 69 … … 46 75 date_of_founding DATE NOT NULL, 47 76 physical_address VARCHAR(100) NOT NULL, -- ADDRESS FORMAT : st.(st-name) num.(unit-num), (city) (post-code), (country)????? 48 store_email VARCHAR(40) UNIQUE NOT NULL ,77 store_email VARCHAR(40) UNIQUE NOT NULL CHECK (store_email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'), 49 78 rating DECIMAL(2,1) NOT NULL DEFAULT 0 CHECK (rating>=0.0 AND rating<=5.0) 50 79 ); 51 52 53 -- Table 154 -- Create PRODUCT table55 CREATE TABLE product (56 code VARCHAR(8) PRIMARY KEY, -- In format 3 digits for store, 5 digits for product (Total 8 digits). Ex. 00100155, 01500020,...57 price DECIMAL(10,2) NOT NULL CHECK (price >= 0.0),58 availability INTEGER NOT NULL,59 weight DECIMAL(5,2) NOT NULL CHECK (weight > 0), -- Shown in kg60 width_x_length_x_depth VARCHAR(20) NOT NULL,61 aprox_production_time INTEGER NOT NULL,62 description VARCHAR(500) NOT NULL,63 cathegory_id INTEGER NOT NULL REFERENCES category(id)64 ON DELETE SET DEFAULT,65 store_id VARCHAR(3) REFERENCES store(store_ID)66 );67 68 -- Table 269 -- Create IMAGE table70 CREATE TABLE image(71 product_code VARCHAR(8) REFERENCES product(code)72 ON DELETE CASCADE,73 image VARCHAR NOT NULL DEFAULT 'Image NOT found!',74 PRIMARY KEY(product_code, image)75 );76 77 -- Table 378 -- Create COLOR table79 CREATE TABLE color (80 product_code VARCHAR(8) REFERENCES product(code)81 ON DELETE CASCADE,82 color VARCHAR(50),83 PRIMARY KEY(product_code, color)84 );85 86 80 87 81 -- Table 5 88 82 -- Create PERSONAL table 89 83 CREATE TABLE personal ( 90 id CHAR(7) PRIMARY KEY, -- Format 3 digits for store, 4 digits for employee ID84 id VARCHAR(10) PRIMARY KEY, -- format: storeId(3) + '001' for owner, storeId(3) + employeeNum(3) for employees) 91 85 first_name VARCHAR(20) NOT NULL, 92 86 last_name VARCHAR(20) NOT NULL, 93 ssn CHAR(13) NOT NULL,94 email VARCHAR(50) UNIQUE NOT NULL ,87 ssn VARCHAR(13) NOT NULL CHECK (ssn ~ '^[0-9]{13}$'), 88 email VARCHAR(50) UNIQUE NOT NULL CHECK (email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'), 95 89 password VARCHAR NOT NULL 96 90 ); … … 99 93 -- Create PERMISSIONS table 100 94 CREATE TABLE permissions ( 101 personal_ID CHAR(7) REFERENCES personal(id) 102 ON DELETE CASCADE, 103 type VARCHAR(100) UNIQUE NOT NULL, 104 authorisation VARCHAR(50) NOT NULL, 105 PRIMARY KEY(personal_ID, type) 95 personal_is VARCHAR(10) PRIMARY KEY REFERENCES personal(id) 96 ON DELETE CASCADE, 97 type VARCHAR(50) NOT NULL, 98 authorisation VARCHAR(50) NOT NULL 106 99 ); 107 100 … … 109 102 -- Create BOSS table 110 103 CREATE TABLE boss ( 111 boss_ID CHAR(7) PRIMARY KEY REFERENCES personal(id) 112 ON DELETE CASCADE, 113 signature VARCHAR UNIQUE NOT NULL 104 boss_id VARCHAR(10) PRIMARY KEY REFERENCES personal(id) 105 ON DELETE CASCADE 114 106 ); 115 107 … … 117 109 -- Create EMPLOYEES table 118 110 CREATE TABLE employees ( 119 employee_ ID CHAR(7) PRIMARY KEY REFERENCES personal(id)111 employee_id VARCHAR(10) PRIMARY KEY REFERENCES personal(id) 120 112 ON DELETE CASCADE, 121 113 date_of_hire DATE NOT NULL … … 128 120 first_name VARCHAR(50) NOT NULL, 129 121 last_name VARCHAR(50) NOT NULL, 130 email VARCHAR(50) UNIQUE NOT NULL ,122 email VARCHAR(50) UNIQUE NOT NULL CHECK (email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'), 131 123 password VARCHAR NOT NULL 132 124 ); … … 150 142 client_ID INTEGER REFERENCES client(client_ID) 151 143 ON DELETE CASCADE, 152 quantity INTEGER NOT NULL,153 144 status VARCHAR(20) NOT NULL DEFAULT 'placed order', 154 145 last_date_mod TIMESTAMP NOT NULL, 155 146 payment_method VARCHAR (250) NOT NULL, -- Format : "credit card, **** **** **** 6750" , or "cash", or "paypal, user@gmail.com",... Contains important information that are going to be needed when issuing a refund 156 147 discount DECIMAL(5,2) DEFAULT 0.0 CHECK(discount>=0.0 AND discount<= 100.00), 157 delivery_address VARCHAR NOT NULL, -- Combined, street, city and postcode of client's chosen address. Default is the delivery address marked by client158 148 CONSTRAINT check_status (status IN ('placed order', 'being processed', 'shipping', 'delivered', 'canceled')) 159 149 ); 160 150 161 162 151 -- Table 12 152 -- Create REVIEW table 153 CREATE TABLE review ( 154 order_num VARCHAR(11) PRIMARY KEY REFERENCES "order"(order_num) 155 ON DELETE CASCADE, 156 comment VARCHAR(300), 157 rating DECIMMAL(1,1) NOT NULL CHECK(rating>=0.0 AND rating<=5.0), 158 last_mod_date TIMESTAMP NOT NULL 159 ); 160 161 -- Table 13 162 -- Create REFUND table 163 CREATE TABLE refund ( 164 refund_id SERIAL PRIMARY KEY, 165 order_num VARCHAR(11) PARTIAL KEY REFERENCES "order"(order_num) 166 ON DELETE CASCADE, 167 reason VARCHAR(300), 168 amount DECIMAL(5,2) NOT NULL, 169 status VARCHAR(100) NOT NULL DEFAULT 'requested refund', 170 CONSTRAINT check_refund_status (status IN ('requested refund', 'being revied', 'approved', 'not approved', 'processed')) 171 172 ); 173 174 175 -- Table 14 163 176 -- Create REPORT table 164 177 CREATE TABLE report ( … … 167 180 ON DELETE CASCADE, 168 181 overall_profit NUMERIC NOT NULL DEFAULT 0.0 CHECK(overall_profit>=0), 169 sales_trend VARCHAR NOT NULL, -- graph170 marketing_growth VARCHAR NOT NULL, -- graph171 owner_signature VARCHAR( 30) NOT NULL,182 sales_trend VARCHAR(100) NOT NULL, -- graph 183 marketing_growth VARCHAR(100) NOT NULL, -- graph 184 owner_signature VARCHAR(50) NOT NULL DEFAULT 'Not signed yet', 172 185 PRIMARY KEY (date, store_ID) 173 186 ); 174 187 175 -- Table 1 3188 -- Table 15 176 189 -- Create MONTHLY_PROFIT table 177 190 CREATE TABLE monthly_profit ( … … 185 198 ); 186 199 187 -- Table 14 200 -- Table 16 201 -- Create EXCHANGES_DATA table 202 CREATE TABLE exchanges_data ( 203 report_date TIMESTAMP NOT NULL, 204 store_ID VARCHAR(3) NOT NULL REFERENCES report(store_ID) 205 ON DELETE CASCADE, 206 monthly_profit NUMERIC NOT NULL DEFAULT 0.0, 207 date TIMESTAMP NOT NULL, 208 sales NUMERIC NOT NULL DEFAULT 0.0, -- Total revenue achieved in sales 209 damages NUMERIC NOT NULL DEFAULT 0.0 CHECK (damages<=0), -- Total loss in damages/refunds 210 PRIMARY KEY (report_date, store_ID), 211 FOREIGN KEY (report_date, store_ID) REFERENCES report(date, store_ID) 212 ON DELETE CASCADE 213 ); 214 215 216 217 -- Table 17 188 218 -- Create REQUEST table 189 219 CREATE TABLE request ( … … 192 222 problem VARCHAR(300) NOT NULL, 193 223 notes_of_communication VARCHAR, 194 customer_satisfaction NUMERIC NOT NULL -- Fixed from "costumer" to "customer"195 ); 196 197 -- Table 1 5224 customer_satisfaction NUMERIC NOT NULL 225 ); 226 227 -- Table 18 198 228 -- Create MAKES_REQUEST table 199 229 CREATE TABLE makes_request ( 200 230 client_ID INTEGER NOT NULL REFERENCES client(client_ID) 201 231 ON DELETE CASCADE, 202 request_num VARCHAR(11) UNIQUE NOT NULL REFERENCES request(request_num)232 order_num VARCHAR(11) UNIQUE NOT NULL REFERENCES "order"(order_num) 203 233 ON DELETE CASCADE, 204 234 PRIMARY KEY(client_ID, order_num) 205 235 ); 206 236 207 -- Table 1 6237 -- Table 19 208 238 -- Create ANSWERS table 209 239 CREATE TABLE answers ( 210 240 request_num VARCHAR(14) REFERENCES request(request_num) 211 241 ON DELETE CASCADE, 212 personal_ ID CHAR(7) NOT NULL REFERENCES personal(id)213 ON DELETE CASCADE, 214 PRIMARY KEY(request_num, personal_ ID)215 ); 216 217 -- Table 17242 personal_id VARCHAR(10) NOT NULL REFERENCES personal(id) 243 ON DELETE CASCADE, 244 PRIMARY KEY(request_num, personal_id) 245 ); 246 247 -- Table 20 218 248 -- Create FOR_STORE table 219 249 CREATE TABLE for_store ( … … 225 255 ); 226 256 227 -- Table 18 228 -- Create REVIEW table 229 CREATE TABLE review ( 230 order_num VARCHAR(11) PRIMARY KEY REFERENCES "order"(order_num) 231 ON DELETE CASCADE, -- Should the review be deleted when the order is deleted? 232 comment VARCHAR(300), 233 rating NUMERIC NOT NULL, 234 last_mod_date TIMESTAMP NOT NULL 235 ); 236 237 -- Table 19 257 258 -- Table 21 238 259 -- Create CHANGE table 239 260 CREATE TABLE "change" ( … … 245 266 ); 246 267 247 -- Table 2 0268 -- Table 22 248 269 -- Create MAKES_CHANGE table 249 270 CREATE TABLE makes_change ( 250 personal_ ID CHAR(7) REFERENCES personal(id)271 personal_id VARCHAR(10) REFERENCES personal(id) 251 272 ON DELETE CASCADE, 252 273 change_date_time TIMESTAMP, 253 274 product_code VARCHAR(8), 254 PRIMARY KEY(personal_ ID, change_date_time, product_code),275 PRIMARY KEY(personal_id, change_date_time, product_code), 255 276 FOREIGN KEY (change_date_time, product_code) REFERENCES "change"(date_and_time, product_code) 256 277 ON DELETE CASCADE 257 278 ); 258 279 259 -- Table 2 2280 -- Table 23 260 281 -- Create WORKS_IN_STORE table 261 282 CREATE TABLE works_in_store ( 262 personal_ ID VARCHAR(5) REFERENCES personal(id)283 personal_id VARCHAR(10) REFERENCES personal(id) 263 284 ON DELETE CASCADE, 264 285 store_ID VARCHAR(3) REFERENCES store(store_ID) 265 286 ON DELETE CASCADE, 266 PRIMARY KEY(personal_ ID, store_ID)267 ); 268 269 -- Table 2 3287 PRIMARY KEY(personal_id, store_ID) 288 ); 289 290 -- Table 24 270 291 -- Create WORKED table 271 292 CREATE TABLE worked ( 272 personal_ ID CHAR(7) REFERENCES personal(id)293 personal_id VARCHAR(10) REFERENCES personal(id) 273 294 ON DELETE CASCADE, 274 295 report_date TIMESTAMP, 275 296 store_ID VARCHAR(3), 276 wage NUMERIC NOT NULL CHECK (wage>= 62),277 pay_method VARCHAR DEFAULT ' hourly',297 wage NUMERIC NOT NULL CHECK (wage>=0), 298 pay_method VARCHAR DEFAULT 'full-time', 278 299 total_hours NUMERIC NOT NULL, 279 300 week VARCHAR(23) NOT NULL, -- Format : 15.12.2025 - 21.12.2025 280 PRIMARY KEY (personal_ ID, report_date, store_ID),301 PRIMARY KEY (personal_SSN, report_date, store_ID), 281 302 FOREIGN KEY (report_date, store_ID) REFERENCES report(date, store_ID) 282 ON DELETE CASCADE 283 ); 284 285 -- Table 24 303 ON DELETE CASCADE, 304 CONSTRAINT check_pay_method (pay_method IN ('full_time', 'part-time', 'custom')) 305 ); 306 307 -- Table 25 286 308 -- Create SELLS table 287 309 CREATE TABLE sells ( … … 294 316 ); 295 317 296 -- Table 2 5318 -- Table 26 297 319 -- Create INCLUDES table 298 320 CREATE TABLE includes ( … … 301 323 product_code VARCHAR(8) REFERENCES product(code) 302 324 ON DELETE CASCADE, 325 quantity INTEGER NOT NULL CHECK(quantity>=0), 303 326 PRIMARY KEY (order_num, product_code) 304 327 ); 305 328 306 -- Table 2 6329 -- Table 27 307 330 -- Create APPROVES table 308 331 CREATE TABLE approves ( 309 boss_ ID CHAR(7) REFERENCES boss(boss_ID)332 boss_id VARCHAR(10) REFERENCES boss(boss_id) 310 333 ON DELETE CASCADE, 311 334 report_date TIMESTAMP, 312 335 store_ID VARCHAR(3), 313 336 owner_signature VARCHAR NOT NULL, 314 PRIMARY KEY (boss_ ID, report_date, store_ID),337 PRIMARY KEY (boss_SSN, report_date, store_ID), 315 338 FOREIGN KEY (report_date, store_ID) REFERENCES report(date, store_ID) 316 339 ON DELETE CASCADE 317 340 ); 318 341 319 -- Table 27320 -- Create EXCHANGES_DATA table321 CREATE TABLE exchanges_data (322 report_date TIMESTAMP NOT NULL,323 store_ID VARCHAR(3) NOT NULL REFERENCES store(store_ID)324 ON DELETE CASCADE,325 monthly_profit NUMERIC NOT NULL DEFAULT 0.0,326 date TIMESTAMP NOT NULL,327 sales NUMERIC NOT NULL, -- Total profit achieved in sales (not "sells")328 damages NUMERIC NOT NULL DEFAULT 0.0 CHECK (damages>=0), -- Total loss in damages/refunds329 FOREIGN KEY (report_date, store_ID) REFERENCES report(date, store_ID)330 ON DELETE CASCADE,331 PRIMARY KEY (report_date, store_ID)332 );333 334 -- Table 28335 -- Create REFUND table336 CREATE TABLE refund (337 refund_id INTEGER PRIMARY KEY,338 order_num VARCHAR(11) REFERENCES "order"(order_num)339 ON DELETE CASCADE,340 amount DECIMAL(10,2) NOT NULL CHECK(amount > 0.0),341 reason VARCHAR(200),342 status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending', 'approved', 'rejected', 'processed'))343 );344 345 342 346 343
