Вы находитесь на странице: 1из 9

Министерство образования Республики Беларусь

ПОЛОЦКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Кафедра технологий программирования

Дисциплина: Базы данных

Отчёт по лабораторной работе

Выполнил:

Проверил:

Полоцк, 20

1
Вариант задания №14 – Соревнования по футболу
Пусть требуется создать программную систему, предназначенную для
организаторов соревнований по футболу в рамках первенства страны. Такая
система должна обеспечивать хранение сведений о командах, участвующих в
первенстве, об игроках команд, о расписании встреч и их результатах, о цене
билетов на игры.
Сведения о команде – название команды, город, где она базируется, имя
главного тренера, место в таблице прошлого сезона, расписание встреч. . В один
день команда может участвовать только в одной встрече. Сведения об игроке
включают в себя фамилию и имя игрока, его возраст, номер и амплуа в команде.
Сведения о стадионе, на котором происходит встреча содержат город, в котором
он находится, название стадиона, и его вместимость.
Цена билета на матч зависит от вместимости стадиона и положения
встречающихся команд в турнирной таблице прошлого сезона (наибольшая –
при игре тройки призеров, наименьшая – при игре тройки аутсайдеров).
Организаторы соревнований должны иметь возможность внести изменения в
данные о составе команд, перенести встречу.

Им могут потребоваться следующие сведения:


1. Даты встреч указанной команды, ее противники и счет?
2. Номера и фамилии игроков команд, участвовавших во встрече, которая
проходила в указанный день в указанном городе?
3. Цена, билета на матч между указанными командами?
4. Игрок, забивший в турнире наибольшее количество мячей?
5. Команды, имеющие наилучшую и наихудшую разницу забитых и
пропущенных мячей?
6. Самый молодой участник турнира?

Ход выполнения задания:


1. Физическое описание модели.
ЦЕЛЬ: Выполнить физическое описание модели. Знать методы доступа к
данным.

Используемая программа: Microsoft SQL Server 2014,

Ход работы.
Рассмотрим типы данных и ограничения, примененные в данной работе.

Тип INT – целочисленный тип данных. Он выбран для первичных и


вторичных ключей, так как позволяет идентифицировать достаточное
количество записей (до 2 147 483 648) в контексте данной базы.

Тип FLOAT – тип данных числа с плавающей точкой. Он выбран для


хранения цен, т.к. он универсален и он хранит в себе дробную часть.

2
Тип DATE сохраняет только значения дат за период с 1 января 1 года по 31
декабря 9999 года. Даты не предусматривают сохранения времени (т.к. такие
даты, как дата проведения матча и т.п. время не учитывают). Следовательно, для
всех дат выбран тип DATE.
Тип NVarChar – символьные данные в кодировке Unicode переменной
длины. Значения данных с длиной короче заданной не дополняются пробелами.
Для символьных данных выбран именно этот тип, так как данные могут очень
отличаться по длине (например, имена «Бо» и «Скрытоколокольчик»). Для
каждого отдельного столбца подбирается своя длина. Максимальное заданное
значение длины может составлять 4 000 символов, но для обозначения длины
можно использовать ключевое слово max, что фактически позволяет определять
столбцы с символьными данными, имеющими чрезвычайно большой объем (до
231 байтов данных). Поэтому для таких описаний деятельности, которые могут
быть очень подробными, используется ключевое слово max.

Следует отметить, что каждый первичный ключ должен обладать свойством


уникальности. Также все (как первичные, так и вторичные) ключи должны быть
ненулевыми, а все вторичные ключи должны обладать свойством целостности,
т. е. присутствовать в таблице, к которой они “привязаны”.

Во всех таблицах проведен анализ атрибутов на NULL и NOT NULL.Такие


атрибуты, которые определяют основные свойства сущности (фамилия, название
и т. п.) установлены в NOT NULL. Но с учетом того, что базой данных являются
соревнования по футболу, некоторые необязательные атрибуты установлены в
NULL.

С учетом всего вышеперечисленного составим таблицу описания


физической модели данных (см. таблица 1).

3
Таблица 1
Таблица Поле Ключ Тип данных Ограничения
PLAYER PK_Player PK int UNIQUE NOT NULL
Surname nvarchar(50) NOT NULL
Name nvarchar(50) NULL
Role nvarchar(20) NOT NULL
DateBirth date NOT NULL
TEAM PK_Team PK int UNIQUE NOT NULL
Name nvarchar(50) NOT NULL
Hometown nvarchar(50) NULL
COACH PK_Coach PK int UNIQUE NOT NULL
Name nvarchar(50) NOT NULL
Surname nvarchar(50) NULL
TEAMCOACHES FK_Team int NOT NULL
references TEAM (PK_Team)
FK_Coach int NOT NULL
references COACH (PK_Coach)
SQUADLIST FK_Team int NOT NULL
references TEAM (PK_Team)
FK_Player int NOT NULL
references PLAYER (PK_Player)
PlayerNumber int

STADIUM PK_Stadium PK int UNIQUE NOT NULL

Name nvarchar(50) NOT NULL

City nvarchar(50) NOT NULL

Capacity int NOT NULL

TEAMMEETINGS FK_Team1 FK int NOT NULL


references TEAM (PK_Team)
FK_Team2 FK int NOT NULL
references TEAM (PK_Team)
FK_Stadium FK int NOT NULL
references MAN (PK_Stadium)
MeetingDate date NOT NULL

TicketPrice float NOT NULL

TEAMSRATING MeetingDate int NOT NULL


FK_Team FK int NOT NULL
references TEAM (PK_Team)
GoalsNumber int NOT NULL
MissedBallsNumber int NOT NULL

