Changes between Version 2 and Version 3 of ddlScript.sql


Ignore:
Timestamp:
12/21/25 00:22:44 (10 days ago)
Author:
235018
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ddlScript.sql

    v2 v3  
    3333-- Create PRODUCT table
    3434CREATE TABLE product (
    35     code SERIAL UNIQUE NOT NULL PRIMARY KEY,
    36     price NUMBER NOT NULL,
     35    code SERIAL PRIMARY KEY,
     36    price NUMERIC NOT NULL CHECK (price >= 0),
    3737    availability INTEGER NOT NULL,
    38     weight NUMBER NOT NULL,
    39     width_X_length_X_depth VARCHAR(20) NOT NULL,
     38    weight NUMERIC NOT NULL CHECK (weight > 0),
     39    width_x_length_x_depth VARCHAR(20) NOT NULL,
    4040    aprox_production_time INTEGER NOT NULL,
    41     description VARCHAR NOT NULL
    42 );
    43 
     41    description VARCHAR(1000) NOT NULL
     42);
    4443
    4544-- Table 2
    4645-- Create IMAGE table
    4746CREATE TABLE image(
    48     product_code SERIAL UNIQUE NOT NULL REFERENCES product(code)
    49         ON DELETE CASCADE,
    50     image VARCHAR NOT NULL DEFAULT 'Image NOT found!'
     47    product_code INTEGER PRIMARY KEY REFERENCES product(code)
     48        ON DELETE CASCADE,
     49    image VARCHAR(max) NOT NULL DEFAULT 'Image NOT found!'
    5150);
    5251
     
    5554-- Create COLOR table
    5655CREATE TABLE color (
    57     product_code SERIAL UNIQUE NOT NULL REFERENCES product(code)
    58         ON DELETE CASCADE,
    59     color VARCHAR(10)
     56    product_code INTEGER PRIMARY KEY NULL REFERENCES product(code)
     57        ON DELETE CASCADE,
     58    color VARCHAR(20)
    6059);
    6160
     
    6463-- Create STORE table
    6564CREATE TABLE store (
    66     store_ID SERIAL UNIQUE NOT NULL PRIMARY KEY
     65    store_ID SERIAL PRIMARY KEY
    6766        ON DELETE CASCADE,
    6867    name VARCHAR(50) UNIQUE NOT NULL,
    6968    date_of_founding DATE NOT NULL,
    70     physical_address VARCHAR(100) NOT NULL,
     69    physical_address VARCHAR(100) NOT NULL,   -- ADDRESS FORMAT : st.(st-name) num.(unit-num), (city) (post-code), (country)?????
    7170    store_email VARCHAR(20) UNIQUE NOT NULL,
    72     rating NUMBER NOT NULL DEFAULT '0'
     71    rating NUMERIC NOT NULL DEFAULT 0.0 CHECK (rating>=0.0)
    7372);
    7473
     
    7776-- Create PERSONAL table
    7877CREATE TABLE personal (
    79     ssn NUMBER UNIQUE NOT NULL PRIMARY KEY,
     78    ssn VARCHAR(13) UNIQUE NOT NULL PRIMARY KEY,
    8079    first_name VARCHAR(20) NOT NULL,
    8180    last_name VARCHAR(20) NOT NULL,
    82     email VARCHAR(20) UNIQUE NOT NULL,
     81    email VARCHAR(50) UNIQUE NOT NULL,
    8382    password VARCAHR NOT NULL
    8483);
     
    8887-- Create PERMISSIONS table
    8988CREATE TABLE permissions (
    90     personal_SSN NUMBER UNIQUE NOT NULL PRIMARY KEY REFERENCES personal(ssn)
     89    personal_SSN VARCHAR(13) PRIMARY KEY REFERENCES personal(ssn)
    9190        ON DELETE CASCADE,
    9291    type VARCHAR(100) UNIQUE NOT NULL,
    93     authorisation VARCHAR (50) NOT NULL
     92    authorisation VARCHAR(50) NOT NULL
    9493);
    9594
     
    9897-- Create BOSS table
    9998CREATE TABLE boss (
    100     boss_SSN NUMBER UNIQUE NOT NULL PRIMARY KEY REFERENCES personal(ssn)
     99    boss_SSN VARCHAR(13) PRIMARY KEY REFERENCES personal(ssn)
    101100        ON DELETE CASCADE
    102101);
     
    106105-- Create EMPLOYEES table
    107106CREATE TABLE employees (
    108     employee_SSN NUMBER UNIQUE NOT NULL PRIMARY KEY REFERENCES personal(ssn)
     107    employee_SSN VARCHAR(13) PRIMARY KEY REFERENCES personal(ssn)
    109108        ON DELETE CASCADE,
    110109    date_of_hire DATE NOT NULL
     
    115114-- Create CLIENT table
    116115CREATE TABLE client (
    117     client_ID SERIAL UNIQUE NOT NULL PRIMARY KEY,
     116    client_ID SERIAL PRIMARY KEY,
    118117    first_name VARCHAR(50) NOT NULL,
    119118    last_name VARCHAR(50) NOT NULL,
    120     email VARCHAR(20) UNIQUE NOT NULL,
     119    email VARCHAR(50) UNIQUE NOT NULL,
    121120    password VARCHAR NOT NULL
    122121);
     
    126125-- Create DELIVERY_ADDRESS table
    127126CREATE TABLE delivery_address (
    128     client_ID SERIAL UNIQUE NOT NULL PRIMARY KEY REFERENCES client(client_ID)
    129         ON DELETE CASCADE,
    130     address VARCHAR NOT NULL
     127    client_ID INTEGER PRIMARY KEY REFERENCES client(client_ID)
     128        ON DELETE CASCADE,
     129    address VARCHAR(100) NOT NULL -- ADDRESS FORMAT : st.(st-name) num.(unit-num), (city) (post-code), (country)?????
    131130);
    132131
     
    135134-- Create ORDER table
    136135CREATE TABLE order (
    137     order_num SERIAL UNIQUE NOT NULL PRIMARY KEY,
    138     client_ID SERIAL UNIQUE NOT NULL REFERENCES client(client_ID),
     136    order_num SERIAL PRIMARY KEY,
     137    client_ID INTEGER REFERENCES client(client_ID),
    139138        ON DELETE CASCADE,
    140139    quantity INTEGER NOT NULL,
     
    142141    last_date_mod TIMESTAMP NOT NULL,
    143142    payment_method VARHAR (250) NOT NULL,
    144     discount NUMBER DEFAULT 0.0,
     143    discount NUMERIC DEFAULT 0.0,
    145144);
    146145
     
    150149CREATE TABLE report (
    151150    date TIMESTAMP NOT NULL,
    152     store_ID SERIAL NOT NULL REFERENCES store(store_ID)
    153         ON DELETE CASCADE,
    154     overall_profit NUMBER NOT NULL DEFAULT 0.0,
     151    store_ID INTEGER NOT NULL REFERENCES store(store_ID)
     152        ON DELETE CASCADE,
     153    overall_profit NUMERIC NOT NULL DEFAULT 0.0 CHECK(overall_profit>=0,0),
    155154    sales_trend VARCHAR(max) NOT NULL,
    156155    marketing_growth VARCHAR(max) NOT NULL,
     
    163162-- Create MONTHLY_PROFIT table
    164163CREATE TABLE monthly_profit (
    165     report_date TIMESTAMP NOT NULL REFERENCES report(date)
    166         ON DELETE CASCADE,
    167     store_ID SERIAL NOT NULL REFERENCES store(store_ID),
    168         ON DELETE CASCADE,
     164    report_date TIMESTAMP NOT NULL,
     165    store_ID INTEGER NOT NULL,
    169166    month_and_year DATE NOT NULL,
    170167    profit NUMBER NOT NULL DEFAULT 0.0,
    171     PRIMARY KEY(report_date, store_ID)
     168    PRIMARY KEY(report_date, store_ID),
     169    FOREIGN KEY (report_date, store_id) REFERENCES report(date, store_ID)
     170        ON DELETE CASCADE
    172171);
    173172
     
    176175-- Create REQUEST table
    177176CREATE TABLE request (
    178     request_num SERIAL UNIQUE NOT NULL PRIMARY KEY,
     177    request_num SERIAL PRIMARY KEY,
    179178    date_and_time TIMESTAMP NOT NULL,
    180179    problem VARCHAR(1000) NOT NULL,
    181180    notes_of_communication VARCHAR(300),
    182     costumer_satisfaction NUMBER NOT NULL
     181    costumer_satisfaction NUMERIC NOT NULL
    183182);
    184183
     
    187186-- Create MAKES_REQUEST table
    188187CREATE TABLE makes_request (
    189     client_ID SERIAL NOT NULL REFERENCES client(client_ID)
    190         ON DELETE CASCADE,
    191     order_num SERIAL UNIQUE NOT NULL REFERENCES order(order_num)
    192         ON DELETE CASCADE,
     188    client_ID INTEGER NOT NULL REFERENCES client(client_ID)
     189        ON DELETE CASCADE,
     190    order_num INTEGER UNIQUE NOT NULL REFERENCES order(order_num)
     191        ON DELETE CASCADE,
     192    PRIMARY KEY(client_ID, order_num)
    193193);
    194194
     
    197197-- Create ANSWERS table
    198198CREATE TABLE answers (
    199     request_num SERIAL NOT NULL REFERENCES request(request_num)
    200         ON DELETE CASCADE,
    201     personal_SSN VARCHAR NOT NULL REFERENCES personal(ssn)
    202         ON DELETE CASCADE,   
     199    request_num INTEGER REFERENCES request(request_num)
     200        ON DELETE CASCADE,
     201    personal_SSN VARCHAR(13) NOT NULL REFERENCES personal(ssn)
     202        ON DELETE CASCADE,
     203    PRIMARY KEY(request_num, personal_SSN)
    203204);
    204205
     
    207208-- Create FOR_STORE table
    208209CREATE TABLE for_store (
    209     request_num SERIAL NOT NULL REFERENCES request(request_num)
    210         ON DELETE CASCADE,
    211     store_ID SERIAL NOT NULL REFERENCES store(store_ID)
    212         ON DELETE CASCADE
     210    request_num INTEGER REFERENCES request(request_num)
     211        ON DELETE CASCADE,
     212    store_ID SERIAL REFERENCES store(store_ID)
     213        ON DELETE CASCADE,
     214    PRIMARY KEY(request_num, store_ID)
    213215);
    214216
     
    217219-- Create REVIEW table
    218220CREATE TABLE review (
    219     order_num SERIAL NOT NULL UNIQUE REFERENCES order(order_num)
    220         ON DELETE CASCADE,
     221    order_num INTEGER REFERENCES order(order_num)
     222        ON DELETE CASCADE,               -- SHould the review be deleted when the order is deleted?
    221223    comment VARCHAR(300),
    222224    rating NUMBER NOT NULL,
     
    229231CREATE TABLE change (
    230232    date_and_time TIMESTAMP NOT NULL,
    231     changes VARCHAR(max) NOT NULL
     233    product_code INTEGER REFERENCES product(code)
     234        ON DELETE CASCADE,
     235    changes VARCHAR(max) NOT NULL,
     236    PRIMARY KEY (date_and_time, product_code)
    232237);
    233238
     
    236241-- Create MAKES_CHANGE table
    237242CREATE TABLE makes_change (
    238     personal_SSN NUMBER NOT NULL REFERENCES personal(ssn)
    239         ON DELETE CASCADE,
    240     change_date_time TIMESTAMP NOT NULL,
    241     PRIMARY KEY(personal_SSN, change_date_time)
     243    personal_SSN NUMERIC REFERENCES personal(ssn)
     244        ON DELETE CASCADE,
     245    change_date_time TIMESTAMP,
     246    product_code INTEGER,
     247    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
    242250);
    243251
    244252
    245253-- Table 21
    246 -- Create MADE_ON table
    247 CREATE TABLE made_on (
    248     product_code SERIAL NOT NULL REFERENCES product(code)
    249         ON DELETE CASCADE,
    250     change_date_time TIMESTAMP NOT NULL,
    251     PRIMARY KEY(product_SSN, change_date_time)
    252 );
     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--);
    253262
    254263
     
    256265-- Create WORKS_IN_STORE table
    257266CREATE TABLE works_in_store (
    258     personal_SSN NUMBER NOT NULL REFERENCES personal(ssn)
    259         ON DELETE CASCADE,
    260     store_ID SERIAL NOT NULL REFERENCES store(store_ID)
     267    personal_SSN VARCHAR(13) REFERENCES personal(ssn)
     268        ON DELETE CASCADE,
     269    store_ID INTEGER REFERENCES store(store_ID)
    261270        ON DELETE CASCADE,
    262271    PRIMARY KEY(personak_SSN, store_ID)
     
    267276-- Create WORKED table
    268277CREATE TABLE worked (
    269     personal_SSN NUMBER NOT NULL REFERENCES personal(ssn)
    270         ON DELETE CASCADE,
    271     report_date TIMESTAMP NOT NULL REFERENCES report(date)
    272         ON DELETE CASCADE,
    273     store_ID SERIAL NOT NULL REFERENCES store(store_ID)
    274         ON DELETE CASCADE,
    275     wage NUMBER NOT NULL,
     278    personal_SSN VARCHAR(13) REFERENCES personal(ssn)
     279        ON DELETE CASCADE,                   
     280    report_date TIMESTAMP,
     281    store_ID SERIAL,     
     282    wage NUMERIC NOT NULL CHECK (wage>=62),   -- Anyone should be paid a minimum of 63MKD/hour
    276283    pay_method VARCHAR(20) DEFAULT 'hourly',
    277     total_hours NUMBER NOT NULL,
    278     week VARCHAR(24) NOT NULL
     284    total_hours NUMERIC NOT NULL,
     285    week VARCHAR(24) NOT NULL,
     286    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
    279289);
    280290
     
    283293-- Create SELLS table
    284294CREATE TABLE sells (
    285     product_code SERIAL NOT NULL REFERENCES product(code)
    286         ON DELETE CASCADE,
    287     store_ID SERIAL NOT NULL REFERENCES store(store_ID)
    288         ON DELETE CASCADE,
    289     discount NUMBER NOT NULL DEFAULT 0.0
     295    product_code INTEGER REFERENCES product(code)
     296        ON DELETE CASCADE,
     297    store_ID SERIAL REFERENCES store(store_ID)
     298        ON DELETE CASCADE,      -- Should the data be kept if store is deleted?
     299    discount NUMERIC NOT NULL DEFAULT 0.0,
     300    PRIMARY KEY (product_code, store_ID)
    290301);
    291302
     
    294305-- Create INCLUDES table
    295306CREATE TABLE includes (
    296     order_num SERIAL NOT NULL REFERENCES order(order_num)
    297         ON DELETE CASCADE,
    298     product_code SERIAL NOT NULL REFERENCES product(code)
    299         ON DELETE CASCADE,
     307    order_num INTEGER REFERENCES order(order_num)
     308        ON DELETE CASCADE,
     309    product_code INTEGER REFERENCES product(code)
     310        ON DELETE CASCADE,
     311    PRIMARY KEY (order_num, product_code)
    300312);
    301313
     
    304316-- Create APPROVES table
    305317CREATE TABLE approves (
    306     boss_SSN NUMBER NOT NULL REFERENCES boss(boss_SSN)
    307         ON DELETE CASCADE,
    308     report_date TIMESTAMP NOT NULL REFERENCES report(date)
    309         ON DELETE CASCADE,
    310     store_ID SERIAL NOT NULL REFERENCES store(store_ID)
    311         ON DELETE CASCADE,
    312     owner_signature VARCHAR(30) NOT NULL
     318    boss_SSN NUMERIC REFERENCES boss(boss_SSN)
     319        ON DELETE CASCADE,
     320    report_date TIMESTAMP,
     321    store_ID INTEGER,
     322    owner_signature VARCHAR(30) NOT NULL,  -- Is it needed?
     323    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
    313326);
    314327
     
    317330-- Create EXCHANGES_DATA table
    318331CREATE TABLE exchanges_date (
    319     report_date TIMESTAMP NOT NULL references report(report_date)
    320         ON DELETE CASCADE,
    321     store_ID SERIAL NOT NULL REFERENCES store(store_ID)
    322         ON DELETE CASCADE,
    323     monthly_profit NUMBER NOT NULL DEFAULT 0.0,
     332    report_date TIMESTAMP,    -- Should the data be kept if the report is deleted?
     333    store_ID INTEGER REFERENCES store(store_ID)
     334        ON DELETE CASCADE,
     335    monthly_profit NUMERIC NOT NULL DEFAULT 0.0,
    324336    date TIMESTAMP NOT NULL,
    325337    sales VARCHAR(max) NOT NULL,
    326     damages VARCHAR(max)
    327 );
    328 
    329 
     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