DB HW/project

profileBryanAdams
latest-up-to-4.docx

Project Title: Enterprise Database Design

Table of Contents III. Description of the Enterprise 3 III.1. Enterprise Model Project 3 III.1.1 Soccer Tournament Database 3 IV. Definition of the Environment 7 V. Enterprise Database Design 1 V.1. List of all entities and their associated attributes. 1 V.2. List of relationships and attributes. 2 V.3. Entity-relationship diagram of the enterprise 4 V.4. Conceptual model of the enterprise. 6 V.4.1. Table dictionary 8 V.4.2 Attribute dictionary 9 VI. Database and queries 1 VI.1. Database definition 1 VI.2. Database queries 6 VI.2.1 List of referees that controlled at least one match as Main Referee 6 VI.2.2 Number of registered players 6 VI.2.3 List of players from highest one 6 VI.2.4 List of players and their teams with positions 6 VI.2.5 Match with the greatest number of goals scored 6 VI.2.6 Who is the most punished player? 7 VI.2.7 Who is the most sharp referee? 7 VI.2.8 Best of teams at home (the greatest number of wins) 7 VI.2.9 List of most recent matches 7 VI.2.10 Who is the oldest player? 8 VI.3. Review sign-off sheet 8 VI.4. Design Limitations: Discussion of the limitations of your design. 9

III. Description of the Enterprise

III.1. Enterprise Model Project

III.1.1 Soccer Tournament Database

Soccer is the most famous sport in the world, as it is played by approximately 250 million players in over 200 countries, making it the world's most popular sport among all ages. Traditionally, soccer news is popularly followed through television or the soccer teams’ websites. Moreover, considering the vast majority of people using their personal smartphones to access all kind of data, the idea of a dedicated mobile app that keeps track of all the games that have been played in the tournament would arguably be perfect, timely and efficient. It is, however, such a complicated game consisting of several factors, that need to be broken down into entities and have them set and linked together accurately in order to build the app. The database includes the components of a soccer tournament.

The tournament is identified by a name and has an association description, such as a league where teams play home and away legs in a season, or a cup tournament where teams play only once and advance. The tournament should also consist of at least two teams to play against each other, and a team of referees.

Each team must have a coach, and at least eighteen players, where eleven must play in the line up, and the remaining seven are substitutes. Additionally, every team should have a name, origin, and a stadium name.

Team information includes,

1. Points - three points for each win, one point for each draw, and no points for each lost.

2. Number of games played.

3. Number of games won.

4. Number of games lost.

5. Number of tied games.

6. Number of goals scored - associate the player name, assistant name

7. Number of goals received.

8. Number of yellow cards - associate the player name

9. Number of red cards. - associate the player name

Player profile includes,

1. Name.

2. Nationality.

3. Age.

4. Height.

5. Field position.

6. Player number

7. Goals this season.

8. Assists this season.

9. Yellow cards.

10. Red cards.

Referee information includes,

1. Name.

2. Nationality

3. Age

4. Position - Main, right-line, left-line, and Fourth.

The App should be user-friendly with the user able to open the application and choose a tournament, then choose to view the list of teams, fixtures, results, and/or standings.

The Tournament page should have the name of the tournament and the description of whether it is a league or a cup.

The list of teams should show all the teams’ basic information on the list. Moreover, the user can click on each team to view all the detailed information.

The Fixtures page when clicked on should show all the games in the tournament, which should be detailed in terms of what teams are playing, date, location and time.

The Results page when clicked on should show all the games that have been played, and the details consist of the names of both teams and the referees, location of the game, indicate whether first leg or second leg, and the scores.

The Standings page should show a list of all the teams in the tournament, and it should show all the teams’ game information, 1 to 9 from list above.

The user should be able to click on any team listed on either:

1) Tournament page

2) Fixtures page

3) Results page

4) Standings page

to view its detailed information and the whole squad of 18 players, and a coach. Thereafter, the user can click on any player, or coach to view his full profile described above. The user can also view all the relating information about the team as described above, to which we might, later on, need to add a news feed link somewhere.

Project Title: Description of the Enterprise

Finally, the application is online, meaning real-time updates are automatically received when the game is being played It also keeps track of all the games that are being played simultaneously.

Draft 4 III-1 3 November 2014

IV. Definition of the Environment

Soccer Mobile Application -- Application Form

Tournament input data:

· Tournament name

· Tournament type

· Tournament description

· Tournament teams

Team input data:

· Name of the team

· Origin of the team

· Stadium of the team

· Names of all the players

