-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCompletedDDL.sql
More file actions
307 lines (268 loc) · 11.2 KB
/
CompletedDDL.sql
File metadata and controls
307 lines (268 loc) · 11.2 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
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
SET FOREIGN_KEY_CHECKS=0;
SET AUTOCOMMIT = 0;
DROP TABLE IF EXISTS CartItems;
DROP TABLE IF EXISTS Carts;
DROP TABLE IF EXISTS GenreItems;
DROP TABLE IF EXISTS Genres;
DROP TABLE IF EXISTS PurchaseItems;
DROP TABLE IF EXISTS Purchases;
DROP TABLE IF EXISTS LibraryItems;
DROP TABLE IF EXISTS Libraries;
DROP TABLE IF EXISTS GamePlatforms;
DROP TABLE IF EXISTS Games;
DROP TABLE IF EXISTS Ratings;
DROP TABLE IF EXISTS Publishers;
DROP TABLE IF EXISTS Platforms;
DROP TABLE IF EXISTS Customers;
--============================
-- Schema Definitions
--============================
CREATE TABLE Customers (
customerID INT AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
phoneNumber CHAR(10),
dateCreated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (customerID)
);
CREATE TABLE Platforms (
platformID INT AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL UNIQUE,
PRIMARY KEY (platformID)
);
CREATE TABLE Publishers (
publisherID INT AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL UNIQUE,
PRIMARY KEY (publisherID)
);
CREATE TABLE Ratings (
ratingID INT AUTO_INCREMENT NOT NULL,
name VARCHAR(50) NOT NULL UNIQUE,
minimumAge TINYINT UNSIGNED NOT NULL,
PRIMARY KEY (ratingID)
);
CREATE TABLE Games (
gameID INT AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL,
ratingID INT NOT NULL,
releaseDate DATE NOT NULL,
publisherID INT NOT NULL,
PRIMARY KEY (gameID),
FOREIGN KEY (publisherID) REFERENCES Publishers(publisherID) ON DELETE RESTRICT,
FOREIGN KEY (ratingID) REFERENCES Ratings(ratingID) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE GamePlatforms (
gameID INT NOT NULL,
platformID INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
PRIMARY KEY (gameID, platformID),
FOREIGN KEY (gameID) REFERENCES Games(gameID) ON DELETE CASCADE,
FOREIGN KEY (platformID) REFERENCES Platforms(platformID) ON DELETE CASCADE
);
CREATE TABLE Libraries (
libraryID INT AUTO_INCREMENT,
customerID INT UNIQUE,
PRIMARY KEY (libraryID),
FOREIGN KEY (customerID) REFERENCES Customers(customerID) ON DELETE CASCADE
);
CREATE TABLE LibraryItems (
libraryID INT NOT NULL,
gameID INT NOT NULL,
PRIMARY KEY (libraryID, gameID),
FOREIGN KEY (libraryID) REFERENCES Libraries(libraryID) ON DELETE CASCADE,
FOREIGN KEY (gameID) REFERENCES Games(gameID) ON DELETE CASCADE
);
CREATE TABLE Purchases (
purchaseID INT AUTO_INCREMENT NOT NULL,
customerID INT,
purchaseDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
paid BOOL NOT NULL,
PRIMARY KEY (purchaseID),
FOREIGN KEY (customerID) REFERENCES Customers(customerID) ON DELETE SET NULL
);
CREATE TABLE PurchaseItems (
purchaseID INT NOT NULL,
gameID INT NOT NULL,
platformID INT NOT NULL,
totalPaid DECIMAL(19,2) NOT NULL,
PRIMARY KEY (purchaseID, gameID, platformID),
FOREIGN KEY (purchaseID) REFERENCES Purchases(purchaseID) ON DELETE CASCADE,
FOREIGN KEY (gameID) REFERENCES Games(gameID) ON DELETE CASCADE,
FOREIGN KEY (platformID) REFERENCES Platforms(platformID) ON DELETE RESTRICT
);
CREATE TABLE Genres (
genreID INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (genreID)
);
CREATE TABLE GenreItems (
gameID INT NOT NULL,
genreID INT NOT NULL,
PRIMARY KEY (gameID, genreID),
FOREIGN KEY (gameID) REFERENCES Games(gameID) ON DELETE CASCADE,
FOREIGN KEY (genreID) REFERENCES Genres(genreID) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE Carts (
cartID INT AUTO_INCREMENT NOT NULL,
customerID INT NOT NULL UNIQUE,
createdAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (cartID),
FOREIGN KEY (customerID) REFERENCES Customers(customerID) ON DELETE CASCADE
);
CREATE TABLE CartItems (
cartID INT NOT NULL,
gameID INT NOT NULL,
platformID INT NOT NULL,
PRIMARY KEY (cartID, gameID, platformID),
FOREIGN KEY (cartID) REFERENCES Carts(cartID) ON DELETE CASCADE,
FOREIGN KEY (gameID) REFERENCES Games(gameID) ON DELETE CASCADE,
FOREIGN KEY (platformID) REFERENCES Platforms(platformID) ON DELETE CASCADE
);
--============================
-- Sample Data
--============================
INSERT INTO Ratings (name, minimumAge) VALUES
('Mature 17+', 17),
('Teen', 13),
('Everyone', 0);
INSERT INTO Publishers (name) VALUES
('SEGA'),
('Epic Games'),
('FromSoftware');
INSERT INTO Platforms (name) VALUES
('PC'),
('PlayStation 5'),
('Xbox Series X');
INSERT INTO Genres (name) VALUES
('Horror'),
('Sci-Fi'),
('Shooter'),
('RPG');
INSERT INTO Games (name, ratingID, releaseDate, publisherID) VALUES
(
'Alien: Isolation',
(SELECT ratingID FROM Ratings WHERE name = 'Mature 17+'),
'2014-10-07',
(SELECT publisherID FROM Publishers WHERE name = 'SEGA')
),
(
'Fortnite',
(SELECT ratingID FROM Ratings WHERE name = 'Teen'),
'2017-07-25',
(SELECT publisherID FROM Publishers WHERE name = 'Epic Games')
),
(
'Elden Ring',
(SELECT ratingID FROM Ratings WHERE name = 'Mature 17+'),
'2022-02-25',
(SELECT publisherID FROM Publishers WHERE name = 'FromSoftware')
);
INSERT INTO GenreItems (gameID, genreID) VALUES
((SELECT gameID FROM Games WHERE name = 'Alien: Isolation'), (SELECT genreID FROM Genres WHERE name = 'Horror')),
((SELECT gameID FROM Games WHERE name = 'Alien: Isolation'), (SELECT genreID FROM Genres WHERE name = 'Sci-Fi')),
((SELECT gameID FROM Games WHERE name = 'Alien: Isolation'), (SELECT genreID FROM Genres WHERE name = 'Shooter')),
((SELECT gameID FROM Games WHERE name = 'Fortnite'), (SELECT genreID FROM Genres WHERE name = 'Shooter')),
((SELECT gameID FROM Games WHERE name = 'Fortnite'), (SELECT genreID FROM Genres WHERE name = 'RPG')),
((SELECT gameID FROM Games WHERE name = 'Elden Ring'), (SELECT genreID FROM Genres WHERE name = 'RPG'));
INSERT INTO GamePlatforms (gameID, platformID, price) VALUES
((SELECT gameID FROM Games WHERE name = 'Alien: Isolation'), (SELECT platformID FROM Platforms WHERE name = 'PC'), 29.99),
((SELECT gameID FROM Games WHERE name = 'Alien: Isolation'), (SELECT platformID FROM Platforms WHERE name = 'PlayStation 5'), 34.99),
((SELECT gameID FROM Games WHERE name = 'Fortnite'), (SELECT platformID FROM Platforms WHERE name = 'PC'), 0.00),
((SELECT gameID FROM Games WHERE name = 'Fortnite'), (SELECT platformID FROM Platforms WHERE name = 'Xbox Series X'), 0.00),
((SELECT gameID FROM Games WHERE name = 'Elden Ring'), (SELECT platformID FROM Platforms WHERE name = 'PC'), 59.99),
((SELECT gameID FROM Games WHERE name = 'Elden Ring'), (SELECT platformID FROM Platforms WHERE name = 'PlayStation 5'), 69.99);
INSERT INTO Customers (name, email, phoneNumber) VALUES
('Amanda Ripley', 'amanda.ripley@example.com', '5551234567'),
('John Doe', 'john.doe@example.com', '5559876543'),
('Sarah Connor', 'sarah.connor@example.com', '5551112222'),
('Master Chief', 'chief@unsc.mil', '5553334444'),
('Lara Croft', 'lara.croft@example.com', '5555556666');
INSERT INTO Libraries (customerID) VALUES
((SELECT customerID FROM Customers WHERE email = 'amanda.ripley@example.com')),
((SELECT customerID FROM Customers WHERE email = 'john.doe@example.com')),
((SELECT customerID FROM Customers WHERE email = 'sarah.connor@example.com')),
((SELECT customerID FROM Customers WHERE email = 'chief@unsc.mil')),
((SELECT customerID FROM Customers WHERE email = 'lara.croft@example.com'));
INSERT INTO LibraryItems (libraryID, gameID) VALUES
(
(SELECT libraryID FROM Libraries WHERE customerID = (SELECT customerID FROM Customers WHERE email = 'amanda.ripley@example.com')),
(SELECT gameID FROM Games WHERE name = 'Alien: Isolation')
),
(
(SELECT libraryID FROM Libraries WHERE customerID = (SELECT customerID FROM Customers WHERE email = 'john.doe@example.com')),
(SELECT gameID FROM Games WHERE name = 'Fortnite')
),
(
(SELECT libraryID FROM Libraries WHERE customerID = (SELECT customerID FROM Customers WHERE email = 'john.doe@example.com')),
(SELECT gameID FROM Games WHERE name = 'Elden Ring')
),
(
(SELECT libraryID FROM Libraries WHERE customerID = (SELECT customerID FROM Customers WHERE email = 'chief@unsc.mil')),
(SELECT gameID FROM Games WHERE name = 'Alien: Isolation')
);
INSERT INTO Carts (customerID) VALUES
((SELECT customerID FROM Customers WHERE email = 'amanda.ripley@example.com')),
((SELECT customerID FROM Customers WHERE email = 'john.doe@example.com')),
((SELECT customerID FROM Customers WHERE email = 'sarah.connor@example.com')),
((SELECT customerID FROM Customers WHERE email = 'chief@unsc.mil')),
((SELECT customerID FROM Customers WHERE email = 'lara.croft@example.com'));
INSERT INTO CartItems (cartID, gameID, platformID) VALUES
(
(SELECT cartID FROM Carts WHERE customerID = (SELECT customerID FROM Customers WHERE email = 'amanda.ripley@example.com')),
(SELECT gameID FROM Games WHERE name = 'Alien: Isolation'),
(SELECT platformID FROM Platforms WHERE name = 'PC')
),
(
(SELECT cartID FROM Carts WHERE customerID = (SELECT customerID FROM Customers WHERE email = 'john.doe@example.com')),
(SELECT gameID FROM Games WHERE name = 'Elden Ring'),
(SELECT platformID FROM Platforms WHERE name = 'PlayStation 5')
),
(
(SELECT cartID FROM Carts WHERE customerID = (SELECT customerID FROM Customers WHERE email = 'sarah.connor@example.com')),
(SELECT gameID FROM Games WHERE name = 'Elden Ring'),
(SELECT platformID FROM Platforms WHERE name = 'PC')
),
(
(SELECT cartID FROM Carts WHERE customerID = (SELECT customerID FROM Customers WHERE email = 'sarah.connor@example.com')),
(SELECT gameID FROM Games WHERE name = 'Fortnite'),
(SELECT platformID FROM Platforms WHERE name = 'PC')
),
(
(SELECT cartID FROM Carts WHERE customerID = (SELECT customerID FROM Customers WHERE email = 'chief@unsc.mil')),
(SELECT gameID FROM Games WHERE name = 'Alien: Isolation'),
(SELECT platformID FROM Platforms WHERE name = 'PlayStation 5')
),
(
(SELECT cartID FROM Carts WHERE customerID = (SELECT customerID FROM Customers WHERE email = 'lara.croft@example.com')),
(SELECT gameID FROM Games WHERE name = 'Elden Ring'),
(SELECT platformID FROM Platforms WHERE name = 'PlayStation 5')
);
INSERT INTO Purchases (customerID, purchaseDate, paid) VALUES
(
(SELECT customerID FROM Customers WHERE email = 'amanda.ripley@example.com'),
'2024-12-30 14:30:00',
TRUE
),
(
(SELECT customerID FROM Customers WHERE email = 'john.doe@example.com'),
'2025-01-05 09:15:00',
TRUE
),
(
(SELECT customerID FROM Customers WHERE email = 'sarah.connor@example.com'),
'2025-01-06 16:45:00',
FALSE
),
(
(SELECT customerID FROM Customers WHERE email = 'chief@unsc.mil'),
'2024-12-15 11:20:00',
TRUE
);
INSERT INTO PurchaseItems (purchaseID, gameID, platformID, totalPaid) VALUES
(1, (SELECT gameID FROM Games WHERE name = 'Alien: Isolation'), (SELECT platformID FROM Platforms WHERE name = 'PC'), 29.99),
(2, (SELECT gameID FROM Games WHERE name = 'Fortnite'), (SELECT platformID FROM Platforms WHERE name = 'PC'), 0.00),
(2, (SELECT gameID FROM Games WHERE name = 'Elden Ring'), (SELECT platformID FROM Platforms WHERE name = 'PlayStation 5'), 69.99),
(3, (SELECT gameID FROM Games WHERE name = 'Elden Ring'), (SELECT platformID FROM Platforms WHERE name = 'PC'), 59.99),
(4, (SELECT gameID FROM Games WHERE name = 'Alien: Isolation'), (SELECT platformID FROM Platforms WHERE name = 'PlayStation 5'), 34.99);
SET FOREIGN_KEY_CHECKS=1;
COMMIT;