Changes between Version 4 and Version 5 of ddlScript.sql
- Timestamp:
- 12/24/25 22:23:12 (6 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ddlScript.sql
v4 v5 1 {{{#!sql2 1 -- Delete tables if they exist 3 2 DROP TABLE IF EXISTS product CASCADE; 4 3 DROP TABLE IF EXISTS image CASCADE; 5 DROP TABLE IF EXISTS color sCASCADE;4 DROP TABLE IF EXISTS color CASCADE; 6 5 DROP TABLE IF EXISTS store CASCADE; 7 6 DROP TABLE IF EXISTS personal CASCADE; … … 21 20 DROP TABLE IF EXISTS change CASCADE; 22 21 DROP TABLE IF EXISTS makes_change CASCADE; 23 DROP TABLE IF EXISTS made_odCASCADE;22 -- DROP TABLE IF EXISTS made_on CASCADE; 24 23 DROP TABLE IF EXISTS works_in_store CASCADE; 25 24 DROP TABLE IF EXISTS worked CASCADE; … … 27 26 DROP TABLE IF EXISTS includes CASCADE; 28 27 DROP TABLE IF EXISTS approves CASCADE; 29 DROP TABLE IF EXISTS exchange _data CASCADE;28 DROP TABLE IF EXISTS exchanges_data CASCADE; 30 29 31 30 … … 33 32 -- Create PRODUCT table 34 33 CREATE TABLE product ( 35 code SERIAL PRIMARY KEY, 34 code SERIAL PRIMARY KEY, -- In format 3 digits for store, 5 digits for product (Total 8 digits). Ex. 00100155, 01500020,... 36 35 price NUMERIC NOT NULL CHECK (price >= 0), 37 36 availability INTEGER NOT NULL, 38 37 weight NUMERIC NOT NULL CHECK (weight > 0), 39 width_x_length_x_depth VARCHAR(20) NOT NULL, 38 width_x_length_x_depth VARCHAR(20) NOT NULL, 40 39 aprox_production_time INTEGER NOT NULL, 41 40 description VARCHAR(1000) NOT NULL … … 45 44 -- Create IMAGE table 46 45 CREATE TABLE image( 47 product_code INTEGER PRIMARY KEY REFERENCES product(code) 48 ON DELETE CASCADE, 49 image VARCHAR(max) NOT NULL DEFAULT 'Image NOT found!' 50 ); 51 46 product_code VARCHAR PRIMARY KEY REFERENCES product(code) 47 ON DELETE CASCADE, 48 image VARCHAR NOT NULL DEFAULT 'Image NOT found!' 49 ); 52 50 53 51 -- Table 3 54 52 -- Create COLOR table 55 53 CREATE TABLE color ( 56 product_code INTEGER PRIMARY KEY NULL REFERENCES product(code)54 product_code VARCHAR PRIMARY NULL REFERENCES product(code) 57 55 ON DELETE CASCADE, 58 56 color VARCHAR(50) 59 57 ); 60 61 58 62 59 -- Table 4 63 60 -- Create STORE table 64 61 CREATE TABLE store ( 65 store_ID SERIAL PRIMARY KEY 66 ON DELETE CASCADE, 62 store_ID SERIAL PRIMARY KEY, -- In the format of 3 digits. Example : 001, 101, 567, 996,... 67 63 name VARCHAR(50) UNIQUE NOT NULL, 68 64 date_of_founding DATE NOT NULL, … … 72 68 ); 73 69 74 75 70 -- Table 5 76 71 -- Create PERSONAL table 77 CREATE TABLE personal ( -- Should a member of the personal have a personal_id, so that one person can work at 2 different stores? Or do we make a Composite key: (personal_ssn, store_id)?78 ssn VARCHAR(13) PRIMARY KEY, 72 CREATE TABLE personal ( 73 ssn VARCHAR(13) PRIMARY KEY, -- Format 13 digits : 0101001451001, 1209995423736,... 79 74 first_name VARCHAR(20) NOT NULL, 80 75 last_name VARCHAR(20) NOT NULL, 81 76 email VARCHAR(50) UNIQUE NOT NULL, 82 password VARCAHR(max) NOT NULL 83 ); 84 77 password VARCHAR NOT NULL 78 ); 85 79 86 80 -- Table 6 … … 93 87 ); 94 88 95 96 89 -- Table 7 97 90 -- Create BOSS table … … 101 94 ); 102 95 103 104 96 -- Table 8 105 97 -- Create EMPLOYEES table … … 110 102 ); 111 103 112 113 104 -- Table 9 114 105 -- Create CLIENT table 115 106 CREATE TABLE client ( 116 client_ID SERIAL PRIMARY KEY, 107 client_ID SERIAL PRIMARY KEY, -- Format, just an order of an integer, starting from 1000. EX : 1005, 1023, 1200, ... 117 108 first_name VARCHAR(50) NOT NULL, 118 109 last_name VARCHAR(50) NOT NULL, … … 121 112 ); 122 113 123 124 114 -- Table 10 125 115 -- Create DELIVERY_ADDRESS table … … 130 120 ); 131 121 132 133 122 -- Table 11 134 123 -- Create ORDER table 135 CREATE TABLE order(136 order_num SERIAL PRIMARY KEY, 137 client_ID INTEGER REFERENCES client(client_ID) ,124 CREATE TABLE "order" ( 125 order_num SERIAL PRIMARY KEY, -- In the format: 3 digits for store ID, 2 digits for year when order is placed, 5 digits for the number of order for that store in that year 126 client_ID INTEGER REFERENCES client(client_ID) 138 127 ON DELETE CASCADE, 139 128 quantity INTEGER NOT NULL, 140 129 status VARCHAR(20) NOT NULL DEFAULT 'placed order', 141 130 last_date_mod TIMESTAMP NOT NULL, 142 payment_method VARHAR (250) NOT NULL, 143 discount NUMERIC DEFAULT 0.0, 144 ); 145 131 payment_method VARCHAR (250) NOT NULL, 132 discount NUMERIC DEFAULT 0.0 133 ); 146 134 147 135 -- Table 12 … … 149 137 CREATE TABLE report ( 150 138 date TIMESTAMP NOT NULL, 151 store_ID INTEGERNOT NULL REFERENCES store(store_ID)152 ON DELETE CASCADE, 153 overall_profit NUMERIC NOT NULL DEFAULT 0.0 CHECK(overall_profit>=0 ,0),154 sales_trend VARCHAR (max)NOT NULL,155 marketing_growth VARCHAR (max)NOT NULL,139 store_ID VARCHAR(3) NOT NULL REFERENCES store(store_ID) 140 ON DELETE CASCADE, 141 overall_profit NUMERIC NOT NULL DEFAULT 0.0 CHECK(overall_profit>=0), 142 sales_trend VARCHAR NOT NULL, 143 marketing_growth VARCHAR NOT NULL, 156 144 owner_signature VARCHAR(30) NOT NULL, 157 145 PRIMARY KEY (date, store_ID) 158 146 ); 159 160 147 161 148 -- Table 13 … … 163 150 CREATE TABLE monthly_profit ( 164 151 report_date TIMESTAMP NOT NULL, 165 store_ID INTEGERNOT NULL,152 store_ID VARCHAR(3) NOT NULL, 166 153 month_and_year DATE NOT NULL, 167 profit NUM BERNOT NULL DEFAULT 0.0,154 profit NUMERIC NOT NULL DEFAULT 0.0, 168 155 PRIMARY KEY(report_date, store_ID), 169 FOREIGN KEY (report_date, store_id) REFERENCES report(date, store_ID) 170 ON DELETE CASCADE 171 ); 172 156 FOREIGN KEY (report_date, store_ID) REFERENCES report(date, store_ID) 157 ON DELETE CASCADE 158 ); 173 159 174 160 -- Table 14 175 161 -- Create REQUEST table 176 162 CREATE TABLE request ( 177 request_num SERIAL PRIMARY KEY, 163 request_num SERIAL PRIMARY KEY, -- Format: 3 digits for store ID, 2 digits for month in which the request is placed, 2 digits for year, 3 digits for request number 178 164 date_and_time TIMESTAMP NOT NULL, 179 165 problem VARCHAR(1000) NOT NULL, … … 182 168 ); 183 169 184 185 170 -- Table 15 186 171 -- Create MAKES_REQUEST table … … 188 173 client_ID INTEGER NOT NULL REFERENCES client(client_ID) 189 174 ON DELETE CASCADE, 190 order_num INTEGER UNIQUE NOT NULL REFERENCES order(order_num)175 order_num VARCHAR(10) UNIQUE NOT NULL REFERENCES "order"(order_num) 191 176 ON DELETE CASCADE, 192 177 PRIMARY KEY(client_ID, order_num) 193 178 ); 194 195 179 196 180 -- Table 16 197 181 -- Create ANSWERS table 198 182 CREATE TABLE answers ( 199 request_num INTEGERREFERENCES request(request_num)183 request_num VARCHAR(10) REFERENCES request(request_num) 200 184 ON DELETE CASCADE, 201 185 personal_SSN VARCHAR(13) NOT NULL REFERENCES personal(ssn) … … 203 187 PRIMARY KEY(request_num, personal_SSN) 204 188 ); 205 206 189 207 190 -- Table 17 208 191 -- Create FOR_STORE table 209 192 CREATE TABLE for_store ( 210 request_num INTEGERREFERENCES request(request_num)211 ON DELETE CASCADE, 212 store_ID SERIALREFERENCES store(store_ID)193 request_num VARCHAR(10) REFERENCES request(request_num) 194 ON DELETE CASCADE, 195 store_ID VARCHAR(3) REFERENCES store(store_ID) 213 196 ON DELETE CASCADE, 214 197 PRIMARY KEY(request_num, store_ID) 215 198 ); 216 217 199 218 200 -- Table 18 219 201 -- Create REVIEW table 220 202 CREATE TABLE review ( 221 order_num INTEGER REFERENCES order(order_num)222 ON DELETE CASCADE, -- S Hould the review be deleted when the order is deleted?203 order_num VARCHAR(10) REFERENCES "order"(order_num) 204 ON DELETE CASCADE, -- Should the review be deleted when the order is deleted? 223 205 comment VARCHAR(300), 224 rating NUM BERNOT NULL,206 rating NUMERIC NOT NULL, 225 207 last_mod_date TIMESTAMP NOT NULL 226 208 ); 227 228 209 229 210 -- Table 19 230 211 -- Create CHANGE table 231 CREATE TABLE change(212 CREATE TABLE "change" ( 232 213 date_and_time TIMESTAMP NOT NULL, 233 product_code INTEGERREFERENCES product(code)234 ON DELETE CASCADE, 235 changes VARCHAR (max)NOT NULL,214 product_code VARCHAR(8) REFERENCES product(code) 215 ON DELETE CASCADE, 216 changes VARCHAR NOT NULL, 236 217 PRIMARY KEY (date_and_time, product_code) 237 218 ); 238 239 219 240 220 -- Table 20 241 221 -- Create MAKES_CHANGE table 242 222 CREATE TABLE makes_change ( 243 personal_SSN NUMERICREFERENCES personal(ssn)223 personal_SSN VARCHAR(13) REFERENCES personal(ssn) 244 224 ON DELETE CASCADE, 245 225 change_date_time TIMESTAMP, 246 product_code INTEGER,226 product_code VARCHAR(8), 247 227 PRIMARY KEY(personal_SSN, change_date_time, product_code), 248 FOREIGN KEY (change_date_time, product_code) REFERENCES change(change_date_time, product) 249 ON DELETE CASCADE 250 ); 251 252 253 -- Table 21 254 -- Create MADE_ON table -- Is it needed? 255 --CREATE TABLE made_on ( 256 -- product_code INTEGER, 257 -- change_date_time TIMESTAMP, 258 -- PRIMARY KEY(product_SSN, change_date_time) 259 -- FOREIGN KEY(product_SSN, change_date_time) REFERENCES change(product_SSN, change_date_time) 260 -- ON DELETE CASCADE 261 --); 262 228 FOREIGN KEY (change_date_time, product_code) REFERENCES "change"(date_and_time, product_code) 229 ON DELETE CASCADE 230 ); 263 231 264 232 -- Table 22 … … 267 235 personal_SSN VARCHAR(13) REFERENCES personal(ssn) 268 236 ON DELETE CASCADE, 269 store_ID INTEGER REFERENCES store(store_ID) 270 ON DELETE CASCADE, 271 PRIMARY KEY(personak_SSN, store_ID) 272 ); 273 237 store_ID VARCHAR(3) REFERENCES store(store_ID) 238 ON DELETE CASCADE, 239 PRIMARY KEY(personal_SSN, store_ID) 240 ); 274 241 275 242 -- Table 23 … … 279 246 ON DELETE CASCADE, 280 247 report_date TIMESTAMP, 281 store_ID SERIAL,282 wage NUMERIC NOT NULL CHECK (wage>=62), -- Anyone should be paid a minimum of 63MKD/hour248 store_ID VARCHAR(3), 249 wage NUMERIC NOT NULL CHECK (wage>=62), 283 250 pay_method VARCHAR(20) DEFAULT 'hourly', 284 251 total_hours NUMERIC NOT NULL, 285 252 week VARCHAR(24) NOT NULL, 286 253 PRIMARY KEY (personal_SSN, report_date, store_ID), 287 FOREIGN KEY (report_date, store_ID) REFERENCES report(report_Date, store_ID) 288 ON DELETE CASCADE 289 ); 290 254 FOREIGN KEY (report_date, store_ID) REFERENCES report(date, store_ID) 255 ON DELETE CASCADE 256 ); 291 257 292 258 -- Table 24 293 259 -- Create SELLS table 294 260 CREATE TABLE sells ( 295 product_code INTEGERREFERENCES product(code)296 ON DELETE CASCADE, 297 store_ID SERIALREFERENCES store(store_ID)298 ON DELETE CASCADE, -- Should the data be kept if store is deleted?261 product_code VARCHAR(8) REFERENCES product(code) 262 ON DELETE CASCADE, 263 store_ID VARCHAR(3) REFERENCES store(store_ID) 264 ON DELETE CASCADE, 299 265 discount NUMERIC NOT NULL DEFAULT 0.0, 300 266 PRIMARY KEY (product_code, store_ID) 301 267 ); 302 303 268 304 269 -- Table 25 305 270 -- Create INCLUDES table 306 271 CREATE TABLE includes ( 307 order_num INTEGER REFERENCES order(order_num)308 ON DELETE CASCADE, 309 product_code INTEGERREFERENCES product(code)272 order_num VARCHAR(10) REFERENCES "order"(order_num) 273 ON DELETE CASCADE, 274 product_code VARCHAR(8) REFERENCES product(code) 310 275 ON DELETE CASCADE, 311 276 PRIMARY KEY (order_num, product_code) 312 277 ); 313 314 278 315 279 -- Table 26 316 280 -- Create APPROVES table 317 281 CREATE TABLE approves ( 318 boss_SSN NUMERICREFERENCES boss(boss_SSN)282 boss_SSN VARCHAR(13) REFERENCES boss(boss_SSN) 319 283 ON DELETE CASCADE, 320 284 report_date TIMESTAMP, 321 store_ID INTEGER,322 owner_signature VARCHAR (30) NOT NULL, -- Is it needed?285 store_ID VARCHAR(3), 286 owner_signature VARCHAR NOT NULL, 323 287 PRIMARY KEY (boss_SSN, report_date, store_ID), 324 FOREIGN KEY (report_date, store_ID) REFERENCES report(report_date, store_ID) 325 ON DELETE CASCADE 326 ); 327 288 FOREIGN KEY (report_date, store_ID) REFERENCES report(date, store_ID) 289 ON DELETE CASCADE 290 ); 328 291 329 292 -- Table 27 330 -- Create EXCHANGES_DATA table 331 CREATE TABLE exchanges_date ( 332 report_date TIMESTAMP, -- Should the data be kept if the report is deleted? 333 store_ID INTEGER REFERENCES store(store_ID) 293 CREATE TABLE exchanges_data ( 294 report_date TIMESTAMP NOT NULL, 295 store_ID VARCHAR(3) NOT NULL REFERENCES store(store_ID) 334 296 ON DELETE CASCADE, 335 297 monthly_profit NUMERIC NOT NULL DEFAULT 0.0, 336 298 date TIMESTAMP NOT NULL, 337 sales VARCHAR(max) NOT NULL, 338 damages VARCHAR(max), 339 PRIMARY KEY (report_date, store_ID), 340 FOREIGN KEY (report_date, store_ID) REFERENCES report(report_date, store_ID) 341 ON DELETE CASCADE 342 ); 343 299 sales NUMERIC NOT NULL, -- Total profit achieved in sells 300 damages NUMERIC NOT NULL DEFAULT 0.0 CHECK (damages>=0), -- Total loss in damages/refunds 301 FOREIGN KEY (report_date, store_ID) REFERENCES report(date, store_ID) 302 ON DELETE CASCADE, 303 PRIMARY KEY (report_date, store_ID) 304 );
