Changes between Initial Version and Version 1 of ddlScript-with-help-of-AI.sql


Ignore:
Timestamp:
12/28/25 01:04:22 (3 days ago)
Author:
235018
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ddlScript-with-help-of-AI.sql

    v1 v1  
     1{{{#!sql
     2-- Delete tables if they exist
     3DROP TABLE IF EXISTS product;
     4DROP TABLE IF EXISTS image;
     5DROP TABLE IF EXISTS color;
     6DROP TABLE IF EXISTS store;
     7DROP TABLE IF EXISTS personal;
     8DROP TABLE IF EXISTS permissions;
     9DROP TABLE IF EXISTS boss;
     10DROP TABLE IF EXISTS employees;
     11DROP TABLE IF EXISTS client;
     12DROP TABLE IF EXISTS delivery_address;
     13DROP TABLE IF EXISTS "order";
     14DROP TABLE IF EXISTS report;
     15DROP TABLE IF EXISTS monthly_profit;
     16DROP TABLE IF EXISTS request;
     17DROP TABLE IF EXISTS makes_request;
     18DROP TABLE IF EXISTS answers;
     19DROP TABLE IF EXISTS for_store;
     20DROP TABLE IF EXISTS review;
     21DROP TABLE IF EXISTS "change";
     22DROP TABLE IF EXISTS makes_change;
     23--  DROP TABLE IF EXISTS made_on CASCADE;
     24DROP TABLE IF EXISTS works_in_store;
     25DROP TABLE IF EXISTS worked;
     26DROP TABLE IF EXISTS sells;
     27DROP TABLE IF EXISTS includes;
     28DROP TABLE IF EXISTS approves;
     29DROP TABLE IF EXISTS exchanges_data;
     30
     31
     32-- Table 0
     33-- Create CATEGORY table
     34CREATE TABLE category (
     35    id SERIAL PRIMARY KEY,
     36    name VARCHAR(50) NOT NULL,
     37    parent_category_id INTEGER REFERENCES category(id)
     38);
     39
     40-- Table 1
     41-- Create PRODUCT table
     42CREATE 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    cathegory_id INTEGER NOT NULL REFERENCES category(id)
     51        ON DELETE SET DEFAULT
     52);
     53
     54-- Table 2
     55-- Create IMAGE table
     56CREATE 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
     64CREATE TABLE color (
     65    product_code VARCHAR(8) REFERENCES product(code)
     66        ON DELETE CASCADE,
     67    color VARCHAR(50)
     68);
     69
     70-- Table 4
     71-- Create STORE table
     72CREATE TABLE store (
     73    store_ID VARCHAR(3) PRIMARY KEY,             -- In the format of 3 digits. Example : 001, 101, 567, 996,...
     74    name VARCHAR(50) UNIQUE NOT NULL,
     75    date_of_founding DATE NOT NULL,
     76    physical_address VARCHAR(100) NOT NULL,   -- ADDRESS FORMAT : st.(st-name) num.(unit-num), (city) (post-code), (country)?????
     77    store_email VARCHAR(40) UNIQUE NOT NULL CHECK (store_email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'),
     78    rating DECIMAL(2,1) NOT NULL DEFAULT 0 CHECK (rating>=0.0 AND rating<=5.0)
     79);
     80
     81-- Table 5
     82-- Create PERSONAL table
     83CREATE TABLE personal (
     84    ssn VARCHAR(13) PRIMARY KEY CHECK (ssn ~ '^[0-9]{13}$'),                                     -- Format 13 digits :   0101001451001, 1209995423736,...
     85    first_name VARCHAR(20) NOT NULL,
     86    last_name VARCHAR(20) NOT NULL,
     87    email VARCHAR(50) UNIQUE NOT NULL     CHECK (email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'),
     88    password VARCHAR NOT NULL
     89);
     90
     91-- Table 6
     92-- Create PERMISSIONS table
     93CREATE TABLE permissions (
     94    personal_SSN VARCHAR(13) PRIMARY KEY REFERENCES personal(ssn)
     95        ON DELETE CASCADE,
     96    type VARCHAR(100) UNIQUE NOT NULL,
     97    authorisation VARCHAR(50) NOT NULL
     98);
     99
     100-- Table 7
     101-- Create BOSS table
     102CREATE TABLE boss (
     103    boss_SSN VARCHAR(13) PRIMARY KEY REFERENCES personal(ssn)
     104        ON DELETE CASCADE
     105);
     106
     107-- Table 8
     108-- Create EMPLOYEES table
     109CREATE TABLE employees (
     110    employee_SSN VARCHAR(13) PRIMARY KEY REFERENCES personal(ssn)
     111        ON DELETE CASCADE,
     112    date_of_hire DATE NOT NULL
     113);
     114
     115-- Table 9
     116-- Create CLIENT table
     117CREATE TABLE client (
     118    client_ID SERIAL PRIMARY KEY,                     -- Format, just an order of an integer, starting from 1000. EX : 1005, 1023,  1200, ...
     119    first_name VARCHAR(50) NOT NULL,
     120    last_name VARCHAR(50) NOT NULL,
     121    email VARCHAR(50) UNIQUE NOT NULL CHECK (email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'),
     122    password VARCHAR NOT NULL
     123);
     124
     125-- Table 10
     126-- Create DELIVERY_ADDRESS table
     127CREATE TABLE delivery_address (
     128    client_ID INTEGER PRIMARY KEY REFERENCES client(client_ID)
     129        ON DELETE CASCADE,
     130    address VARCHAR(200) NOT NULL, -- ADDRESS FORMAT : st.(st-name) num.(unit-num)
     131    city VARCHAR(30) NOT NULL,
     132    postcode VARCHAR(20) NOT NULL,
     133    country VARCHAR(40) NOT NULL,
     134    is_default BOOLEAN DEFAULT True
     135);
     136
     137-- Table 11
     138-- Create ORDER table
     139CREATE TABLE "order" (
     140    order_num VARCHAR(11) PRIMARY KEY,                   -- In the format: 3 digits for store ID, 3 digits for year when order is placed, 5 digits for the number of order for that store in that year
     141    client_ID INTEGER REFERENCES client(client_ID)
     142        ON DELETE CASCADE,
     143    quantity INTEGER NOT NULL,
     144    status VARCHAR(20) NOT NULL DEFAULT 'placed order',
     145    last_date_mod TIMESTAMP NOT NULL,
     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
     147    discount DECIMAL(5,2) DEFAULT 0.0 CHECK(discount>=0.0 AND discount<= 100.00),
     148    CONSTRAINT check_status (status IN ('placed order', 'being processed', 'shipping', 'delivered', 'canceled'))
     149);
     150
     151-- Should there be also a table for refund???
     152
     153-- Table 12
     154-- Create REPORT table
     155CREATE TABLE report (
     156    date TIMESTAMP NOT NULL,
     157    store_ID VARCHAR(3) NOT NULL REFERENCES store(store_ID)
     158        ON DELETE CASCADE,
     159    overall_profit NUMERIC NOT NULL DEFAULT 0.0 CHECK(overall_profit>=0),
     160    sales_trend VARCHAR NOT NULL,                                                    -- graph
     161    marketing_growth VARCHAR NOT NULL,                                               -- graph
     162    owner_signature VARCHAR(30) NOT NULL,                                           
     163    PRIMARY KEY (date, store_ID)
     164);
     165
     166-- Table 13
     167-- Create MONTHLY_PROFIT table
     168CREATE TABLE monthly_profit (
     169    report_date TIMESTAMP NOT NULL,
     170    store_ID VARCHAR(3) NOT NULL,
     171    month_and_year DATE NOT NULL,
     172    profit NUMERIC NOT NULL DEFAULT 0.0,
     173    PRIMARY KEY(report_date, store_ID),
     174    FOREIGN KEY (report_date, store_ID) REFERENCES report(date, store_ID)
     175        ON DELETE CASCADE
     176);
     177
     178-- Table 14
     179-- Create REQUEST table
     180CREATE TABLE request (
     181    request_num VARCHAR(14) PRIMARY KEY,  -- Format: 3 digits for store ID, 2 digits for month in which the request is placed, 3 digits for year, 4 digits for client, 2 digits for request number
     182    date_and_time TIMESTAMP NOT NULL,
     183    problem VARCHAR(300) NOT NULL,
     184    notes_of_communication VARCHAR,
     185    customer_satisfaction NUMERIC NOT NULL  -- Fixed from "costumer" to "customer"
     186);
     187
     188-- Table 15
     189-- Create MAKES_REQUEST table
     190CREATE TABLE makes_request (
     191    client_ID INTEGER NOT NULL REFERENCES client(client_ID)
     192        ON DELETE CASCADE,
     193    order_num VARCHAR(11) UNIQUE NOT NULL REFERENCES "order"(order_num)
     194        ON DELETE CASCADE,
     195    PRIMARY KEY(client_ID, order_num)
     196);
     197
     198-- Table 16
     199-- Create ANSWERS table
     200CREATE TABLE answers (
     201    request_num VARCHAR(14) REFERENCES request(request_num)
     202        ON DELETE CASCADE,
     203    personal_SSN VARCHAR(13) NOT NULL REFERENCES personal(ssn)
     204        ON DELETE CASCADE,
     205    PRIMARY KEY(request_num, personal_SSN)
     206);
     207
     208-- Table 17
     209-- Create FOR_STORE table
     210CREATE TABLE for_store (
     211    request_num VARCHAR(14) REFERENCES request(request_num)
     212        ON DELETE CASCADE,
     213    store_ID VARCHAR(3) REFERENCES store(store_ID)
     214        ON DELETE CASCADE,
     215    PRIMARY KEY(request_num, store_ID)
     216);
     217
     218-- Table 18
     219-- Create REVIEW table
     220CREATE TABLE review (
     221    order_num VARCHAR(11) PRIMARY KEY REFERENCES "order"(order_num)
     222        ON DELETE CASCADE,               -- Should the review be deleted when the order is deleted?
     223    comment VARCHAR(300),
     224    rating NUMERIC NOT NULL,
     225    last_mod_date TIMESTAMP NOT NULL
     226);
     227
     228-- Table 19
     229-- Create CHANGE table
     230CREATE TABLE "change" (
     231    date_and_time TIMESTAMP NOT NULL,
     232    product_code VARCHAR(8) REFERENCES product(code)
     233        ON DELETE CASCADE,
     234    changes VARCHAR NOT NULL,
     235    PRIMARY KEY (date_and_time, product_code)
     236);
     237
     238-- Table 20
     239-- Create MAKES_CHANGE table
     240CREATE TABLE makes_change (
     241    personal_SSN VARCHAR(13) REFERENCES personal(ssn)
     242        ON DELETE CASCADE,
     243    change_date_time TIMESTAMP,
     244    product_code VARCHAR(8),
     245    PRIMARY KEY(personal_SSN, change_date_time, product_code),
     246    FOREIGN KEY (change_date_time, product_code) REFERENCES "change"(date_and_time, product_code)
     247        ON DELETE CASCADE
     248);
     249
     250-- Table 22
     251-- Create WORKS_IN_STORE table
     252CREATE TABLE works_in_store (
     253    personal_SSN VARCHAR(13) REFERENCES personal(ssn)
     254        ON DELETE CASCADE,
     255    store_ID VARCHAR(3) REFERENCES store(store_ID)
     256        ON DELETE CASCADE,
     257    PRIMARY KEY(personal_SSN, store_ID)
     258);
     259
     260-- Table 23
     261-- Create WORKED table
     262CREATE TABLE worked (
     263    personal_SSN VARCHAR(13) REFERENCES personal(ssn)
     264        ON DELETE CASCADE,                   
     265    report_date TIMESTAMP,
     266    store_ID VARCHAR(3),     
     267    wage NUMERIC NOT NULL CHECK (wage>=62),
     268    pay_method VARCHAR DEFAULT 'hourly',
     269    total_hours NUMERIC NOT NULL,
     270    week VARCHAR(23) NOT NULL,                       -- Format : 15.12.2025 - 21.12.2025
     271    PRIMARY KEY (personal_SSN, report_date, store_ID),
     272    FOREIGN KEY (report_date, store_ID) REFERENCES report(date, store_ID)
     273        ON DELETE CASCADE
     274);
     275
     276-- Table 24
     277-- Create SELLS table
     278CREATE TABLE sells (
     279    product_code VARCHAR(8) REFERENCES product(code)
     280        ON DELETE CASCADE,
     281    store_ID VARCHAR(3) REFERENCES store(store_ID)
     282        ON DELETE CASCADE,
     283    discount NUMERIC NOT NULL DEFAULT 0.0,
     284    PRIMARY KEY (product_code, store_ID)
     285);
     286
     287-- Table 25
     288-- Create INCLUDES table
     289CREATE TABLE includes (
     290    order_num VARCHAR(11) REFERENCES "order"(order_num)
     291        ON DELETE CASCADE,
     292    product_code VARCHAR(8) REFERENCES product(code)
     293        ON DELETE CASCADE,
     294    PRIMARY KEY (order_num, product_code)
     295);
     296
     297-- Table 26
     298-- Create APPROVES table
     299CREATE TABLE approves (
     300    boss_SSN VARCHAR(13) REFERENCES boss(boss_SSN)
     301        ON DELETE CASCADE,
     302    report_date TIMESTAMP,
     303    store_ID VARCHAR(3),
     304    owner_signature VARCHAR NOT NULL,
     305    PRIMARY KEY (boss_SSN, report_date, store_ID),
     306    FOREIGN KEY (report_date, store_ID) REFERENCES report(date, store_ID)
     307        ON DELETE CASCADE
     308);
     309
     310-- Table 27
     311-- Create EXCHANGES_DATA table
     312CREATE TABLE exchanges_data (
     313    report_date TIMESTAMP NOT NULL,
     314    store_ID VARCHAR(3) NOT NULL REFERENCES store(store_ID)
     315        ON DELETE CASCADE,
     316    monthly_profit NUMERIC NOT NULL DEFAULT 0.0,
     317    date TIMESTAMP NOT NULL,
     318    sales NUMERIC NOT NULL,                                          -- Total profit achieved in sales (not "sells")                   
     319    damages NUMERIC NOT NULL DEFAULT 0.0 CHECK (damages>=0),         -- Total loss in damages/refunds
     320    FOREIGN KEY (report_date, store_ID) REFERENCES report(date, store_ID)
     321        ON DELETE CASCADE,
     322    PRIMARY KEY (report_date, store_ID)
     323);
     324
     325-- Table 28
     326-- Create REFUND table
     327CREATE TABLE refund (
     328    refund_id SERIAL PRIMARY KEY,
     329    order_num VARCHAR(11) REFERENCES "order"(order_num)
     330        ON DELETE CASCADE,
     331    amount DECIMAL(10,2) NOT NULL CHECK(amount > 0.0),
     332    reason VARCHAR(200),
     333    status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending', 'approved', 'rejected', 'processed'))
     334);
     335
     336
     337
     338}}}