· Name of the coach

Player input data:

· Name

· Nationality

· Date of Birth

· Height

· Field position

· Player number

Referee input data:

· Name

· Nationality

· Date of Birth

· Position

Match input data:

· Names of home and visitor teams

· Names of the referees

· Score of the match

· Names of players who scored

· Names of players who assisted

· Names of players with yellow cards

· Names of players with red cards

Some potential assumptions can be listed as follows,

Figure 1 Some assumptions for soccer tournaments.

1. Tournaments can only be in two types, a league in which all the teams are from the same country, or a cup with a list of teams from across the world.

2. In a league, teams cannot play with each other more than twice – once as home and once as visitor.

3. In a cup, teams can play up to three matches.

4. Teams earn points by either winning or tying. After a win three points are added to the team’s total points. After a tie, one point is added to the total points.

5. The winner team of a league is the team with the highest points.

6. If two teams have the same points by the end of the league, then the team scored more than the other during this competition is the winner.

7. A player can score or assist

8. A player can be punished with yellow or red cards.

9. During a match each team can make up to three substitutions.

10. A player receiving a red card is banned from playing the next match.

11. Two yellow cards equal to one red card in a single match. Therefore, if a player gets two yellow cards in a single match, then he will be eliminated from the next match.

12. If a player gets four accumulative yellow cards on different matches, then he will be banned from playing the next one.

13. Normal matches consist of ninety minutes divided into two halves with a 15-minute resting time and a maximum of 7-8 minutes of added time.

14. If two teams draw on the semi final or the final match, then the match is extended by thirty minutes divided into two halves.

Table 1. User-oriented data dictionary.

Datum

Information Definition

coach_first_name

The coach’s first name.

coach_last_name

The coach’s surname.

date_of_birth

DD/MM/YYYY. Calculated field Age comes in the form of a two digit numbers.

field_position

Field position can be: Goalkeeper, Defender, Midfielder, or Striker.

height

Height of a player comes in the form of centimeters <number> and <”cm”>:

name_of_assistant/scorer

red_card/yellow_card

Refer to player_first_name and player_last_name

nationality

Nationality in the form of <country name>.

origin_of_team

Refer to nationality

player_first_name

The player’s first name.

player_last_name

The player’s surname.

player_number

The player number can be from 0 to 99.

referee_first_name

The referee’s first name.

referee_last_name

The referee’s surname.

score

Score is in this form:

Home: Real Madrid

Home Score: 4

Visitor: Barcelona

Visitor Score: 2

stadium_name

The Stadium name is in the form of a string.

team_name

The name of the team in the form of a string, which can contain spaces or dots.

tournament_description

The description can be in one sentence, as follows: “this tournament is Spanish league” or “this tournament is a friendly cup.”

tournament_name

The name can be any string.

tournament_teams

Refer to name_of_team. Follow each name by either home, or visitor. Then, separate teams with commas.

tournament_type

The type can be either a “cup” or a “league”

Table 2. Mapping of data to forms and transactions.

Datum

Form or screen

Tournament input data

Team input data

Player input data

Referee input data

Match input data

coach_first_name

X

coach_last_name

X

date_of_birth

X

field_position

X

height

X

home_team

X

X

X

name_of_assistant /scorer

red_card/yellow_card

X

nationality

X

X

origin_of_team

X

player_first_name

X

X

player_last_name

X

X

player_number

X

X

referee_first_name

X

X

referee_last_name

X

X

score

X

stadium_name

X

tournament_name

X

tournament_teams

X

tournament_type

X

visitor_team

X

X

X

Project Title: Definition of the Environment

Draft 4 IV-10 3 November 2014

V. Enterprise Database Design

V.1. List of all entities and their associated attributes.

· Tournament

Attributes:

· name

· type

· description

· date

· Team

Attributes:

· name

· origin

· stadium

· coach_first_name

· coach_last_name

· Player

Attributes:

· first_name

· last_name

· nationality

· date_of_birth

· height

· number

· field_position

· Referee

Attributes:

· first_name

· last_name

· date_of_birth

· position

· nationality

· Match

Attributes:

· home_team

· visitor_team

· home_score

· visitor_score

· date

V.2. List of relationships and attributes.

Tournament_teams (Tournament.name, Team.name)

-------------------------------------------------------------------------------------------------------------------

Goal: (Scorer.first_name, Scorer.last_name, Team_scored.name, Team_received.name, Assistant.first_name, Assistant.last_name)

Where Scorer and Assistant are roles of Player and Team_scored and Team_received are roles of Team

