-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathteam1-schema.sql
175 lines (134 loc) · 4.23 KB
/
team1-schema.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
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
DROP DATABASE IF EXISTS team1;
CREATE DATABASE IF NOT EXISTS team1;
USE team1;
DROP TABLE IF EXISTS address;
CREATE TABLE IF NOT EXISTS address (
address_id INTEGER PRIMARY KEY AUTO_INCREMENT,
street_no INTEGER,
street_name VARCHAR(50) NOT NULL,
city VARCHAR(50) NOT NULL,
state VARCHAR(20),
country VARCHAR(50) NOT NULL,
zip VARCHAR(10) NOT NULL
);
DROP TABLE IF EXISTS user;
CREATE TABLE IF NOT EXISTS user (
username VARCHAR(30) PRIMARY KEY,
password VARCHAR(64) NOT NULL,
email VARCHAR(255) NOT NULL,
is_admin BOOLEAN NOT NULL,
first_name VARCHAR(35) NOT NULL,
last_name VARCHAR(35) NOT NULL,
address_id INTEGER NOT NULL,
suspended BOOLEAN NOT NULL,
FOREIGN KEY (address_id) REFERENCES address(address_id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
DROP TABLE IF EXISTS creditcard;
CREATE TABLE IF NOT EXISTS creditcard (
creditcard_id INTEGER PRIMARY KEY AUTO_INCREMENT,
card_number CHAR(16),
username VARCHAR(30) NOT NULL,
first_name VARCHAR(35),
last_name VARCHAR(35),
exp_month INTEGER NOT NULL,
exp_year INTEGER NOT NULL,
address_id INTEGER NOT NULL,
FOREIGN KEY (username) REFERENCES user(username)
ON DELETE CASCADE,
FOREIGN KEY (address_id) REFERENCES address(address_id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
DROP TABLE IF EXISTS attraction;
CREATE TABLE IF NOT EXISTS attraction (
attraction_name VARCHAR(100) PRIMARY KEY,
description TEXT, # Not all attractions need a description, so no NOT NULL
nearest_transport TEXT, # Assumes this is stored as a string (e.g. Gare du Nord)
address_id INTEGER NOT NULL,
FOREIGN KEY (address_id) REFERENCES address(address_id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
DROP TABLE IF EXISTS trip;
CREATE TABLE IF NOT EXISTS trip (
trip_id INTEGER PRIMARY KEY AUTO_INCREMENT,
is_booked BOOLEAN NOT NULL,
trip_start_date DATE NOT NULL,
trip_end_date DATE NOT NULL,
creditcard_id INTEGER,
username VARCHAR(30) NOT NULL,
FOREIGN KEY (creditcard_id) REFERENCES creditcard(creditcard_id)
ON UPDATE CASCADE,
FOREIGN KEY (username) REFERENCES user(username)
ON DELETE CASCADE
);
DROP TABLE IF EXISTS activity;
CREATE TABLE IF NOT EXISTS activity (
activity_id INTEGER PRIMARY KEY AUTO_INCREMENT,
activity_name VARCHAR(100) NOT NULL,
activity_start_time TIME NOT NULL,
activity_end_time TIME NOT NULL,
activity_date DATE NOT NULL,
attraction_name VARCHAR(100) NOT NULL,
username VARCHAR(30) NOT NULL,
trip_id INTEGER NOT NULL,
cost DOUBLE PRECISION NOT NULL,
FOREIGN KEY (trip_id) REFERENCES trip(trip_id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (attraction_name) REFERENCES attraction(attraction_name)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (username) REFERENCES user(username)
ON DELETE CASCADE
);
DROP TABLE IF EXISTS hour;
CREATE TABLE IF NOT EXISTS hour (
attraction_name VARCHAR(100),
hour_start_time TIME,
hour_end_time TIME,
day VARCHAR(10),
PRIMARY KEY (attraction_name, hour_start_time, hour_end_time, day),
FOREIGN KEY (attraction_name) REFERENCES attraction(attraction_name)
ON DELETE CASCADE
ON UPDATE CASCADE
);
DROP TABLE IF EXISTS timeslot;
CREATE TABLE IF NOT EXISTS timeslot (
timeslot_id INTEGER PRIMARY KEY AUTO_INCREMENT,
timeslot_start_time TIME,
timeslot_end_time TIME,
timeslot_num_people INTEGER,
attraction_name VARCHAR(100),
FOREIGN KEY (attraction_name) REFERENCES attraction(attraction_name)
ON DELETE CASCADE
ON UPDATE CASCADE
);
DROP TABLE IF EXISTS review;
CREATE TABLE IF NOT EXISTS review (
review_id INTEGER PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
authored_date DATE NOT NULL,
body TEXT NOT NULL,
username VARCHAR(30) NOT NULL, # This is also the author of the review
attraction_name VARCHAR(100) NOT NULL,
FOREIGN KEY (username) REFERENCES user(username)
ON DELETE CASCADE,
FOREIGN KEY (attraction_name) REFERENCES attraction(attraction_name)
ON DELETE CASCADE
ON UPDATE CASCADE
);
DROP TABLE IF EXISTS reserves;
CREATE TABLE IF NOT EXISTS reserves (
reservation_id INTEGER PRIMARY KEY AUTO_INCREMENT,
reserves_num_people INTEGER NOT NULL,
timeslot_id INTEGER,
username VARCHAR(30) NOT NULL,
FOREIGN KEY (username) REFERENCES user(username)
ON DELETE CASCADE,
FOREIGN KEY (timeslot_id) REFERENCES timeslot(timeslot_id)
ON DELETE CASCADE
ON UPDATE CASCADE
);