-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_tables_23511190.sql
More file actions
155 lines (141 loc) · 5.65 KB
/
Copy pathcreate_tables_23511190.sql
File metadata and controls
155 lines (141 loc) · 5.65 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
-- ============================================================
-- Cricket Database Schema
-- Creating all tables in correct order to satisfy FK constraints
-- ============================================================
-- tables with no dependencies first
CREATE TABLE Tournament (
tournament_id INT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
year YEAR NOT NULL,
format ENUM('T20', 'ODI', 'Test') NOT NULL,
organising_body VARCHAR(100) NULL,
start_date DATE NOT NULL,
end_date DATE NULL,
PRIMARY KEY (tournament_id)
);
CREATE TABLE Stadium (
stadium_id INT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
city VARCHAR(100) NOT NULL,
country VARCHAR(100) NOT NULL,
capacity INT NOT NULL,
PRIMARY KEY (stadium_id)
);
-- player created before Team due to Team.captain_id FK referencing Player
CREATE TABLE Player (
player_id INT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
dob DATE NOT NULL,
nationality VARCHAR(100) NOT NULL,
batting_style ENUM('Right-hand bat', 'Left-hand bat') NOT NULL,
bowling_style VARCHAR(50) NULL,
player_role ENUM('Batter', 'Bowler', 'All-rounder', 'Wicket-keeper') NOT NULL,
PRIMARY KEY (player_id)
);
-- team depends on Player (captain_id FK)
CREATE TABLE Team (
team_id INT AUTO_INCREMENT,
team_name VARCHAR(100) NOT NULL,
country VARCHAR(100) NOT NULL,
coach_name VARCHAR(100) NULL,
captain_id INT NULL,
PRIMARY KEY (team_id),
FOREIGN KEY (captain_id) REFERENCES Player(player_id)
ON DELETE SET NULL
ON UPDATE CASCADE
);
CREATE TABLE Umpire (
umpire_id INT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
nationality VARCHAR(100) NOT NULL,
certification_level ENUM('International', 'Domestic', 'Associate') NOT NULL,
PRIMARY KEY (umpire_id)
);
-- now create tables that depend on the above
-- NOTE -> match is a reserved keyword, hence use backticks when ever referencing
CREATE TABLE `Match` (
match_id INT AUTO_INCREMENT,
match_date DATE NOT NULL,
match_type ENUM('T20', 'ODI', 'Test') NOT NULL,
result_summary VARCHAR(255) NULL,
stadium_id INT NOT NULL,
tournament_id INT NOT NULL,
PRIMARY KEY (match_id),
FOREIGN KEY (stadium_id) REFERENCES Stadium(stadium_id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
FOREIGN KEY (tournament_id) REFERENCES Tournament(tournament_id)
ON DELETE RESTRICT
ON UPDATE CASCADE
);
-- weak entity Innings -> depends on Match and Team
CREATE TABLE Innings (
match_id INT NOT NULL,
innings_number TINYINT NOT NULL,
total_runs INT NOT NULL DEFAULT 0,
total_wickets TINYINT NOT NULL DEFAULT 0,
total_overs DECIMAL(4,1) NOT NULL DEFAULT 0,
total_fours INT NOT NULL DEFAULT 0,
total_sixes INT NOT NULL DEFAULT 0,
team_id INT NOT NULL,
PRIMARY KEY (match_id, innings_number),
CHECK (innings_number BETWEEN 1 AND 4),
CHECK (total_wickets BETWEEN 0 AND 10),
FOREIGN KEY (match_id) REFERENCES `Match`(match_id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (team_id) REFERENCES Team(team_id)
ON DELETE RESTRICT
ON UPDATE CASCADE
);
-- create all M:N realtionship tables
CREATE TABLE Participates_In (
team_id INT NOT NULL,
match_id INT NOT NULL,
team_role ENUM('Home', 'Away', 'Neutral') NOT NULL,
PRIMARY KEY (team_id, match_id),
FOREIGN KEY (team_id) REFERENCES Team(team_id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
FOREIGN KEY (match_id) REFERENCES `Match`(match_id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE Member_Of (
player_id INT NOT NULL,
team_id INT NOT NULL,
jersey_number TINYINT NULL,
date_joined DATE NULL,
PRIMARY KEY (player_id, team_id),
FOREIGN KEY (player_id) REFERENCES Player(player_id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
FOREIGN KEY (team_id) REFERENCES Team(team_id)
ON DELETE RESTRICT
ON UPDATE CASCADE
);
CREATE TABLE Officiated_By (
match_id INT NOT NULL,
umpire_id INT NOT NULL,
umpire_role ENUM('On-field', 'Third', 'Fourth') NOT NULL,
PRIMARY KEY (match_id, umpire_id),
FOREIGN KEY (match_id) REFERENCES `Match`(match_id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (umpire_id) REFERENCES Umpire(umpire_id)
ON DELETE RESTRICT
ON UPDATE CASCADE
);
CREATE TABLE Wins (
match_id INT NOT NULL,
team_id INT NOT NULL,
win_margin INT NOT NULL,
win_type ENUM('Runs', 'Wickets', 'Super Over', 'DLS') NOT NULL,
PRIMARY KEY (match_id),
FOREIGN KEY (match_id) REFERENCES `Match`(match_id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (team_id) REFERENCES Team(team_id)
ON DELETE RESTRICT
ON UPDATE CASCADE
);