Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Примеры курсовых работ по дисциплине Проектиров...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
581 Кб
Скачать

3.2 Создание таблиц

На этом этапе практической реализации базы данных создаются таблицы, соответствующие даталогической модели, построенной в предыдущем разделе.

Для создания таблиц можно использовать два подхода. Первый подход заключается в применении SQL запросов. Второй подход использует визуальные средства Access. Он является наиболее удобным с точки зрения реализации по сравнению с первым подходом и поэтому был выбран для построения таблиц базы данных. В итоге построены таблицы имеющие структуру, показанную в таблицах 4 – 7.

Таблица 4 – Таблица «Год чемпионата»

поле

тип данных

описание

id_year

счётчик

первичный ключ

iYear

числовой целое

год

Таблица 5 – Таблица «Тур чемпионата» / «ФинальныйТурнир1-6» / «ФинальныйТурнир7-10»

поле

тип данных

описание

id_tur

счётчик

первичный ключ

id_year

длинное целое

внешний ключ

тур

байт

номер тура

Таблица 6 – Таблица «Результаты» / «ФиналРезультаты1-6» / «ФиналРезультаты7-10»

поле

тип данных

описание

id_res

счётчик

первичный ключ

id_tur

длинное целое

внешний ключ

command

длинное целое

связь с таблицей-словарём с названиями команд – участниц чемпионатов

scored

байт

забито мячей в текущем туре

missing

байт

пропущено мячей в текущем туре

Таблица 7 – Таблица-словарь для подстановок в таблицы результатов

поле

тип данных

описание

id_command

счётчик

первичный ключ

id_name

текстовый

название команды

3.3 Запросы

В соответствии с алгоритмом решения задачи, данные о годе чемпионата и результатах каждого тура предварительного этапа должны вноситься вручную в следующие таблицы: «Год чемпионата», «Тур чемпионата» и «Результаты», соответственно. При этом, для обеспечения целостности данных, их ввод должен происходить в том же порядке, в каком перечислены имена таблиц.

Следующий шаг – подвести итоги предварительного тура в форме таблицы. Но вначале создадим вспомогательный запрос, который формирует таблицу результатов всех туров. Его цель – определить разность забитых и пропущенных мячей и очки, набранные командами в каждом туре. Для этих целей выполняется SQL-запрос:

ЗапросРезультатыТуров

SELECT Команды.id_command, Команды.iName AS Команда, Результаты.scored AS Забито, Результаты.missing AS Пропущено, [Забито]-[Пропущено] AS Разность, IIf([Разность]>0,2,IIf([Разность]=0,1,0)) AS Очки

FROM (Год_чемпионата INNER JOIN Тур_чемпионата ON Год_чемпионата.id_year=Тур_чемпионата.id_year) INNER JOIN (Команды INNER JOIN Результаты ON Команды.id_command=Результаты.comand) ON Тур_чемпионата.id_tur=Результаты.id_tur

WHERE (((Год_чемпионата.iYear)=[Укажите год]));

Пример результата запроса «ЗапросРезультатыТуров» показан на рисунке 6.

Рисунок 6 – Результаты туров

Следующий запрос формирует таблицу итогов предварительного тура с распределением занятых мест, используя вспомогательный запрос «ЗапросРезультатыТуров»:

ЗапросИтогиПредварительногоЭтапа

SELECT ЗапросРезультатыТуров.id_command, ЗапросРезультатыТуров.Команда, Sum(ЗапросРезультатыТуров.Забито) AS [Sum-Забито], Sum(ЗапросРезультатыТуров.Пропущено) AS [Sum-Пропущено], Sum(ЗапросРезультатыТуров.Очки) AS [Sum-Очки], Sum(ЗапросРезультатыТуров.Разность) AS [Sum-Разность]

FROM ЗапросРезультатыТуров

GROUP BY ЗапросРезультатыТуров.id_command, ЗапросРезультатыТуров.Команда

ORDER BY Sum(ЗапросРезультатыТуров.Очки) DESC , Sum(ЗапросРезультатыТуров.Разность) DESC;

Пример данного запроса представлен на рисунке 7.

Рисунок 7 – Итоги предварительного этапа

Зная итоги предварительного тура, заполняем таблицы исходными данными для дальнейшей работы – заполнение таблиц результатами финальных игр. Как уже говорилось, финальных туров будет два – один для команд, занявших места на предварительном этапе с 1 по 6, а другой – для команд – с 7 по 10 место. Результаты игр команд первой группы будут накапливаться в таблицах «ФинальныйТурнир1-6» и «ФиналРезультаты1-6», а второй группы – в таблицах «ФинальныйТурнир7-10» и «ФиналРезультаты7-10», соответственно. Исходными данными для них будут названия команд, занявших соответствующие места по результатам итогов предварительного турнира. Для получения списков этих команд, созданы два запроса. Один формирует список команд с 1 по 6 место (см. пример на рисунке 8):

