- •Примеры курсовых работ
- •Реферат
- •Введение
- •1 Исследование предметной области
- •1.1 Описание предметной области
- •1.2 Описание входных и выходных данных
- •2.1.2 Описание связей
- •2.2 Даталогическая модель
- •3 Практическая реализация базы данных
- •3.1 Выбор системы управления базами данных
- •3.2 Создание таблиц
- •3.3 Запросы
- •Заключение
- •Список использованных источников и литературы
- •4 Курса гр. 10-гр-20
- •Введение
- •1 Постановка задачи
- •2 Программная реализация решения задачи
- •2.1 Алгоритмизация проблемы
- •2.2 Реализация динамической части
- •2.3 Реализация исполняемой части
- •4 Руководство пользователя
- •Заключение
- •Список использованных источников и литературы
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 – Итоги турнира команд второй финальной группы
Описанная методика предоставляет следующие возможности:
избавляет от необходимости считать очки и определять разность забитых и пропущенных мячей после каждого тура и этапа соревнования;
автоматически формирует списки команд для финальных подгрупп.