-------------------------------------------------------------------------------------------------------------------

Penalty: (Player.first_name, Player.last_name, Match, penalty_type)

Where penalty_type is attribute of Penalty relationship

------------------------------------------------------------------------------------------------------------------

Match_referees: (Match. name, Referee.first_name, Referee.last_name, position)

Where position is attribute of Match_referees relationship

------------------------------------------------------------------------------------------------------------------

V.3. Entity-relationship diagram of the enterprise

· Tournament can have two or more Teams

· Tournament has one or more Matches

· Team can belong to zero or more Tournaments

· Team plays zero or many Matches (as visitor or home)

· Match is played by 2 Teams (home and visitor)

· Match is played by many Players

· Match belongs to one Tournament

· Player takes part in zero or more Matches (with zero or more goals and penalties)

· Match has many Referees

· Referee controls zero or more Matches (on one position)

· Team has many Players

· Player is member of one Team

V.4. Conceptual model of the enterprise.

Tournament: (name, type, description)

PK: name

Team: (name, origin, stadium, coach_first_name, coach_last_name)

PK: name

Player: (first_name, last_name, date_of_birth, field_position, height, number, nationality, team)

PK: first_name, last_name

FK: team references Team.name

Referee: (first_name, last_name, date_of_birth, nationality)

PK: first_name, last_name

Match_referee: (referee_first_name, referee.last_name, match_id, position)

PK: referee_first_name, referee.last_name, match_id

FK: match_id references Match.id

FK: referee_first_name, referee.last_name references Referee.first_name, Referee.last_name

Goal: (match_id, time, scorer_first_name, scorer_last_name, team_received, team_scored, assistant_first_name, assistant_last_name)

PK: match_id, time

CK: time, team_scored, team_received

FK: match_id references Match.id

FK: scorer_first_name, scorer.last_name references Player.first_name, Player.last_name

FK: assistant_first_name, assistant.last_name references Player.first_name, Player.last_name

FK: team_scored references Team.name

FK: team_received references Team.name

Match: (tournament, home_team, visitor_team, home_score, visitor_score, play_date)

PK: tournament, home_team, visitor_team

CK: home_team, visitor_team, play_date

FK: home_team references Team.name

FK: visitor_team, references Team. name

FK: tournament references Tournament.name

Penalty: (player_first_name, player_last_name, match_id, penalty_type, time)

PK: match_id, player_first_name, player_last_name, penalty_type

FK: match_id references Match.id

FK: player_first_name, player_last_name references Player.first_name, Player.last_name

Tournament_team: (tournament, team)

PK: tournament, team

FK: tournament references Tournament.name

FK: team references Team.name

V.4.1. Table dictionary

Table 3. Table Dictionary.

Table

Attributes

Informal definition

Goal

match_id

time

scorer_first_name

scorer_last_name

team_scored

team_received

assistant_first_name assistant_last_name

Goal statistics

Match

tournament

home_team

visitor_team

home_score

visitor_score

play_date

Match details

Match_referee

referee_first_name referee.last_name

match_id

position

Referees assigned to matches

Penalty

player_first_name

player_last_name

match_id

penalty_type

time

Red and yellow cards for matches and its players

Player

first_name

last_name

date_of_birth

field_position

height

play_number

nationality

team

Player detail

Referee

first_name

last_name

date_of_birth

nationality

Referee detail

Team

name, name

origin

stadium

coach_first_name

coach_last_name

Team detail

Tournament

name

type

description

Tournament detail

Tournament_Team

tournament

team

Terms taking part in tournaments

V.4.2 Attribute dictionary

Table 4. Attribute Dictionary

Datum

Information Definition

table in which each attribute is used

assistant_first_name

The assistent’s first name.

Goal

assistant_last_name

The assistent’s surname.

Goal

coach_first_name

The coach’s first name.

Team

coach_last_name

The coach’s surname.

Team

date_of_birth

DD/MM/YYYY. Age is calculated in the form of a two digit numbers.

Player, Referee

description

The description can be in one sentence.

Tournament

field_position

Field position can be: G-Goalkeeper, D-Defender, M-Midfielder, or S-Striker.

Player

height

Height of a player in centimeters

Player

home_score

Home team match goals.

Goal

home_team

Refer to name_of_team

Match

name

The name can be any string.

Tournament, Team

nationality

Nationality in the form of <country name>.

Player, Referee

origin_of_team

Refer to nationality

Team

play_date

Date of the match

Match

play_number

The player number can be from 0 to 99.

