-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsetupMain.sql
More file actions
81 lines (70 loc) · 2.62 KB
/
Copy pathsetupMain.sql
File metadata and controls
81 lines (70 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
DROP TABLE IF EXISTS payment CASCADE;
DROP TABLE IF EXISTS order_item CASCADE;
DROP TABLE IF EXISTS "order" CASCADE;
DROP TABLE IF EXISTS product CASCADE;
DROP TABLE IF EXISTS category CASCADE;
DROP TABLE IF EXISTS brand CASCADE;
DROP TABLE IF EXISTS "user" CASCADE;
CREATE TABLE brand (
brand_id SERIAL PRIMARY KEY,
brand_name VARCHAR(100) NOT NULL UNIQUE,
description TEXT
);
CREATE TABLE category (
category_id SERIAL PRIMARY KEY,
category_name VARCHAR(100) NOT NULL UNIQUE,
description TEXT
);
CREATE TABLE "user" (
user_id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
first_name VARCHAR(50),
last_name VARCHAR(50),
street VARCHAR(255),
city VARCHAR(100),
postal_code VARCHAR(20),
phone_number VARCHAR(20),
date_of_birth DATE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Create Product table
CREATE TABLE product (
product_id SERIAL PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
description TEXT,
price NUMERIC(10,2) NOT NULL CHECK (price > 0),
stock_quantity INT NOT NULL CHECK (stock_quantity >= 0),
category_id INT NOT NULL REFERENCES category(category_id),
brand_id INT NOT NULL REFERENCES brand(brand_id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE "order" (
order_id SERIAL PRIMARY KEY,
user_id INT NOT NULL REFERENCES "user"(user_id),
order_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
total_amount NUMERIC(10,2) NOT NULL CHECK (total_amount >= 0),
status VARCHAR(50) NOT NULL DEFAULT 'PENDING'
CHECK (status IN ('PENDING', 'PROCESSING', 'SHIPPED', 'DELIVERED', 'CANCELLED')),
shipping_address VARCHAR(255),
billing_address VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE order_item (
order_item_id SERIAL PRIMARY KEY,
order_id INT NOT NULL REFERENCES "order"(order_id) ON DELETE CASCADE,
product_id INT NOT NULL REFERENCES product(product_id),
quantity INT NOT NULL CHECK (quantity > 0),
unit_price NUMERIC(10,2) NOT NULL CHECK (unit_price > 0)
);
CREATE TABLE payment (
payment_id SERIAL PRIMARY KEY,
order_id INT NOT NULL UNIQUE REFERENCES "order"(order_id),
payment_method VARCHAR(50) NOT NULL,
amount NUMERIC(10,2) NOT NULL CHECK (amount > 0),
payment_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(50) NOT NULL DEFAULT 'PENDING'
CHECK (status IN ('PENDING', 'COMPLETED', 'FAILED', 'REFUNDED')),
transaction_id VARCHAR(255) UNIQUE NOT NULL
);