-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdb_schema.sql
More file actions
54 lines (49 loc) · 1.75 KB
/
db_schema.sql
File metadata and controls
54 lines (49 loc) · 1.75 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
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE accounts (
username VARCHAR(64) NOT NULL,
password VARCHAR(64) NOT NULL,
enabled TINYINT(1) NOT NULL DEFAULT 1,
email VARCHAR(128) NOT NULL UNIQUE,
first_name VARCHAR(128) NOT NULL,
last_name VARCHAR(128) NOT NULL,
city VARCHAR(128) NOT NULL,
postcode VARCHAR(32) NOT NULL,
street VARCHAR(128) NOT NULL,
home_no VARCHAR(32) NOT NULL,
phone_no VARCHAR(32) NOT NULL,
PRIMARY KEY (username)
);
CREATE TABLE user_roles (
username VARCHAR(64) NOT NULL,
role VARCHAR(64) NOT NULL,
FOREIGN KEY (username) REFERENCES accounts (username) ON UPDATE CASCADE,
PRIMARY KEY (username,role)
);
CREATE TABLE products (
product_id VARCHAR(128) NOT NULL,
product_name VARCHAR(128) NOT NULL UNIQUE,
price DECIMAL(13,4) NOT NULL,
tax_amount DECIMAL(8,2) NOT NULL,
active TINYINT(1) NOT NULL DEFAULT 1,
image_name VARCHAR(255),
PRIMARY KEY (product_id)
);
CREATE TABLE orders (
order_id VARCHAR(128) NOT NULL,
username VARCHAR(64) NOT NULL,
created DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
state TINYINT(1) NOT NULL DEFAULT 0,
FOREIGN KEY (username) REFERENCES accounts (username) ON UPDATE CASCADE,
PRIMARY KEY (order_id)
);
CREATE TABLE order_items (
product_id VARCHAR(128) NOT NULL,
quantity INTEGER NOT NULL,
sold_price DECIMAL(13,4) NOT NULL, # price given at the time of making order
sold_tax DECIMAL(8,2) NOT NULL, # same as above with tax amount
order_id VARCHAR(128) NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders (order_id) ON UPDATE CASCADE,
FOREIGN KEY (product_id) REFERENCES products (product_id) ON UPDATE CASCADE,
PRIMARY KEY (product_id,order_id)
);