Player

player_first_name

The player’s first name.

Player

player_last_name

The player’s surname.

Player

referee_first_name

The referee’s first name.

Referee

referee_last_name

The referee’s surname.

Referee

scorer_first_name

The scorer’s first name.

Goal

scorer_last_name

The scorer’s surname.

Goal

stadium

The Stadium name is in the form of a string.

Team

team_name

The name of the team in the form of a string, which can contain spaces or dots.

Team

team_received

Refers to team received goal.

Goal

team_scored

Refers to team scored goal.

Goal

type

The tournament type can be C-cup or L-league, the penalty type can be R-red or Y-yellow

Tournament, Penalty

visitor_score

Visitor team match goals.

Goal

visitor_team

Refer to name_of_team

Match

time

Minute of penalty or goal

Goal, Penalty

Project Title: Enterprise Database Design

Draft 4 V-10 3 November 2014

VI. Database and queries

VI.1. Database definition

create table Nationality

( id int not null,

name varchar(50) not null,

abbreviation char(2)

);

alter table Nationality

add constraint pk_nationality primary key (id);

create table Team

( id int not null,

name varchar(100) not null,

origin int,

stadium varchar(100),

coach_first_name varchar(30) not null,

coach_last_name varchar(30) not null

);

alter table Team

add constraint pk_team primary key (id);

alter table Team

add constraint fk_team_nationality

foreign key (origin) references nationality (id)

on delete set null;

create table Tournament

( id int not null,

name varchar(100) not null,

type char(1),

description varchar(256)

);

alter table Tournament

add constraint pk_tournament primary key (id);

alter table Tournament

add constraint ck_tournament_type check (type in ('C', 'L'));

create table Referee

( id int not null,

first_name varchar(30) not null,

last_name varchar(30) not null,

date_of_birth date,

nationality int

);

alter table Referee

add constraint pk_referee primary key (id);

alter table Referee

add constraint fk_referee_nationality

foreign key (nationality) references nationality (id)

on delete set null;

create table Player

( id int not null,

first_name varchar(30) not null,

last_name varchar(30) not null,

date_of_birth date,

nationality int,

height int,

play_number int not null,

field_position char(1) not null,

team int not null

);

alter table Player

add constraint pk_player primary key (id);

alter table Player

add constraint fk_player_nationality

foreign key (nationality) references nationality (id)

on delete set null;

alter table Player

add constraint fk_player_team

foreign key (team) references team (id);

alter table Player

add constraint ck_player_position

check (field_position in ('G', 'D', 'M', 'S'));

create table Match

( id int not null,

tournament int not null,

home_team int not null,

visitor_team int not null,

play_date date not null,

home_score int,

visitor_score int

);

alter table Match

add constraint pk_match primary key (id);

alter table Match

add constraint fk_match_tournament

foreign key (tournament) references tournament (id)

on delete cascade;

alter table Match

add constraint fk_match_home

foreign key (home_team) references Team (id);

alter table Match

add constraint fk_match_visitor

foreign key (visitor_team) references Team (id);

create table Match_Referee

( id int not null,

referee int not null,

match int not null,

position char(1) not null

);

alter table Match_Referee

add constraint pk_match_referee primary key (id);

alter table Match_referee

add constraint fk_match_referee_referee

foreign key (referee) references Referee (id);

alter table Match_referee

add constraint fk_match_referee_match

foreign key (match) references match (id)

on delete cascade;

alter table Match_referee

add constraint ck_match_referee_position

check (position in ('M', 'R', 'L', 'F'));

create table Tournament_Team

( id int not null,

tournament int not null,

team int not null

);

alter table Tournament_Team

add constraint pk_tournament_team primary key (id);

alter table Tournament_Team

add constraint fk_tournament_team_tournament

foreign key (tournament) references tournament (id)

on delete cascade;

alter table Tournament_Team

add constraint fk_tournament_team_team

foreign key (team) references team (id)

on delete cascade;

create table Penalty

( id int not null,

player int not null,

match int not null,

type char(1) not null,

time int not null

);

alter table Penalty

add constraint pk_penalty primary key (id);

alter table Penalty

add constraint fk_penalty_player

foreign key (player) references Player (id);

alter table Penalty

add constraint fk_penalty_match

foreign key (match) references match (id)

on delete cascade;

alter table Penalty

add constraint ck_penalty_type check (type in ('R', 'Y'));

alter table Penalty

add constraint ck_penalty_time check (time between 1 and 128);

create table Goal