Малый преподавателю:
Прошу подсказать, как еще можно решить задачу учета матча между двумя командами.
Изначально я хотел хранить в таблице «TEAMMEETINGS» по две записи: для каждой
команды.
Потом я решил, что будет ситуация, когда постоянно надо держать в голове, что у меня
должно быть 2 записи. Тогда потребовалось бы реализовать проверку кодом на наличие
НЕ более 2 записей на одну дату и помнить про эту особенность во всех запросах к
таблице, что не является корректным на мой взгляд.
Я решил хранить одну запись на один стадион и дату – реализовано в коде в базе
4
данных.
Можно лично на сессии, если запомните мой вопрос 😊

Физическое представление модели, выполненное в ERwin, представлено на


рисунке 1.

Рисунок 1 – Физическое представление модели

Вывод. Согласно варианту задания выполнено физическое описание модели.


Построена диаграмма IDEF1X. Данная диаграмма выполнена во встроенном
редакторе Microsoft SQL Server Management Studio.

2. Знакомство с основными особенностями встроенного языка Transact


SQL в MS SQL Server 2014.
ЦЕЛЬ: Знакомство с правилами обозначения синтаксиса команд в
справочной системе MS SQL Server 2014 (утилита Books Online). Знакомство с
особенностями построения запросов средствами языка Transact SQL.

Используемая программа: Microsoft SQL Server 2014,

Ход работы.
Построение скрипта базы данных средствами языка Transact SQL.

5
USE master
GO

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

IF EXISTS (SELECT * FROM sys.databases WHERE name = 'FootballMatches')


DROP DATABASE FootballMatches

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

CREATE DATABASE FootballMatches

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

USE FootballMatches
GO

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

create table PLAYER (


    PK_Player   int             UNIQUE NOT NULL,
    Surname     nvarchar(50)    NOT NULL,
    Name        nvarchar(50)    NULL,
    Role        nvarchar(50)    NULL,
    DateBirth   date            NOT NULL,

    constraint PK_Player_Player primary key (PK_Player)


)

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

create table TEAM (


    PK_Team     int             UNIQUE NOT NULL,
    Name        nvarchar(50)    NOT NULL,
    Hometown    nvarchar(50)    NULL,

    constraint PK_Team_Team primary key (PK_Team)


)

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

create table COACH (


    PK_Coach    int             UNIQUE NOT NULL,
    Name        nvarchar(50)    NOT NULL,
    Surname     nvarchar(50)    NULL
)

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

create table TEAMCOACHES (


    FK_Team     int     NOT NULL,
    FK_Coach    int     NOT NULL,

6
    constraint FK_Team_Team     foreign key (FK_Team)   references TEAM (PK_Team),
    constraint FK_Coach_Coach   foreign key (FK_Coach)  references COACH (PK_Coach)
)

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

create table SQUADLIST (


    FormingDate     date    NOT NULL,
    FK_Team         int     NOT NULL,
    FK_Player       int     NOT NULL,
    PlayerNumber    int     NOT NULL,

    constraint FK_Team_SquadList    foreign key (FK_Team)       references TEAM (PK_Team),


    constraint FK_Player_Player     foreign key (FK_Player)     references PLAYER
(PK_Player)
)

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

create table STADIUM (


    PK_Stadium      int             UNIQUE NOT NULL,
    Name            nvarchar(50)    NOT NULL,
    City            nvarchar(50)    NOT NULL,
    Capacity        int             NOT NULL
)

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

create table TEAMMEETINGS (


    FK_Team1    int     NOT NULL,
    FK_Team2    int     NOT NULL,
    FK_Stadium  int     NOT NULL,
    MeetingDate date    NOT NULL,
    TicketPrice float   NOT NULL,

    constraint FK_Team1_Team        foreign key (FK_Team1)      references TEAM (PK_Team),


    constraint FK_Team2_Team        foreign key (FK_Team2)      references TEAM (PK_Team),
    constraint FK_Stadium_Stadium   foreign key (FK_Stadium)    references STADIUM
(PK_Stadium)
)

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

create table TEAMSRATING (


    MeetingDate         date    NOT NULL,
    FK_Team             int     NOT NULL,
    Rating              int     NOT NULL,  

    constraint FK_Team_Teamsrating         foreign key (FK_Team)      references TEAM


(PK_Team)
)

7
create table PLAYERSRATING (
    FK_Player           int     NOT NULL,
    FK_Team             int     NOT NULL,       -- Надо знать, в какой команде был игрок
    FK_Stadium          int     NOT NULL,
    MeetingDate         date    NOT NULL,       -- Стадион и дата встречи позволят
однозначно идентифицировать конкретный матч
    GoalsNumber         int     NOT NULL,
    MissedBallsNumber   int     NOT NULL,       -- Если это был вратарь. Это позволит вести
статистику одновременно по игроку и по команде

    constraint FK_Team_Playersrating    foreign key (FK_Team)       references TEAM


(PK_Team),
    constraint FK_Player_Playersrating  foreign key (FK_Player)     references PLAYER
(PK_Player),
    constraint FK_Stadium_Playersrating  foreign key (FK_Stadium)   references STADIUM
(PK_Stadium)
)

8
3. Построение диаграммы в базы данных в MS SQL Server 2014.

Рисунок 2 – Схема базы данных

Вывод. Согласно варианту задания выполнено физическое описание модели.


Построена диаграмма IDEF1X. Данная диаграмма выполнена в CASE-средстве
ERwin. Ознакомились с особенностями встроенного языка Transact SQL в MS
SQL Server 2014 при создании скрипта базы данных. Построили схему базы в в
Microsoft SQL Server 2014 при помощи Microsoft SQL Server Management Studio.

Вам также может понравиться