-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathddl.sql
More file actions
134 lines (103 loc) · 3.84 KB
/
ddl.sql
File metadata and controls
134 lines (103 loc) · 3.84 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
-- create database faceit;
create type TournamentTypeEnum as enum ('single elimination', 'double elimination', 'round robin');
create type MapEnum as enum ('de_dust2', 'de_cache', 'de_train', 'de_nuke', 'de_mirage', 'de_inferno', 'de_ancient', 'de_vertigo');
create table Users (
UserId integer not null generated by default as identity,
Username varchar(200) not null,
AuthToken text not null,
ELO integer not null,
primary key (UserId)
);
create table Teams (
TeamId integer not null generated by default as identity,
TeamName varchar(200) not null,
CaptainId integer not null references Users(UserId),
primary key (TeamId)
);
create table TeamsUsers (
TeamId integer not null references Teams(TeamId),
UserId integer not null references Users(UserId),
primary key (TeamId, UserId)
);
create table Hubs (
HubId integer not null generated by default as identity,
ELOLeftBound integer not null,
ELORightBound integer not null,
CreatorId integer not null references Users(UserId),
primary key (HubId)
);
create table HubPlayers (
HubId integer not null references Hubs(HubId),
UserId integer not null references Users(UserId),
primary key (HubId, UserId)
);
create table Tournaments (
TournamentId integer not null generated by default as identity,
TournamentName varchar(200) not null,
TournamentYear integer not null,
TournamentType TournamentTypeEnum not null,
primary key (TournamentId),
unique (TournamentName, TournamentYear)
);
create table TournamentPrizes (
TournamentId integer not null references Tournaments(TournamentId),
Place integer not null,
Prize integer not null,
primary key (TournamentId, Place),
constraint CorrectPrize
check (Prize > 0)
);
create table TeamTournaments (
TeamId integer not null references Teams(TeamId),
Tournamentid integer not null references Tournaments(TournamentId),
Place integer not null,
primary key (TeamId, TournamentId)
);
create table Matches (
MatchId integer not null generated by default as identity,
PickingSideTeamId integer not null references Teams(TeamId),
OtherTeam integer not null references Teams(TeamId),
primary key (MatchId),
constraint NotSameTeams
check (PickingSideTeamId <> OtherTeam)
);
create table HubMatches (
HubId integer not null references Hubs(HubId),
MatchId integer not null references Matches(MatchId),
primary key (HubId, MatchId)
);
create table Games (
GameId integer not null generated by default as identity,
PlayedMap MapEnum not null,
StartTime timestamp not null,
EndTime timestamp,
WonRoundsTeam1 integer not null,
WonRoundsTeam2 integer not null,
MatchId integer not null references Matches(MatchId),
-- В check constraint CorrectTimes возможен EndTime = null, при сравнении получится null
-- Но в документации написано, что check выполяется если значение true или null,
-- значит стоит обработать этот случай отдельно
primary key (GameId),
unique (MatchId, StartTime),
constraint CorrectTimes
check ((Endtime is not null and StartTime <= EndTime) or EndTime is null)
);
create table UserStat (
GameId integer not null references Games(GameId),
UserId integer not null references Users(UserId),
Kills integer not null,
Assists integer not null,
Deaths integer not null,
primary key (GameId, UserId)
);
create table TournamentMatches (
TournamentId integer not null references Tournaments(TournamentId),
MatchId integer not null references Matches(MatchId),
primary key (TournamentId, MatchId)
);
-- Для ускорения AllPlayersKDInCertainPeriod
create index on Games using Btree(StartTime);
-- Для ускорения AllPlayersKDOnCertainMap
create index on Games using hash(PlayedMap);
-- Для ускорения PlayerWinrate
create index on Games using Btree(WonRoundsTeam1, WonRoundsTeam2);