-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCreateTable.sql
More file actions
122 lines (111 loc) · 3.31 KB
/
CreateTable.sql
File metadata and controls
122 lines (111 loc) · 3.31 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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
use jopking;
DROP TABLE IF EXISTS category, product, customer, cart, employee, cart_item, orders, order_item, price_history, stock_history;
DROP TABLE IF EXISTS category;
CREATE TABLE category(
name VARCHAR(32) PRIMARY KEY,
description VARCHAR(256)
);
DROP TABLE IF EXISTS product;
CREATE TABLE product(
p_id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL,
description VARCHAR(256),
price NUMERIC(10,2) NOT NULL,
stock INT NOT NULL,
adv_thres INT,
image VARCHAR(256),
discontinued BOOL,
cat_name VARCHAR(32),
FOREIGN KEY (cat_name) REFERENCES category(name)
ON UPDATE CASCADE
ON DELETE SET NULL
);
DROP TABLE IF EXISTS customer;
CREATE TABLE customer(
c_id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(32) NOT NULL,
last_name VARCHAR(32) NOT NULL,
email VARCHAR(32) NOT NULL,
username VARCHAR(32) NOT NULL,
password BINARY(64),
address VARCHAR(128) NOT NULL
);
DROP TABLE IF EXISTS cart;
CREATE TABLE cart(
c_id INT PRIMARY KEY,
subtotal NUMERIC(10,2) DEFAULT 0.00,
FOREIGN KEY (c_id) REFERENCES customer(c_id)
);
DROP TABLE IF EXISTS employee;
CREATE TABLE employee(
e_id INT PRIMARY KEY,
email VARCHAR(32) NOT NULL,
username VARCHAR(32) NOT NULL,
password BINARY(64) NOT NULL
);
DROP TABLE IF EXISTS cart_item;
CREATE TABLE cart_item(
p_id INT NOT NULL,
c_id INT NOT NULL,
quantity INT NOT NULL DEFAULT 0,
PRIMARY KEY (p_id, c_id),
FOREIGN KEY (p_id) REFERENCES product(p_id)
ON UPDATE CASCADE,
FOREIGN KEY (c_id) REFERENCES cart(c_id)
ON UPDATE CASCADE
);
DROP TABLE IF EXISTS orders;
CREATE TABLE orders(
o_id INT AUTO_INCREMENT PRIMARY KEY,
c_id INT NOT NULL,
date TIMESTAMP NOT NULL DEFAULT NOW(),
status ENUM("PLACED", "SHIPPED", "CLOSED") DEFAULT "PLACED",
total NUMERIC(14,2) DEFAULT 0.00,
FOREIGN KEY (c_id) REFERENCES customer(c_id)
);
DROP TABLE IF EXISTS order_item;
CREATE TABLE order_item(
p_id INT NOT NULL,
o_id INT NOT NULL,
quantity INT NOT NULL DEFAULT 0,
price NUMERIC(10,2) DEFAULT 0.00,
PRIMARY KEY (p_id, o_id),
FOREIGN KEY (p_id) REFERENCES product(p_id)
ON UPDATE CASCADE,
FOREIGN KEY (o_id) REFERENCES orders(o_id)
ON UPDATE CASCADE
);
DROP TABLE IF EXISTS price_history;
CREATE TABLE price_history(
p_id INT NOT NULL,
time TIMESTAMP NOT NULL,
price_before NUMERIC(10,2) DEFAULT 0.00,
price_after NUMERIC(10,2) DEFAULT 0.00,
operation ENUM('INSERT', 'UPDATE', 'DELETE'),
e_id INT,
PRIMARY KEY (p_id, time),
FOREIGN KEY (p_id) REFERENCES product(p_id)
ON UPDATE CASCADE,
FOREIGN KEY (e_id) REFERENCES employee(e_id)
ON UPDATE CASCADE
);
DROP TABLE IF EXISTS stock_history;
CREATE TABLE stock_history(
p_id INT NOT NULL,
time TIMESTAMP NOT NULL,
stock_before INT DEFAULT 0,
stock_after INT DEFAULT 0,
operation ENUM('INSERT', 'UPDATE', 'DELETE'),
o_id INT DEFAULT NULL,
c_id INT DEFAULT NULL,
e_id INT DEFAULT NULL,
PRIMARY KEY (p_id, time),
FOREIGN KEY (p_id) REFERENCES product(p_id)
ON UPDATE CASCADE,
FOREIGN KEY (o_id) REFERENCES orders(o_id)
ON UPDATE CASCADE,
FOREIGN KEY (e_id) REFERENCES employee(e_id)
ON UPDATE CASCADE,
FOREIGN KEY (c_id) REFERENCES customer(c_id)
ON UPDATE CASCADE
);