( id int not null,

match int not null,

scorer int not null,

assistant int,

team_received int not null,

team_scored int not null,

time int not null

);

alter table Goal

add constraint pk_goal primary key (id);

alter table Goal

add constraint fk_goal_match

foreign key (match) references match (id)

on delete cascade;

alter table Goal

add constraint fk_goal_scorer foreign key (scorer) references Player (id);

alter table Goal

add constraint fk_goal_assistant foreign key (assistant) references Player (id);

alter table Goal

add constraint fk_goal_team_received foreign key (team_received) references Team (id);

alter table Goal

add constraint fk_goal_team_scored foreign key (team_scored) references Team (id);

alter table Goal

add constraint ck_goal_time check (time between 1 and 128);

VI.2. Database queries

VI.2.1 List of referees that controlled at least one match as Main Referee

select distinct R.last_name, R.first_name

from Referee R, Match_Referee MR

where MR.referee = R.id and

MR.position = 'M'

order by R.last_name, R.first_name;

VI.2.2 Number of registered players

select count(*)

from Player;

VI.2.3 List of players from highest one

select last_name, first_name, height

from Player

order by height desc;

VI.2.4 List of players and their teams with positions

select T.name, P.last_name, P.first_name, P.field_position, P.play_number

from Player P, team T

where P.team = T.id

order by T.name, P.field_position, P.play_number;

VI.2.5 Match with the greatest number of goals scored

select T.name, H.name, V.name, M.home_score, M.visitor_score

from Match M, Team H, Team V, Tournament T

where M.home_team = H.id and

M.visitor_team = V.id and

M.tournament = T.id and

home_score + visitor_score = (select max(X.home_score+x.visitor_score)

from Match X);

VI.2.6 Who is the most punished player?

select PL.id, PL.first_name, PL.last_name, count(*)

from Player PL, Penalty PE1

where pe1.player = pl.id

group by PL.id, PL.first_name, PL.last_name

having count(*) = (select max(T.cnt)

from (select PE2.player, count(*) as cnt

from penalty PE2

group by PE2.player) T);

VI.2.7 Who is the most sharp referee?

select R.id, R.first_name, R.last_name, count(*)

from Referee R, Match_Referee MR, Match M, Penalty P

where R.id = MR.referee and

MR.match = M.id and

P.match = M.id

group by R.id, R.first_name, R.last_name

having count(*) = (select max(t.cnt)

from (select MR2.referee, count(*) as cnt

from Match M2, Match_Referee MR2

where MR2.match = M2.id

group by MR2.referee) T);

VI.2.8 Best of teams at home (the greatest number of wins)

select T.name, count(*)

from Team T, Match M

where M.home_team = T.id and

M.home_score > M.visitor_score

group by t.name

order by count(*) desc;

VI.2.9 List of most recent matches

select T.name, H.name, V.name, M.play_date, M.home_score, M.visitor_score

from Tournament T, Match M, Team H, Team V

where M.home_team = H.id and

M.visitor_team = V.id and

T.id = M.tournament

order by M.play_date desc;

VI.2.10 Who is the oldest player?

select P.first_name, P.last_name

from Player P

where P.date_of_birth = (select min(date_of_birth)

from Player)

VI.3. Review sign-off sheet

The documents are attached.

VI.4. Design Limitations: Discussion of the limitations of your design.

Limitations for this Enterprise Database SoccerApp would be the things that would not be easy to do at this level. For example, at what time a certain team scored? Or, at what time a player received a card based on the local time of the match, because this application is intended to be global. Therefore, a game in Australia could be played at the same time as a game in LA, but with time difference these could be in two different days. Also, what type of field they are playing in, in terms of size, grass type. One of the limitations can also be injuries and their types, which is hard at this moment. One last limitation is suspensions, which they can differ not only based on how many red cards or yellow cards. But, can be different when placed by the FIFA organization (International Federation of Association Football) due to unnecessary or, uncategorized actions done by teams or players.

For the SoccerApp, I think it is a very complex application that can go even further in complexity level if I didn’t intentionally put a limit on it. The only modifications I would propose are just trying to make this application more limited to only a single tournament with a lot less attributes. This way the queries SQL

Draft 4 VI-9 3 November 2014

application

penalty

goal

member

schedule

position

visitor_team

home_team

Match

date

home_score

visitor_score

Referee

fitrst_name

last_name

nationality

date_of_birth

Tournament

name

type

description

Team

name

origin

stadium

coach_first_name

coach_last_name

Player

first_name

last_name

height

field_position

date_of_birth

number

nationality