-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAppSchema.sql
68 lines (61 loc) · 2.04 KB
/
AppSchema.sql
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
DROP TABLE administrator;
DROP TABLE review;
DROP TABLE transaction;
DROP TABLE booking;
DROP TABLE property;
DROP TABLE users;
CREATE TABLE IF NOT EXISTS users (
user_id INTEGER PRIMARY KEY,
password_hash VARCHAR(255) NOT NULL,
session_cookies VARCHAR(256)
user_name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
phone_number VARCHAR(20) UNIQUE NOT NULL,
gender VARCHAR(6) CHECK(gender = 'male' or gender = 'female'),
age INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS property (
property_id INTEGER PRIMARY KEY,
owner_id INTEGER REFERENCES users(user_id),
start_date DATE NOT NULL,
end_date DATE NOT NULL,
address VARCHAR(255) NOT NULL,
property_type VARCHAR(255) NOT NULL,
num_rooms INTEGER NOT NULL,
availability VARCHAR(3) CHECK(availability = 'yes' OR availability = 'no'),
room_rate INTEGER NOT NULL,
CHECK (end_date > start_date)
);
CREATE TABLE IF NOT EXISTS review (
review_id INTEGER PRIMARY KEY,
reviewer_id INTEGER REFERENCES users (user_id),
property_id INTEGER REFERENCES property (property_id),
rating INTEGER NOT NULL,
review TEXT,
review_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS booking (
booking_id INTEGER PRIMARY KEY,
property_id INTEGER REFERENCES property (property_id),
student_id INTEGER REFERENCES users (user_id),
start_date DATE NOT NULL,
end_date DATE NOT NULL,
booking_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(16) CHECK(status = 'processing' OR status = 'confirmed'),
CHECK (end_date > start_date)
);
CREATE TABLE IF NOT EXISTS transaction (
transaction_id INTEGER PRIMARY KEY,
booking_id INTEGER REFERENCES booking (booking_id),
amount DECIMAL(10, 2) NOT NULL,
status VARCHAR CHECK(status = 'processing' OR status = 'paid'),
datetime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS administrator (
user_id INTEGER,
password_hash VARCHAR(256),
session_cookies VARCHAR(256)
permissions TEXT,
PRIMARY KEY(user_id),
FOREIGN KEY(user_id) REFERENCES users (user_id)
);