DatabaseCreation: ddl.sql

File ddl.sql, 14.6 KB (added by 231091, 5 hours ago)
Line 
1DROP TABLE IF EXISTS Ticket CASCADE;
2DROP TABLE IF EXISTS Seat CASCADE;
3DROP TABLE IF EXISTS Player_contract CASCADE;
4DROP TABLE IF EXISTS Player_valuation CASCADE;
5DROP TABLE IF EXISTS Transfer CASCADE;
6DROP TABLE IF EXISTS Transfer_type CASCADE;
7DROP TABLE IF EXISTS Sponsor_deal CASCADE;
8DROP TABLE IF EXISTS Sponsor CASCADE;
9DROP TABLE IF EXISTS Admin CASCADE;
10DROP TABLE IF EXISTS Coach_assignment CASCADE;
11DROP TABLE IF EXISTS Coach CASCADE;
12DROP TABLE IF EXISTS Event_attribute CASCADE;
13DROP TABLE IF EXISTS Event CASCADE;
14DROP TABLE IF EXISTS Event_type CASCADE;
15DROP TABLE IF EXISTS Lineup CASCADE;
16DROP TABLE IF EXISTS Player CASCADE;
17DROP TABLE IF EXISTS Match_odds CASCADE;
18DROP TABLE IF EXISTS Referee_match CASCADE;
19DROP TABLE IF EXISTS Match CASCADE;
20DROP TABLE IF EXISTS Stadium CASCADE;
21DROP TABLE IF EXISTS Referee CASCADE;
22DROP TABLE IF EXISTS Team_alias CASCADE;
23DROP TABLE IF EXISTS Team CASCADE;
24DROP TABLE IF EXISTS Season CASCADE;
25DROP TABLE IF EXISTS Division CASCADE;
26
27CREATE TABLE Division (
28 division_id SERIAL NOT NULL,
29 name varchar(100) NOT NULL,
30 country varchar(100),
31 PRIMARY KEY (division_id)
32);
33
34CREATE TABLE Season (
35 season_id SERIAL NOT NULL,
36 division_id INT NOT NULL,
37 season_name varchar(20) NOT NULL,
38 PRIMARY KEY (season_id),
39 CONSTRAINT uq_season_division_name UNIQUE (division_id, season_name)
40);
41
42CREATE TABLE Team (
43 team_id SERIAL NOT NULL,
44 name varchar(100) NOT NULL,
45 country varchar(100),
46 PRIMARY KEY (team_id)
47);
48
49CREATE TABLE Team_alias (
50 alias_id SERIAL NOT NULL,
51 team_id INT NOT NULL,
52 alias_name varchar(100) NOT NULL,
53 PRIMARY KEY (alias_id),
54 CONSTRAINT uq_team_alias UNIQUE (team_id, alias_name)
55);
56
57CREATE TABLE Referee (
58 referee_id SERIAL NOT NULL,
59 name varchar(100) NOT NULL,
60 country varchar(100),
61 date_of_birth date,
62 PRIMARY KEY (referee_id),
63 CONSTRAINT chk_referee_dob_past CHECK (
64 date_of_birth IS NULL
65 OR date_of_birth <= CURRENT_DATE
66 )
67);
68
69CREATE TABLE Stadium (
70 stadium_id SERIAL NOT NULL,
71 name varchar(100) NOT NULL,
72 country varchar(100),
73 capacity INT NOT NULL,
74 year_built INT,
75 PRIMARY KEY (stadium_id),
76 CONSTRAINT chk_stadium_capacity CHECK (capacity > 0),
77 CONSTRAINT chk_stadium_year_built CHECK (
78 year_built IS NULL
79 OR year_built BETWEEN 1800
80 AND EXTRACT(
81 YEAR
82 FROM
83 CURRENT_DATE
84 ) :: INT
85 )
86);
87
88CREATE TABLE Match (
89 match_id SERIAL NOT NULL,
90 season_id INT NOT NULL,
91 home_team_id INT NOT NULL,
92 away_team_id INT NOT NULL,
93 stadium_id INT NOT NULL,
94 match_date date NOT NULL,
95 PRIMARY KEY (match_id),
96 CONSTRAINT chk_match_different_teams CHECK (home_team_id <> away_team_id),
97 CONSTRAINT chk_match_date_valid CHECK (
98 match_date BETWEEN DATE '1850-01-01'
99 AND (CURRENT_DATE + INTERVAL '2 years') :: date
100 )
101);
102
103CREATE TABLE Referee_match (
104 referee_match_id SERIAL NOT NULL,
105 referee_id INT NOT NULL,
106 match_id INT NOT NULL,
107 role varchar(50) NOT NULL,
108 PRIMARY KEY (referee_match_id),
109 CONSTRAINT uq_referee_match_role UNIQUE (referee_id, match_id, role),
110 CONSTRAINT chk_referee_match_role_not_blank CHECK (BTRIM(role) <> '')
111);
112
113CREATE TABLE Match_odds (
114 odds_id SERIAL NOT NULL,
115 match_id INT NOT NULL,
116 bookmaker varchar(100) NOT NULL,
117 home_win numeric(6, 2) NOT NULL,
118 draw numeric(6, 2) NOT NULL,
119 away_win numeric(6, 2) NOT NULL,
120 recorded_time timestamp NOT NULL,
121 PRIMARY KEY (odds_id),
122 CONSTRAINT uq_matchodds_unique UNIQUE (match_id, bookmaker, recorded_time),
123 CONSTRAINT chk_match_odds_positive CHECK (
124 home_win > 0
125 AND draw > 0
126 AND away_win > 0
127 )
128);
129
130CREATE TABLE Player (
131 player_id SERIAL NOT NULL,
132 name varchar(100) NOT NULL,
133 date_of_birth date,
134 PRIMARY KEY (player_id),
135 CONSTRAINT chk_player_dob_past CHECK (
136 date_of_birth IS NULL
137 OR date_of_birth <= CURRENT_DATE
138 )
139);
140
141CREATE TABLE Lineup (
142 lineup_id SERIAL NOT NULL,
143 match_id INT NOT NULL,
144 team_id INT NOT NULL,
145 player_id INT NOT NULL,
146 shirt_number INT NOT NULL,
147 position varchar(50) NOT NULL,
148 is_starter bool DEFAULT 'TRUE' NOT NULL,
149 PRIMARY KEY (lineup_id),
150 CONSTRAINT uq_lineup_player UNIQUE (match_id, player_id),
151 CONSTRAINT uq_lineup_shirt UNIQUE (match_id, team_id, shirt_number),
152 CONSTRAINT chk_lineup_shirt_number CHECK (shirt_number >= 1),
153 CONSTRAINT chk_lineup_position_not_blank CHECK (BTRIM(position) <> '')
154);
155
156CREATE TABLE Event_type (
157 event_type_id SERIAL NOT NULL,
158 type varchar(50) NOT NULL,
159 PRIMARY KEY (event_type_id),
160 CONSTRAINT uq_event_type UNIQUE (type),
161 CONSTRAINT chk_event_type_value CHECK (
162 type IN (
163 '50/50',
164 'Bad Behaviour',
165 'Ball Receipt*',
166 'Ball Recovery',
167 'Block',
168 'Camera On',
169 'Camera off',
170 'Carry',
171 'Clearance',
172 'Dispossessed',
173 'Dribble',
174 'Dribbled Past',
175 'Duel',
176 'Error',
177 'Foul Committed',
178 'Foul Won',
179 'Goal Keeper',
180 'Half End',
181 'Half Start',
182 'Injury Stoppage',
183 'Interception',
184 'Miscontrol',
185 'Offside',
186 'Own Goal Against',
187 'Own Goal For',
188 'Pass',
189 'Player Off',
190 'Player On',
191 'Pressure',
192 'Referee Ball-Drop',
193 'Shield',
194 'Shot',
195 'Starting XI',
196 'Substitution',
197 'Tactical Shift'
198 )
199 )
200);
201
202CREATE TABLE Event (
203 event_id SERIAL NOT NULL,
204 match_id INT NOT NULL,
205 team_id INT NOT NULL,
206 player_id INT NOT NULL,
207 event_type_id INT NOT NULL,
208 minute INT NOT NULL,
209 second INT NOT NULL,
210 PRIMARY KEY (event_id),
211 CONSTRAINT chk_event_minute CHECK (
212 minute BETWEEN 0
213 AND 130
214 ),
215 CONSTRAINT chk_event_second CHECK (
216 second BETWEEN 0
217 AND 59
218 )
219);
220
221CREATE TABLE Event_attribute (
222 attr_id SERIAL NOT NULL,
223 event_id INT NOT NULL,
224 attribute_name varchar(50) NOT NULL,
225 attribute_value text NOT NULL,
226 PRIMARY KEY (attr_id),
227 CONSTRAINT uq_event_attribute_name UNIQUE (event_id, attribute_name)
228);
229
230CREATE TABLE Coach (
231 coach_id SERIAL NOT NULL,
232 name varchar(100) NOT NULL,
233 nationality varchar(100),
234 PRIMARY KEY (coach_id)
235);
236
237CREATE TABLE Coach_assignment (
238 assignment_id SERIAL NOT NULL,
239 coach_id INT NOT NULL,
240 season_id INT NOT NULL,
241 team_id INT NOT NULL,
242 assignment_value numeric(15, 2) NOT NULL,
243 start_date date NOT NULL,
244 end_date date,
245 PRIMARY KEY (assignment_id),
246 CONSTRAINT chk_coachassign_value CHECK (assignment_value >= 0),
247 CONSTRAINT chk_coachassign_dates CHECK (
248 end_date IS NULL
249 OR end_date > start_date
250 )
251);
252
253CREATE TABLE Sponsor (
254 sponsor_id SERIAL NOT NULL,
255 company_name varchar(100) NOT NULL,
256 PRIMARY KEY (sponsor_id)
257);
258
259CREATE TABLE Admin (
260 admin_id SERIAL NOT NULL,
261 username varchar(100) NOT NULL,
262 email varchar(255) NOT NULL,
263 password varchar(255) NOT NULL,
264 PRIMARY KEY (admin_id),
265 CONSTRAINT uq_admin_username UNIQUE (username),
266 CONSTRAINT uq_admin_email UNIQUE (email),
267 CONSTRAINT chk_admin_username_not_blank CHECK (BTRIM(username) <> ''),
268 CONSTRAINT chk_admin_email_not_blank CHECK (BTRIM(email) <> ''),
269 CONSTRAINT chk_admin_password_not_blank CHECK (BTRIM(password) <> '')
270);
271
272CREATE TABLE Sponsor_deal (
273 deal_id SERIAL NOT NULL,
274 sponsor_id INT NOT NULL,
275 team_id INT NOT NULL,
276 season_id INT NOT NULL,
277 deal_value numeric(15, 2) NOT NULL,
278 start_date date NOT NULL,
279 end_date date,
280 PRIMARY KEY (deal_id),
281 CONSTRAINT chk_sponsordeal_value CHECK (deal_value >= 0),
282 CONSTRAINT chk_sponsordeal_dates CHECK (
283 end_date IS NULL
284 OR end_date > start_date
285 )
286);
287
288CREATE TABLE Transfer_type (
289 transfer_type_id SERIAL NOT NULL,
290 type varchar(50) NOT NULL,
291 PRIMARY KEY (transfer_type_id),
292 CONSTRAINT uq_transfer_type UNIQUE (type)
293);
294
295CREATE TABLE Transfer (
296 transfer_id SERIAL NOT NULL,
297 player_id INT NOT NULL,
298 from_team_id INT NOT NULL,
299 to_team_id INT NOT NULL,
300 transfer_date date NOT NULL,
301 fee numeric(15, 2) NOT NULL,
302 transfer_type_id INT NOT NULL,
303 PRIMARY KEY (transfer_id),
304 CONSTRAINT chk_transfer_fee CHECK (fee >= 0),
305 CONSTRAINT chk_transfer_diff_teams CHECK (from_team_id <> to_team_id)
306);
307
308CREATE TABLE Player_valuation (
309 valuation_id SERIAL NOT NULL,
310 player_id INT NOT NULL,
311 season_id INT NOT NULL,
312 market_value numeric(15, 2) NOT NULL,
313 valuation_date date NOT NULL,
314 PRIMARY KEY (valuation_id),
315 CONSTRAINT chk_player_valuation_nonnegative CHECK (market_value >= 0)
316);
317
318CREATE TABLE Player_contract (
319 contract_id SERIAL NOT NULL,
320 player_id INT NOT NULL,
321 team_id INT NOT NULL,
322 season_id INT NOT NULL,
323 contract_value numeric(15, 2) NOT NULL,
324 start_date date NOT NULL,
325 end_date date,
326 PRIMARY KEY (contract_id),
327 CONSTRAINT chk_playercon_value CHECK (contract_value >= 0),
328 CONSTRAINT chk_playercon_dates CHECK (
329 end_date IS NULL
330 OR end_date > start_date
331 )
332);
333
334CREATE TABLE Seat (
335 seat_id SERIAL NOT NULL,
336 stadium_id INT NOT NULL,
337 row INT NOT NULL,
338 number INT NOT NULL,
339 PRIMARY KEY (seat_id),
340 CONSTRAINT uq_seat_location UNIQUE (stadium_id, row, number),
341 CONSTRAINT chk_seat_row_positive CHECK (row > 0),
342 CONSTRAINT chk_seat_number_positive CHECK (number > 0)
343);
344
345CREATE TABLE Ticket (
346 ticket_id SERIAL NOT NULL,
347 seat_id INT NOT NULL,
348 match_id INT NOT NULL,
349 is_scanned bool DEFAULT 'FALSE' NOT NULL,
350 price numeric(10, 2) NOT NULL,
351 PRIMARY KEY (ticket_id),
352 CONSTRAINT uq_ticket_seat_match UNIQUE (seat_id, match_id),
353 CONSTRAINT chk_ticket_price CHECK (price >= 0)
354);
355
356ALTER TABLE
357 Season
358ADD
359 CONSTRAINT FKSeason510230 FOREIGN KEY (division_id) REFERENCES Division (division_id);
360
361ALTER TABLE
362 Team_alias
363ADD
364 CONSTRAINT FKTeam_alias310783 FOREIGN KEY (team_id) REFERENCES Team (team_id);
365
366ALTER TABLE
367 Match
368ADD
369 CONSTRAINT FKMatch844341 FOREIGN KEY (season_id) REFERENCES Season (season_id);
370
371ALTER TABLE
372 Match
373ADD
374 CONSTRAINT FKMatch520640 FOREIGN KEY (home_team_id) REFERENCES Team (team_id);
375
376ALTER TABLE
377 Match
378ADD
379 CONSTRAINT FKMatch958033 FOREIGN KEY (away_team_id) REFERENCES Team (team_id);
380
381ALTER TABLE
382 Match
383ADD
384 CONSTRAINT FKMatch891939 FOREIGN KEY (stadium_id) REFERENCES Stadium (stadium_id);
385
386ALTER TABLE
387 Referee_match
388ADD
389 CONSTRAINT FKReferee_ma282357 FOREIGN KEY (referee_id) REFERENCES Referee (referee_id);
390
391ALTER TABLE
392 Referee_match
393ADD
394 CONSTRAINT FKReferee_ma455430 FOREIGN KEY (match_id) REFERENCES Match (match_id);
395
396ALTER TABLE
397 Match_odds
398ADD
399 CONSTRAINT FKMatch_odds538100 FOREIGN KEY (match_id) REFERENCES Match (match_id);
400
401ALTER TABLE
402 Lineup
403ADD
404 CONSTRAINT FKLineup865480 FOREIGN KEY (match_id) REFERENCES Match (match_id);
405
406ALTER TABLE
407 Lineup
408ADD
409 CONSTRAINT FKLineup810481 FOREIGN KEY (team_id) REFERENCES Team (team_id);
410
411ALTER TABLE
412 Lineup
413ADD
414 CONSTRAINT FKLineup157055 FOREIGN KEY (player_id) REFERENCES Player (player_id);
415
416ALTER TABLE
417 Event
418ADD
419 CONSTRAINT FKEvent279784 FOREIGN KEY (match_id) REFERENCES Match (match_id);
420
421ALTER TABLE
422 Event
423ADD
424 CONSTRAINT FKEvent334783 FOREIGN KEY (team_id) REFERENCES Team (team_id);
425
426ALTER TABLE
427 Event
428ADD
429 CONSTRAINT FKEvent669270 FOREIGN KEY (player_id) REFERENCES Player (player_id);
430
431ALTER TABLE
432 Event
433ADD
434 CONSTRAINT FKEvent509131 FOREIGN KEY (event_type_id) REFERENCES Event_type (event_type_id);
435
436ALTER TABLE
437 Event_attribute
438ADD
439 CONSTRAINT FKEvent_attr568933 FOREIGN KEY (event_id) REFERENCES Event (event_id);
440
441ALTER TABLE
442 Coach_assignment
443ADD
444 CONSTRAINT FKCoach_assi105153 FOREIGN KEY (coach_id) REFERENCES Coach (coach_id);
445
446ALTER TABLE
447 Coach_assignment
448ADD
449 CONSTRAINT FKCoach_assi162820 FOREIGN KEY (season_id) REFERENCES Season (season_id);
450
451ALTER TABLE
452 Coach_assignment
453ADD
454 CONSTRAINT FKCoach_assi895752 FOREIGN KEY (team_id) REFERENCES Team (team_id);
455
456ALTER TABLE
457 Sponsor_deal
458ADD
459 CONSTRAINT FKSponsor_de546503 FOREIGN KEY (sponsor_id) REFERENCES Sponsor (sponsor_id);
460
461ALTER TABLE
462 Sponsor_deal
463ADD
464 CONSTRAINT FKSponsor_de865685 FOREIGN KEY (team_id) REFERENCES Team (team_id);
465
466ALTER TABLE
467 Sponsor_deal
468ADD
469 CONSTRAINT FKSponsor_de867246 FOREIGN KEY (season_id) REFERENCES Season (season_id);
470
471ALTER TABLE
472 Transfer
473ADD
474 CONSTRAINT FKTransfer480071 FOREIGN KEY (player_id) REFERENCES Player (player_id);
475
476ALTER TABLE
477 Transfer
478ADD
479 CONSTRAINT FKTransfer883152 FOREIGN KEY (from_team_id) REFERENCES Team (team_id);
480
481ALTER TABLE
482 Transfer
483ADD
484 CONSTRAINT FKTransfer66661 FOREIGN KEY (to_team_id) REFERENCES Team (team_id);
485
486ALTER TABLE
487 Transfer
488ADD
489 CONSTRAINT FKTransferType286310 FOREIGN KEY (transfer_type_id) REFERENCES Transfer_type (transfer_type_id);
490
491ALTER TABLE
492 Player_valuation
493ADD
494 CONSTRAINT FKPlayer_val231632 FOREIGN KEY (player_id) REFERENCES Player (player_id);
495
496ALTER TABLE
497 Player_valuation
498ADD
499 CONSTRAINT FKPlayer_val2972 FOREIGN KEY (season_id) REFERENCES Season (season_id);
500
501ALTER TABLE
502 Player_contract
503ADD
504 CONSTRAINT FKPlayer_con491854 FOREIGN KEY (player_id) REFERENCES Player (player_id);
505
506ALTER TABLE
507 Player_contract
508ADD
509 CONSTRAINT FKPlayer_con524317 FOREIGN KEY (team_id) REFERENCES Team (team_id);
510
511ALTER TABLE
512 Player_contract
513ADD
514 CONSTRAINT FKPlayer_con257250 FOREIGN KEY (season_id) REFERENCES Season (season_id);
515
516ALTER TABLE
517 Seat
518ADD
519 CONSTRAINT FKSeat349212 FOREIGN KEY (stadium_id) REFERENCES Stadium (stadium_id);
520
521ALTER TABLE
522 Ticket
523ADD
524 CONSTRAINT FKTicket721318 FOREIGN KEY (seat_id) REFERENCES Seat (seat_id);
525
526ALTER TABLE
527 Ticket
528ADD
529 CONSTRAINT FKTicket154471 FOREIGN KEY (match_id) REFERENCES Match (match_id);