SELECT TOP 6 ЗапросИтогиПредварительногоЭтапа.id_command, ЗапросИтогиПредварительногоЭтапа.Команда, ЗапросИтогиПредварительногоЭтапа.[Sum-Забито], ЗапросИтогиПредварительногоЭтапа.[Sum-Пропущено], ЗапросИтогиПредварительногоЭтапа.[Sum-Очки], ЗапросИтогиПредварительногоЭтапа.[Sum-Разность]

FROM ЗапросИтогиПредварительногоЭтапа;

а второй список с 7 по 10 место создает запрос (рисунок 9):

SELECT ЗапросTEMP.id_command, ЗапросTEMP.Команда, ЗапросTEMP.[Sum-Забито], ЗапросTEMP.[Sum-Пропущено], ЗапросTEMP.[Sum-Очки], ЗапросTEMP.[Sum-Разность]

FROM ЗапросTEMP

ORDER BY ЗапросTEMP.[Sum-Очки] DESC , ЗапросTEMP.[Sum-Разность] DESC;

Здесь запрос TEMP, является вспомогательным, чтобы получить список команд без сортировки по набранным очкам и разности забитых и пропущенных мячей:

SELECT TOP 4 ЗапросИтогиПредварительногоЭтапа.id_command, ЗапросИтогиПредварительногоЭтапа.Команда, ЗапросИтогиПредварительногоЭтапа.[Sum-Забито], ЗапросИтогиПредварительногоЭтапа.[Sum-Пропущено], ЗапросИтогиПредварительногоЭтапа.[Sum-Очки], ЗапросИтогиПредварительногоЭтапа.[Sum-Разность]

FROM ЗапросИтогиПредварительногоЭтапа

ORDER BY ЗапросИтогиПредварительногоЭтапа.[Sum-Очки], ЗапросИтогиПредварительногоЭтапа.[Sum-Разность];

Рисунок 8 – Команды, занявшие места с 1 по 6

Рисунок 9 – Команды, занявшие места с 7 по 10

Таблицы на рисунках 8 и 9, свою очередь, используется в качестве подстановок для заполнения таблиц «ФиналРезультаты1-6» и «ФиналРезультаты7-10», соответственно. На рисунке 10 представлен пример, демонстрирующий использование данных подстановок.

Рисунок 10 – Использование таблицы на рисунке 8 в качестве подстановки на форме ввода результатов туров в таблицу «ФиналРезультаты1-6».

Для окончательного подведения итогов чемпионата достаточно повторить методику, использованную ранее для подведения итогов предварительного этапа соревнования, но к результатам выступлений команд на финальном этапе:

1. ЗапросФиналИтоги1-6 формирует результаты финального турнира команд, занявших места с 1 по 6:

SELECT [ЗапросРезультатыТуров1-6].comand, Sum([ЗапросРезультатыТуров1-6].scored) AS [Sum-scored], Sum([ЗапросРезультатыТуров1-6].missing) AS [Sum-missing], Sum([ЗапросРезультатыТуров1-6].Очки) AS [Sum-Очки], Sum([ЗапросРезультатыТуров1-6].Разность) AS [Sum-Разность]

FROM [ЗапросРезультатыТуров1-6]

GROUP BY [ЗапросРезультатыТуров1-6].comand

ORDER BY Sum([ЗапросРезультатыТуров1-6].Очки) DESC , Sum([ЗапросРезультатыТуров1-6].Разность) DESC;

(рисунок 11)

Рисунок 11 – Итоги турнира команд первой финальной группы

2. ЗапросФиналИтоги7-10 формирует результаты финального турнира команд, занявших места с 7 по 10:

SELECT [ЗапросРезультатыТуров7-10].comand, Sum([ЗапросРезультатыТуров7-10].scored) AS [Sum-scored], Sum([ЗапросРезультатыТуров7-10].missing) AS [Sum-missing], Sum([ЗапросРезультатыТуров7-10].Очки) AS [Sum-Очки], Sum([ЗапросРезультатыТуров7-10].Разность) AS [Sum-Разность]

FROM [ЗапросРезультатыТуров7-10]

GROUP BY [ЗапросРезультатыТуров7-10].comand

ORDER BY Sum([ЗапросРезультатыТуров7-10].Очки) DESC , Sum([ЗапросРезультатыТуров7-10].Разность) DESC;

(рисунок 12)

Рисунок 12 – Итоги турнира команд второй финальной группы

Описанная методика предоставляет следующие возможности:

  • избавляет от необходимости считать очки и определять разность забитых и пропущенных мячей после каждого тура и этапа соревнования;

  • автоматически формирует списки команд для финальных подгрупп.