В современном мире, где цифровизация охватывает все сферы человеческой деятельности, спортивные школы не являются исключением. Эффективное управление информацией о спортсменах, тренерах, расписаниях, достижениях и соревнованиях становится краеугольным камнем успешного функционирования любого образовательного или спортивного учреждения. В контексте этих изменений, разработка и внедрение грамотно спроектированной базы данных (БД) становится не просто желательной, а критически необходимой задачей.
Почему это так важно? Потому что продуманная БД позволяет не только автоматизировать рутинные процессы, но и обеспечить точность, полноту и доступность данных, что, в свою очередь, способствует принятию более обоснованных управленческих решений. Ведь без актуальной и легкодоступной информации о прогрессе спортсменов или занятости тренеров, сложно принимать стратегические решения, которые будут способствовать росту и развитию школы.
Данная курсовая работа посвящена комплексному проектированию базы данных для спортивной школы, охватывая все этапы — от глубокого анализа предметной области до физической реализации и создания пользовательского интерфейса. Целью работы является разработка детального и академически обоснованного плана, который позволит студенту факультета информационных технологий или компьютерных наук создать функциональную и надежную БД. В рамках этого руководства мы не только представим общепринятые методологии, но и углубимся в тонкости нормализации данных, механизмы обеспечения целостности и обоснованного выбора СУБД, что является ключом к созданию высококачественного информационного продукта. Теоретическая значимость работы заключается в систематизации знаний по проектированию БД, а практическая — в предоставлении готовой методологии для решения реальной задачи автоматизации деятельности спортивной школы.
Теоретические Основы Проектирования Баз Данных
Проектирование баз данных — это не просто механическое создание таблиц, а сложный, многоступенчатый процесс, требующий глубокого понимания как предметной области, так и принципов работы с данными. Это искусство преобразования неформальных требований в стройную, логически выверенную структуру, способную эффективно хранить, обрабатывать и извлекать информацию.
Понятия и определения
Прежде чем погрузиться в детали проектирования, необходимо четко определить ключевые термины, которые формируют основу нашего понимания:
- Система Управления Базами Данных (СУБД): Это комплекс программных средств, предназначенный для создания, управления и обслуживания баз данных. СУБД выступает в роли посредника между пользователем или приложением и хранимыми данными, обеспечивая их целостность, безопасность и эффективный доступ. Примерами СУБД являются MySQL, PostgreSQL, Microsoft SQL Server, Oracle и Microsoft Access.
- Модель данных: Это абстракция, описывающая структуру данных, их взаимосвязи и ограничения. Она предоставляет пользователям и разработчикам способ трактовать данные не просто как набор значений, а как осмысленную информацию с определенными связями. Различают несколько типов моделей данных: иерархические, сетевые, реляционные (наиболее распространенные), объектно-ориентированные и NoSQL. В реляционной модели данные представляются в виде двумерных таблиц.
- Предметная область: Это часть реального мира или конкретной деятельности, информация о которой подлежит сбору, хранению и обработке в базе данных. Для нашей курсовой работы предметной областью является «спортивная школа», включающая все аспекты ее функционирования: учащихся, тренеров, расписание, соревнования и т.д. Предметная область рассматривается в трех проекциях: как она существует в реальности, как ее воспринимает проектировщик и как она может быть формализована символами.
- Нормализация: Это метод проектирования реляционных баз данных, направленный на устранение избыточности данных, предотвращение аномалий обновления, вставки и удаления, а также на улучшение целостности данных. Процесс нормализации заключается в декомпозиции (разделении) таблиц на более мелкие, логически связанные таблицы, приводя их к определенным нормальным формам.
- Ключ: Это один или несколько атрибутов (полей) таблицы, значения которых уникально идентифицируют каждую запись в этой таблице или устанавливают связь между таблицами. Различают первичные ключи (уникально идентифицируют запись в своей таблице) и внешние ключи (ссылаются на первичные ключи других таблиц, устанавливая связи).
Общие принципы и этапы проектирования БД
Процесс проектирования базы данных — это итеративная последовательность шагов, преобразующая неформальное описание предметной области в формализованную, эффективную и надежную структуру данных. Этапы проектирования не являются строго линейными; часто требуется возвращаться к предыдущим шагам для корректировки и уточнения.
Основные этапы проектирования БД:
- Системный анализ и словесное описание предметной области: На этом начальном этапе происходит глубокое погружение в исследуемую предметную область. Цель — собрать и задокументировать все требования к базе данных, понять бизнес-процессы, информационные потоки, определить, какая информация должна храниться и как она будет использоваться. Результатом является детальное словесное описание предметной области, которое служит отправной точкой для дальнейшего моделирования.
- Инфологическое (концептуальное) проектирование: Это первый этап формализации. На этом этапе строится высокоуровневая, абстрактная модель предметной области, не привязанная к конкретной СУБД. Главная задача — идентифицировать ключевые сущности, их атрибуты и взаимосвязи. Наиболее распространенным инструментом на этом этапе является ER-моделирование, позволяющее графически представить эти элементы.
- Выбор СУБД: После того как концептуальная модель сформирована, наступает время выбора конкретной СУБД. Этот выбор зависит от множества факторов, таких как требования к производительности, масштабируемости, безопасности, бюджету, а также опыт разработчиков. Различные СУБД имеют свои архитектурные особенности, преимущества и недостатки.
- Даталогическое (логическое) проектирование: На этом этапе инфологическая модель преобразуется в схему данных, соответствующую выбранной модели данных (например, реляционной). Здесь определяются таблицы, их поля, типы данных, первичные и внешние ключи, а также применяются принципы нормализации для устранения избыточности и аномалий. На этом этапе учитывается специфика выбранной модели данных, но еще не специфика конкретной СУБД.
- Физическое проектирование: Это последний этап, на котором логическая схема данных адаптируется под конкретную СУБД и физическую среду хранения. Здесь принимаются решения о выборе оптимальных типов данных, создании индексов для ускорения запросов, стратегий хранения данных на диске, а также разработке механизмов защиты и пользовательских представлений.
Трехуровневая схема ANSI/SPARC:
Для организации и описания данных предметной области часто используется трехуровневая архитектура ANSI/SPARC, которая разделяет представление данных на три уровня абстракции:
- Внешнее представление (External Schema): Это пользовательский уровень. Каждое внешнее представление описывает ту часть базы данных, которая интересна конкретному пользователю или приложению. Разные пользователи могут иметь разные внешние представления одной и той же базы данных, что позволяет им работать только с релевантной для них информацией и скрывает сложность всей структуры.
- Концептуальное представление (Conceptual Schema): Это центральный уровень. Оно описывает всю базу данных с точки зрения ее логической структуры, сущностей, их атрибутов и взаимосвязей. На этом уровне не учитываются детали физического хранения данных. Концептуальная схема является общей для всех пользователей и обеспечивает согласованное представление предметной области.
- Внутреннее представление (Internal Schema): Это физический уровень. Оно описывает, как данные фактически хранятся на физических носителях: организация файлов, индексов, методов доступа к данным. Этот уровень наиболее близок к аппаратному обеспечению и скрыт от большинства пользователей и даже от некоторых разработчиков приложений.
Эта трехуровневая архитектура обеспечивает независимость данных — возможность изменять внутреннее или концептуальное представление без необходимости переписывать внешние представления или приложения.
Анализ Предметной Области «Спортивная Школа»
Погружение в предметную область является первым и, возможно, самым критическим шагом в проектировании базы данных. Ошибка на этом этапе может привести к созданию нефункциональной или неэффективной системы. Наша задача — не просто собрать информацию, но и понять внутренние механизмы, логику процессов и потребности всех участников спортивной школы.
Структура и процессы спортивной школы
Спортивная школа — это сложный организм, деятельность которого охватывает множество взаимосвязанных процессов. Для эффективного проектирования базы данных необходимо рассмотреть основные компоненты этой системы:
- Учет учащихся:
- Прием и регистрация: Процесс зачисления новых спортсменов, сбор их личных данных (ФИО, дата рождения, пол, контактная информация родителей/опекунов), медицинских справок.
- Формирование групп: Распределение учащихся по возрастным категориям, уровням подготовки, спортивным дисциплинам и тренерам.
- Посещаемость: Отслеживание посещения занятий, фиксация пропусков и их причин.
- Платежи: Учет оплаты за обучение, льгот, задолженностей.
- Учет тренеров и персонала:
- Личные данные: ФИО, контактная информация, квалификация, опыт работы, спортивные звания и достижения.
- Расписание работы: Назначение тренировочных групп, часы занятий, участие в соревнованиях.
- Зарплата: Расчет и учет выплат.
- Спортивные дисциплины:
- Перечень: Список всех дисциплин, предлагаемых школой (например, плавание, футбол, художественная гимнастика, карате «Киокусинкай»).
- Описание: Характеристики дисциплин, требования к возрасту и подготовке.
- Расписание занятий:
- График тренировок: Время, дни недели, место проведения (зал, бассейн, стадион), тренер, группа, дисциплина.
- Изменения: Возможность оперативного внесения изменений в расписание.
- Соревнования и достижения:
- Планирование соревнований: Даты, места проведения, организаторы, дисциплины.
- Участие спортсменов: Регистрация участников, результаты, занятые места, присвоенные разряды и звания.
- Статистика достижений: Ведение истории выступлений каждого спортсмена.
- Инвентарь и оборудование:
- Учет: Наличие, состояние, выдача, возврат.
- Административные функции:
- Отчетность: Формирование различных отчетов для руководства, статистических данных.
- Управление доступом: Разграничение прав пользователей (директор, администратор, тренер, ветеринар в конно-спортивной школе) к различным частям системы.
Информационные потоки в спортивной школе весьма интенсивны. Например, информация о новом спортсмене поступает в систему, затем он распределяется по группам, назначается на занятия, его посещаемость фиксируется, а затем результаты его выступлений в соревнованиях заносятся в базу. Все эти данные взаимосвязаны и должны быть доступны для разных категорий пользователей — от тренера, которому нужна актуальная информация о своей группе, до директора, которому важны общие статистические данные и финансовые показатели. Что это значит для проектировщика? Необходимо предусмотреть гибкие механизмы доступа и представления данных, чтобы каждый пользователь мог эффективно выполнять свои задачи, не перегружаясь избыточной информацией.
Определение основных сущностей и их атрибутов
На основе анализа предметной области мы можем выделить ключевые сущности — независимые объекты, о которых необходимо хранить информацию, и их атрибуты — характеристики этих сущностей.
Рассмотрим основные сущности и их потенциальные атрибуты:
- Учащиеся (Спортсмены):
ID_Учащегося(Первичный ключ)Фамилия,Имя,ОтчествоДата_РожденияПолАдресТелефон_РодителяМедицинская_ГруппаДата_ЗачисленияID_Группы(Внешний ключ к «Группы»)РазрядСтатус(например, «Активный», «В отпуске», «Отчислен»)
- Тренеры:
ID_Тренера(Первичный ключ)Фамилия,Имя,ОтчествоДата_РожденияПолТелефонEmailОбразованиеДата_Начала_РаботыКвалификацияЗваниеКатегория_Тренера(Внешний ключ к «Категории_Тренеров»)
- Группы:
ID_Группы(Первичный ключ)Название_ГруппыГод_ФормированияВозрастная_КатегорияМаксимальное_Количество_УчащихсяID_Тренера(Внешний ключ к «Тренеры»)ID_Дисциплины(Внешний ключ к «Спортивные_Дисциплины»)
- Спортивные_Дисциплины:
ID_Дисциплины(Первичный ключ)Название_Дисциплины(например, «Плавание», «Карате Киокусинкай»)ОписаниеТребования_к_Подготовке
- Расписание: (может быть связующей сущностью или отдельной таблицей для детального расписания каждой группы)
ID_Занятия(Первичный ключ)ID_Группы(Внешний ключ к «Группы»)ID_Дисциплины(Внешний ключ к «Спортивные_Дисциплины»)ID_Тренера(Внешний ключ к «Тренеры»)День_НеделиВремя_Начала,Время_ОкончанияМесто_Проведения(например, «Зал №1», «Бассейн»)
- Соревнования:
ID_Соревнования(Первичный ключ)Название_СоревнованияДата_ПроведенияМесто_ПроведенияУровень_Соревнования(например, «Районный», «Областной», «Всероссийский»)
- Достижения: (связующая сущность между «Учащиеся» и «Соревнования»)
ID_Достижения(Первичный ключ)ID_Учащегося(Внешний ключ к «Учащиеся»)ID_Соревнования(Внешний ключ к «Соревнования»)Дисциплина_СоревнованияЗанятое_МестоПрисвоенный_Разряд_ЗваниеКомментарий
- Категории_Тренеров: (для нормализации данных о квалификации тренеров)
ID_Категории(Первичный ключ)Название_Категории(например, «Высшая», «Первая»)Описание_Требований
Этот детальный анализ сущностей и их атрибутов формирует прочный фундамент для следующего этапа — инфологического проектирования.
Инфологическое (Концептуальное) Проектирование: ER-моделирование
Инфологическое проектирование — это первый шаг в формализации словесного описания предметной области. На этом этапе мы создаем высокоуровневую, абстрактную модель, которая описывает «что» хранится в базе данных, а не «как». Эта модель служит мостом между пониманием предметной области и технической реализацией, позволяя как экспертам, так и разработчикам говорить на одном языке.
Основы ER-моделирования
Инфологическое проектирование, также известное как концептуальное или семантическое моделирование, фокусируется на построении модели предметной области без привязки к конкретной системе управления базами данных (СУБД). Цель этого этапа — максимально полно и непротиворечиво описать информационную структуру предметной области в терминах, понятных специалистам как в области информационных технологий, так и в самой предметной области.
Наиболее широко используемым инструментом для инфологического моделирования является модель «сущность-связь» (Entity-Relationship model, ER-модель), предложенная Питером Ченом в 1976 году. ER-модель стала фактическим стандартом благодаря своей интуитивности и способности наглядно представлять сложные взаимосвязи.
Основные компоненты ER-модели:
- Сущность (Entity): Это реальный или абстрактный объект, о котором необходимо хранить информацию. Сущность представляет собой класс однотипных объектов, а не конкретный экземпляр. Например, «Учащийся», «Тренер», «Группа» — это сущности. На ER-диаграммах сущности обычно изображаются в виде прямоугольников.
- Атрибут (Attribute): Это свойство, которое характеризует сущность. Каждый атрибут имеет имя и тип данных. Например, для сущности «Учащийся» атрибутами могут быть «Фамилия», «Имя», «Дата_Рождения». На диаграммах атрибуты часто изображаются в виде овалов, соединенных с сущностью. Ключевые атрибуты (первичные ключи) обычно подчеркиваются.
- Связь (Relationship): Это ассоциация или взаимодействие между двумя или более сущностями. Связи показывают, как сущности взаимодействуют друг с другом. Например, «Тренер ведет Группу», «Учащийся участвует в Соревновании». Связи на диаграммах изображаются в виде ромбов, соединяющих сущности.
Типы связей:
- Один-к-одному (1:1): Каждый экземпляр одной сущности связан максимум с одним экземпляром другой сущности, и наоборот. Например, «Директор руководит спортивной школой» (один директор — одна школа).
- Один-ко-многим (1:М): Один экземпляр одной сущности связан с несколькими экземплярами другой сущности, но каждый экземпляр второй сущности связан только с одним экземпляром первой. Например, «Один Тренер ведет несколько Групп», но «Одна Группа ведется только одним Тренером».
- Многие-ко-многим (M:N): Каждый экземпляр одной сущности может быть связан с несколькими экземплярами другой сущности, и наоборот. Например, «Один Учащийся может участвовать во многих Соревнованиях», и «В одном Соревновании может участвовать много Учащихся».
Модальность связи:
Модальность указывает на обязательность участия сущности в связи.
- «Может» (0): Участие сущности в связи необязательно. Например, тренер может вести группу, а может быть и без группы.
- «Должен» (1): Участие сущности в связи обязательно. Например, у каждого учащегося должна быть группа.
ER-диаграммы являются мощным инструментом для визуализации структуры данных, их обсуждения с экспертами предметной области и отладки концепции до начала детальной технической реализации.
Построение ER-диаграммы для спортивной школы
Приступим к пошаговому построению ER-диаграммы для предметной области «Спортивная школа», опираясь на ранее определенные сущности и их атрибуты. Мы будем использовать стандартную нотацию Чена или аналогичную, чтобы наглядно представить модель.
Шаг 1: Добавление сущностей
Начнем с размещения основных сущностей на диаграмме в виде прямоугольников:
- Учащиеся
- Тренеры
- Группы
- Спортивные_Дисциплины
- Расписание
- Соревнования
- Достижения
- Категории_Тренеров
Шаг 2: Добавление атрибутов к сущностям и определение первичных ключей
Теперь для каждой сущности добавим ее атрибуты, выделяя первичные ключи (подчеркиванием).
- Учащиеся (
ID_Учащегося, Фамилия, Имя, Отчество, Дата_Рождения, Пол, Адрес, Телефон_Родителя, Медицинская_Группа, Дата_Зачисления, Разряд, Статус) - Тренеры (
ID_Тренера, Фамилия, Имя, Отчество, Дата_Рождения, Пол, Телефон, Email, Образование, Дата_Начала_Работы, Квалификация, Звание) - Группы (
ID_Группы, Название_Группы, Год_Формирования, Возрастная_Категория, Максимальное_Количество_Учащихся) - Спортивные_Дисциплины (
ID_Дисциплины, Название_Дисциплины, Описание, Требования_к_Подготовке) - Расписание (
ID_Занятия, День_Недели, Время_Начала, Время_Окончания, Место_Проведения) - Соревнования (
ID_Соревнования, Название_Соревнования, Дата_Проведения, Место_Проведения, Уровень_Соревнования) - Достижения (
ID_Достижения, Занятое_Место, Присвоенный_Разряд_Звание, Комментарий) - Категории_Тренеров (
ID_Категории, Название_Категории, Описание_Требований)
Шаг 3: Определение связей между сущностями
Определим связи, их типы (кратность) и модальность, используя ромбы и соответствующие обозначения.
- Тренеры — Категории_Тренеров:
- Связь: «Имеет_Категорию»
- Тип: 1:М (Один Тренер имеет одну Категорию, но одна Категория может быть у многих Тренеров)
- Модальность: Тренер должен иметь категорию (1), категория может быть ни у кого (0) или у многих (М).
- Тренеры — Группы:
- Связь: «Ведет»
- Тип: 1:М (Один Тренер может вести несколько Групп, но одна Группа ведется только одним Тренером)
- Модальность: Тренер может не вести группу (0), Группа должна иметь тренера (1).
- Группы — Спортивные_Дисциплины:
- Связь: «Обучает_Дисциплине»
- Тип: 1:М (Одна Группа обучается одной Спортивной_Дисциплине, но одна Дисциплина может быть в нескольких Группах)
- Модальность: Группа должна обучать дисциплине (1), Дисциплина может не быть ни в одной группе (0).
- Учащиеся — Группы:
- Связь: «Входит_в»
- Тип: М:1 (Много Учащихся могут входить в одну Группу, но один Учащийся входит только в одну Группу)
- Модальность: Учащийся должен входить в группу (1), Группа может не иметь учащихся (0).
- Расписание — Группы:
- Связь: «Имеет_Занятие»
- Тип: М:1 (Много Занятий в Расписании относятся к одной Группе, но одно Занятие относится к одной Группе)
- Модальность: Занятие должно принадлежать Группе (1), Группа может не иметь занятий (0).
- Расписание — Тренеры:
- Связь: «Проводит_Занятие»
- Тип: М:1 (Много Занятий в Расписании проводятся одним Тренером, но одно Занятие проводится одним Тренером)
- Модальность: Занятие должно проводиться Тренером (1), Тренер может не проводить занятий (0).
- Расписание — Спортивные_Дисциплины:
- Связь: «По_Дисциплине»
- Тип: М:1 (Много Занятий в Расписании относятся к одной Спортивной_Дисциплине, но одно Занятие относится к одной Дисциплине)
- Модальность: Занятие должно быть по Дисциплине (1), Дисциплина может не иметь занятий (0).
- Учащиеся — Достижения — Соревнования:
- Это связь типа М:N между «Учащиеся» и «Соревнования», которая реализуется через связующую сущность «Достижения».
- Связь «Учащиеся» — «Достижения»: «Имеет_Достижение» (1:М). Учащийся может не иметь достижений (0), Достижение должно принадлежать Учащемуся (1).
- Связь «Достижения» — «Соревнования»: «Получено_на» (М:1). Достижение должно быть получено на Соревновании (1), Соревнование может не иметь достижений (0).
Визуализация ER-диаграммы (текстовое описание, так как невозможно нарисовать графически):
Сущность: УЧАЩИЕСЯ
- ID_Учащегося (PK)
- Фамилия
- Имя
- Отчество
- Дата_Рождения
- Пол
- ... (другие атрибуты)
Сущность: ТРЕНЕРЫ
- ID_Тренера (PK)
- Фамилия
- Имя
- Отчество
- ... (другие атрибуты)
Сущность: ГРУППЫ
- ID_Группы (PK)
- Название_Группы
- ... (другие атрибуты)
Сущность: СПОРТИВНЫЕ_ДИСЦИПЛИНЫ
- ID_Дисциплины (PK)
- Название_Дисциплины
- ... (другие атрибуты)
Сущность: РАСПИСАНИЕ
- ID_Занятия (PK)
- День_Недели
- Время_Начала
- ... (другие атрибуты)
Сущность: СОРЕВНОВАНИЯ
- ID_Соревнования (PK)
- Название_Соревнования
- ... (другие атрибуты)
Сущность: ДОСТИЖЕНИЯ
- ID_Достижения (PK)
- Занятое_Место
- ... (другие атрибуты)
Сущность: КАТЕГОРИИ_ТРЕНЕРОВ
- ID_Категории (PK)
- Название_Категории
- ... (другие атрибуты)
Связи:
ТРЕНЕРЫ --<Имеет_Категорию>-- КАТЕГОРИИ_ТРЕНЕРОВ (1:М, ТРЕНЕРЫ(0,М) -- КАТЕГОРИИ_ТРЕНЕРОВ(1,1))
(Каждый тренер имеет одну категорию, категория может быть у многих или ни у кого)
ТРЕНЕРЫ --<Ведет>-- ГРУППЫ (1:М, ТРЕНЕРЫ(0,М) -- ГРУППЫ(1,1))
(Один тренер ведет много групп, каждая группа ведется одним тренером)
ГРУППЫ --<Обучает_Дисциплине>-- СПОРТИВНЫЕ_ДИСЦИПЛИНЫ (М:1, ГРУППЫ(1,М) -- СПОРТИВНЫЕ_ДИСЦИПЛИНЫ(0,1))
(Группа обучается одной дисциплине, дисциплина может быть в многих группах)
УЧАЩИЕСЯ --<Входит_в>-- ГРУППЫ (М:1, УЧАЩИЕСЯ(1,М) -- ГРУППЫ(0,1))
(Много учащихся в одной группе, учащийся входит в одну группу)
РАСПИСАНИЕ --<Имеет_Занятие>-- ГРУППЫ (М:1, РАСПИСАНИЕ(1,М) -- ГРУППЫ(0,1))
(Занятие относится к одной группе, группа может иметь много занятий)
РАСПИСАНИЕ --<Проводит_Занятие>-- ТРЕНЕРЫ (М:1, РАСПИСАНИЕ(1,М) -- ТРЕНЕРЫ(0,1))
(Занятие проводится одним тренером, тренер может проводить много занятий)
РАСПИСАНИЕ --<По_Дисциплине>-- СПОРТИВНЫЕ_ДИСЦИПЛИНЫ (М:1, РАСПИСАНИЕ(1,М) -- СПОРТИВНЫЕ_ДИСЦИПЛИНЫ(0,1))
(Занятие по одной дисциплине, дисциплина может иметь много занятий)
УЧАЩИЕСЯ --<Имеет_Достижение>-- ДОСТИЖЕНИЯ (1:М, УЧАЩИЕСЯ(0,М) -- ДОСТИЖЕНИЯ(1,1))
(Учащийся имеет много достижений, достижение принадлежит одному учащемуся)
ДОСТИЖЕНИЯ --<Получено_на>-- СОРЕВНОВАНИЯ (М:1, ДОСТИЖЕНИЯ(1,М) -- СОРЕВНОВАНИЯ(0,1))
(Достижение получено на одном соревновании, соревнование может иметь много достижений)
Таким образом, ER-диаграмма, построенная на этом этапе, предоставляет наглядное и структурированное представление о предметной области «Спортивная школа», которое послужит основой для следующего, логического этапа проектирования.
Логическое Проектирование и Нормализация Базы Данных
После того как концептуальная модель предметной области сформирована и визуализирована в виде ER-диаграммы, наступает этап логического проектирования. Здесь мы переводим абстрактные сущности и связи в конкретные структуры, соответствующие выбранной модели данных – в нашем случае, реляционной. Этот этап критически важен, поскольку он определяет, как данные будут организованы в таблицы, какие поля будут использоваться, и как эти таблицы будут связаны между собой. Именно на этом этапе в игру вступает нормализация – мощный инструмент для обеспечения качества и эффективности базы данных.
Переход от ER-модели к реляционной схеме
Логическое проектирование — это мост между абстрактной концептуальной моделью и физической реализацией базы данных. На этом этапе мы трансформируем сущности, атрибуты и связи ER-диаграммы в реляционные таблицы (отношения), их столбцы (атрибуты) и связи между ними.
Основные правила трансформации:
- Сущности становятся таблицами: Каждая сильная сущность из ER-диаграммы (например, «Учащиеся», «Тренеры», «Группы») преобразуется в отдельную таблицу в реляционной схеме.
- Атрибуты становятся столбцами: Атрибуты каждой сущности становятся столбцами (полями) соответствующей таблицы. Первичные ключи сущностей становятся первичными ключами таблиц.
- Домен: Для каждого столбца определяется домен — множество допустимых значений, которые может принимать этот атрибут (например, для
Дата_Рождениядомен — это даты в определенном диапазоне).
- Домен: Для каждого столбца определяется домен — множество допустимых значений, которые может принимать этот атрибут (например, для
- Связи становятся ключевыми полями или отдельными таблицами:
- Связи 1:1 и 1:М: Обычно реализуются путем добавления внешнего ключа в дочернюю (зависимую) таблицу. Внешний ключ — это столбец или набор столбцов в одной таблице, который ссылается на первичный ключ в другой таблице. Например, в таблице
ГРУППЫбудет внешний ключID_Тренера, ссылающийся наID_Тренерав таблицеТРЕНЕРЫ. - Связи М:N (многие-ко-многим): Преобразуются в новую, промежуточную (или связующую) таблицу. Эта таблица будет содержать первичные ключи обеих связанных сущностей в качестве своих внешних ключей, которые, в совокупности, могут образовывать ее собственный составной первичный ключ. Например, для связи М:N между «Учащиеся» и «Соревнования» через «Достижения» будет создана таблица
ДОСТИЖЕНИЯ, содержащаяID_УчащегосяиID_Соревнованияв качестве внешних ключей, а также собственные атрибуты достижения.
- Связи 1:1 и 1:М: Обычно реализуются путем добавления внешнего ключа в дочернюю (зависимую) таблицу. Внешний ключ — это столбец или набор столбцов в одной таблице, который ссылается на первичный ключ в другой таблице. Например, в таблице
Пример преобразования:
Сущность: ТРЕНЕРЫ
ID_Тренера(PK)- Фамилия
- Имя
- Отчество
- …
Сущность: ГРУППЫ
ID_Группы(PK)- Название_Группы
- …
Связь: «Ведет» (1:М от ТРЕНЕРЫ к ГРУППЫ)
Результат в реляционной схеме:
Таблица ТРЕНЕРЫ:
ID_Тренера(PRIMARY KEY)Фамилия(VARCHAR)Имя(VARCHAR)Отчество(VARCHAR)- …
Таблица ГРУППЫ:
ID_Группы(PRIMARY KEY)Название_Группы(VARCHAR)ID_Тренера(FOREIGN KEY REFERENCES ТРЕНЕРЫ(ID_Тренера))- …
Таким образом, логическое проектирование устанавливает логическую структуру БД, ее таблицы, их поля, типы данных и логические связи, готовя почву для дальнейшей реализации.
Концепция нормализации и нормальные формы
Нормализация — это краеугольный камень проектирования реляционных баз данных, обеспечивающий их эффективность, надежность и гибкость. Это не просто свод правил, а методология, позволяющая структурировать данные таким образом, чтобы минимизировать избыточность и предотвратить логические аномалии.
Цели нормализации:
- Устранение избыточности данных: Избыточность возникает, когда одна и та же информация хранится в нескольких местах. Например, если данные о тренере (ФИО, телефон) повторяются в каждой записи о группе, которую он ведет. Избыточность тратит дисковое пространство и, что более важно, усложняет поддержание согласованности.
- Предотвращение аномалий обновления: Если данные хранятся избыточно, при обновлении одного экземпляра информации можно забыть обновить другие, что приводит к противоречивым данным. Например, изменение телефона тренера в одной записи группы, но не в других.
- Предотвращение аномалий вставки: Вставка новой информации может быть затруднена, если она связана с данными, которые еще не существуют. Например, нельзя добавить нового тренера, если он еще не ведет ни одной группы (если данные тренера хранятся только в таблице групп).
- Предотвращение аномалий удаления: Удаление одной записи может привести к потере ценной информации, которая была связана с другими данными. Например, удаление последней группы тренера может привести к потере всей информации о самом тренере.
- Упрощение применения ограничений целостности: Нормализованная структура данных упрощает применение правил, которые обеспечивают точность и согласованность данных (например, уникальность значений, допустимость значений).
Процесс нормализации заключается в последовательном приведении отношений (таблиц) к определенным нормальным формам (НФ), каждая из которых накладывает все более строгие требования к структуре таблицы.
Детальное рассмотрение нормальных форм (1NF, 2NF, 3NF, BCNF) с примерами из спортивной школы
Рассмотрим каждую нормальную форму подробно, используя конкретные примеры из предметной области спортивной школы.
Первая нормальная форма (1NF)
Определение: Отношение находится в 1NF, если все его атрибуты являются атомарными (неделимыми), и в таблице отсутствуют повторяющиеся группы атрибутов. Это означает, что каждая ячейка таблицы должна содержать одно неделимое значение, а не список значений или другую таблицу.
Требования:
- Каждая строка таблицы должна быть уникальной (иметь первичный ключ).
- Значения в каждом столбце должны быть атомарными (неделимыми).
- Отсутствие повторяющихся групп атрибутов.
Пример из спортивной школы:
Предположим, у нас есть исходная таблица УЧАЩИЕСЯ_И_ДАННЫЕ_РОДИТЕЛЕЙ:
| ID_Учащегося | ФИО_Учащегося | Телефон_Родителя | Адрес_Родителя | Спорт_Дисциплины |
|---|---|---|---|---|
| 101 | Иванов И.И. | +79001112233 | ул. Мира, 1 | Футбол, Плавание |
| 102 | Петров П.П. | +79004445566 | ул. Лесная, 5 | Баскетбол |
Нарушение 1NF:
ФИО_Учащегосяне атомарно (можно разделить на Фамилию, Имя, Отчество).Спорт_Дисциплинысодержит повторяющуюся группу значений (несколько дисциплин в одной ячейке).
Приведение к 1NF:
- Разделяем
ФИО_УчащегосянаФамилия_Учащегося,Имя_Учащегося,Отчество_Учащегося. - Выносим повторяющиеся спортивные дисциплины в отдельную таблицу
УЧАЩИЕСЯ_ДИСЦИПЛИНЫи связываем ее сУЧАЩИЕСЯ.
Таблица УЧАЩИЕСЯ:
| ID_Учащегося | Фамилия_Учащегося | Имя_Учащегося | Отчество_Учащегося | Телефон_Родителя | Адрес_Родителя |
|---|---|---|---|---|---|
| 101 | Иванов | Иван | Иванович | +79001112233 | ул. Мира, 1 |
| 102 | Петров | Петр | Петрович | +79004445566 | ул. Лесная, 5 |
Таблица УЧАЩИЕСЯ_ДИСЦИПЛИНЫ:
| ID_Учащегося (FK) | ID_Дисциплины (FK) |
|---|---|
| 101 | 1 (Футбол) |
| 101 | 2 (Плавание) |
| 102 | 3 (Баскетбол) |
Теперь обе таблицы находятся в 1NF.
Вторая нормальная форма (2NF)
Определение: Отношение находится во 2NF, если оно находится в 1NF, и каждый неключевой атрибут полностью функционально зависит от каждого потенциального ключа. Это означает, что неключевой атрибут не должен зависеть только от части составного первичного ключа.
Требования:
- Таблица находится в 1NF.
- Все неключевые атрибуты полностью функционально зависимы от всего первичного ключа (для таблиц с составным первичным ключом).
Пример из спортивной школы:
Предположим, у нас есть таблица РАСПИСАНИЕ_ЗАНЯТИЙ_ДЕТАЛИ с составным первичным ключом (ID_Группы, ID_Дисциплины, День_Недели, Время_Начала):
| ID_Группы (часть PK) | ID_Дисциплины (часть PK) | День_Недели (часть PK) | Время_Начала (часть PK) | Название_Дисциплины | Место_Проведения | ФИО_Тренера |
|---|---|---|---|---|---|---|
| 1 | 10 | Пн | 18:00 | Фу��бол | Стадион | Сидоров С.С. |
| 1 | 10 | Ср | 18:00 | Футбол | Стадион | Сидоров С.С. |
| 2 | 20 | Вт | 17:00 | Плавание | Бассейн | Петрова В.Г. |
Нарушение 2NF:
Название_Дисциплинызависит только отID_Дисциплины(части первичного ключа).ФИО_Тренераможет зависеть отID_ГруппыилиID_Дисциплины, но не от всего составного ключа.Место_Проведенияможет зависеть отID_ДисциплиныилиID_Группы.
Приведение к 2NF:
Выносим атрибуты, зависящие только от части первичного ключа, в отдельные таблицы.
Таблица РАСПИСАНИЕ_ЗАНЯТИЙ:
| ID_Группы (FK, часть PK) | ID_Дисциплины (FK, часть PK) | День_Недели (часть PK) | Время_Начала (часть PK) | ID_Тренера (FK) |
|---|---|---|---|---|
| 1 | 10 | Пн | 18:00 | 101 |
| 1 | 10 | Ср | 18:00 | 101 |
| 2 | 20 | Вт | 17:00 | 102 |
Таблица СПОРТИВНЫЕ_ДИСЦИПЛИНЫ:
| ID_Дисциплины (PK) | Название_Дисциплины | Место_Проведения_По_Умолчанию |
|---|---|---|
| 10 | Футбол | Стадион |
| 20 | Плавание | Бассейн |
(Предполагаем, что Место_Проведения в основном зависит от дисциплины)
Таблица ТРЕНЕРЫ (уже существует или создается):
| ID_Тренера (PK) | ФИО_Тренера |
|---|---|
| 101 | Сидоров С.С. |
| 102 | Петрова В.Г. |
Теперь таблица РАСПИСАНИЕ_ЗАНЯТИЙ находится во 2NF.
Третья нормальная форма (3NF)
Определение: Отношение находится в 3NF, если оно находится во 2NF, и отсутствуют транзитивные функциональные зависимости неключевых атрибутов от первичного ключа. Транзитивная зависимость возникает, когда неключевой атрибут зависит от другого неключевого атрибута, который, в свою очередь, зависит от первичного ключа.
Требования:
- Таблица находится во 2NF.
- Отсутствие транзитивных зависимостей (неключевые атрибуты не должны зависеть от других неключевых атрибутов).
Пример из спортивной школы:
Предположим, у нас есть таблица ТРЕНЕРЫ_КВАЛИФИКАЦИЯ:
| ID_Тренера (PK) | ФИО_Тренера | Звание | Категория_Тренера | Описание_Категории |
|---|---|---|---|---|
| 101 | Сидоров С.С. | Мастер | Высшая | Тренер с опытом… |
| 102 | Петрова В.Г. | КМС | Первая | Тренер-специалист… |
Нарушение 3NF:
Описание_Категориизависит отКатегория_Тренера, аКатегория_Тренеразависит отID_Тренера. Это транзитивная зависимость:ID_Тренера→Категория_Тренера→Описание_Категории.
Приведение к 3NF:
Выносим информацию о категории тренера в отдельную таблицу.
Таблица ТРЕНЕРЫ:
| ID_Тренера (PK) | ФИО_Тренера | Звание | ID_Категории (FK) |
|---|---|---|---|
| 101 | Сидоров С.С. | Мастер | 1 |
| 102 | Петрова В.Г. | КМС | 2 |
Таблица КАТЕГОРИИ_ТРЕНЕРОВ:
| ID_Категории (PK) | Название_Категории | Описание_Категории |
|---|---|---|
| 1 | Высшая | Тренер с опытом… |
| 2 | Первая | Тренер-специалист… |
Теперь обе таблицы находятся в 3NF.
Нормальная форма Бойса-Кодда (BCNF)
Определение: Отношение находится в BCNF тогда и только тогда, когда для каждой нетривиальной функциональной зависимости X → Y детерминант X является суперключом. Это более строгая форма 3NF и устраняет некоторые аномалии, которые могут оставаться в 3NF в случаях, когда таблица имеет несколько перекрывающихся потенциальных ключей.
Требования:
- Таблица находится в 3NF.
- Каждый детерминант (атрибут или набор атрибутов, от которого функционально зависят другие атрибуты) является суперключом (то есть, он сам или содержит потенциальный ключ).
Пример из спортивной школы (гипотетический, для демонстрации):
Предположим, что в спортивной школе действует очень специфическое правило:
- Каждая группа ведет только одну дисциплину.
- В одной группе по одной дисциплине всегда ведет только один тренер.
- Но, один и тот же тренер может вести одну и ту же дисциплину в разных группах.
- И ключевое: одна и та же дисциплина в конкретной группе всегда однозначно определяет тренера, который её ведет.
Рассмотрим таблицу ГРУППЫ_ДИСЦИПЛИНЫ_ТРЕНЕРЫ:
| ID_Группы (PK) | ID_Дисциплины (PK) | ID_Тренера |
|---|---|---|
| 1 | 10 (Футбол) | 101 (Сидоров) |
| 2 | 10 (Футбол) | 102 (Петров) |
| 1 | 20 (Плавание) | 103 (Иванов) |
Составной первичный ключ: (ID_Группы, ID_Дисциплины)
Функциональные зависимости:
- (
ID_Группы,ID_Дисциплины) →ID_Тренера(Первичный ключ определяет тренера) ID_Дисциплины→ID_Тренера(Это НЕверно в общем случае, но предположим, что в этой конкретной школе есть такое правило, для демонстрации BCNF) — На самом деле, если ID_Дисциплины → ID_Тренера, то это было бы 3NF, не BCNF.
Пересмотренный гипотетический случай для BCNF: Предположим, что в нашей школе действует правило: определенный предмет в конкретной группе может преподавать только один тренер. Однако, возможно, что один тренер может преподавать несколько предметов, и один предмет может преподавать несколько тренеров. А также, у нас есть уникальный ID_Занятия.
Пусть у нас есть таблица ГРУППА_ЗАНЯТИЕ_ТРЕНЕР:
| ID_Занятия (PK) | ID_Группы | ID_Дисциплины | ID_Тренера |
|---|---|---|---|
| 1 | 1 | 10 (Футбол) | 101 (Сидоров) |
| 2 | 1 | 20 (Плавание) | 103 (Иванов) |
| 3 | 2 | 10 (Футбол) | 102 (Петров) |
Дополнительное бизнес-правило, приводящее к нарушению BCNF (но не 3NF):
ID_ГруппыиID_Дисциплинывместе однозначно определяютID_Тренера.ID_ТренераиID_Дисциплинывместе однозначно определяютID_Группы(это более редкий случай, но возможный).
Если бы существовала функциональная зависимость: (ID_Группы, ID_Дисциплины) → ID_Тренера, и одновременно ID_Тренера → ID_Группы (то есть, тренер ведет только одну группу) и ID_Тренера → ID_Дисциплины (то есть, тренер ведет только одну дисциплину), то BCNF была бы нарушена, потому что ID_Тренера был бы детерминантом, но не суперключом для всей таблицы.
Более простой пример нарушения BCNF, где 3NF не нарушена:
Пусть у нас есть таблица УЧАЩИЙСЯ_ДИСЦИПЛИНА_ТРЕНЕР:
| ID_Учащегося (PK) | ID_Дисциплины (PK) | ID_Тренера |
|---|---|---|
| 1 | Футбол | Сидоров |
| 2 | Футбол | Сидоров |
| 1 | Плавание | Петров |
Потенциальные ключи: (ID_Учащегося, ID_Дисциплины)
Функциональные зависимости:
- (
ID_Учащегося,ID_Дисциплины) →ID_Тренера(первичный ключ определяет тренера) ID_Дисциплины→ID_Тренера(Предположим, что в этой школе каждый предмет преподает только один тренер. *Это и есть та редкая ситуация, когда 3NF не нарушена, но BCNF — да.* В 3NF нет транзитивных зависимостей. ЗдесьID_Дисциплины— детерминант, но не суперключ.)
Нарушение BCNF: Детерминант ID_Дисциплины не является суперключом для всей таблицы.
Приведение к BCNF:
Разделяем таблицу на две:
Таблица УЧАЩИЙСЯ_ДИСЦИПЛИНЫ:
| ID_Учащегося (PK, FK) | ID_Дисциплины (PK, FK) |
|---|---|
| 1 | Футбол |
| 2 | Футбол |
| 1 | Плавание |
Таблица ДИСЦИПЛИНА_ТРЕНЕР:
| ID_Дисциплины (PK, FK) | ID_Тренера (FK) |
|---|---|
| Футбол | Сидоров |
| Плавание | Петров |
Теперь обе таблицы находятся в BCNF, так как все детерминанты являются суперключами.
Глубокое понимание и применение нормальных форм позволяет создать надежную, легко поддерживаемую и масштабируемую базу данных. Однако стоит помнить, что чрезмерная нормализация может привести к увеличению количества таблиц и сложности запросов (join’ов), что иногда негативно сказывается на производительности. Поэтому на практике часто ищут баланс между нормализацией и денормализацией, исходя из конкретных требований к системе. Для курсовой работы желательно довести модель минимум до 3NF.
Обеспечение Целостности Данных в Базе Данных Спортивной Школы
Целостность данных — это гарантия того, что информация в базе данных является точной, полной и согласованной на протяжении всего ее жизненного цикла. Без строгих правил целостности база данных быстро превратится в хаотичное хранилище противоречивых и бессмысленных сведений. Для спортивной школы, где точность данных о спортсменах, их достижениях и расписаниях критически важна, обеспечение целостности является приоритетной задачей.
Типы ограничений целостности: доменная, сущностная, ссылочная
В реляционных базах данных выделяют три основных типа ограничений целостности, каждый из которых играет свою роль в поддержании качества данных:
- Доменная целостность (Domain Integrity):
- Назначение: Определяет допустимый набор значений для каждого атрибута (столбца) в таблице. Это базовый уровень контроля, который гарантирует, что каждое значение в столбце соответствует своему типу и формату, предотвращая ввод некорректных данных.
- Реализация: Доменная целостность достигается путем задания типов данных (например,
INTEGERдля чисел,VARCHAR(255)для текста,DATEдля дат), ограниченийCHECK(например, возраст спортсмена должен быть больше 5 лет, оценка должна быть в диапазоне от 1 до 5),NOT NULL(запрет на пустые значения), а также использованиемDEFAULTзначений. - Пример для спортивной школы:
- Поле
Дата_Рожденияв таблицеУЧАЩИЕСЯдолжно иметь типDATE. - Поле
Полдолжно принимать только значения ‘М’ или ‘Ж’. - Поле
Разрядв таблицеДОСТИЖЕНИЯможет быть ограничено значениями, такими как ‘КМС’, ‘МС’, ‘I разряд’ и т.д. - Поле
Телефон_Родителядолжно бытьNOT NULL.
- Поле
- Сущностная целостность (Entity Integrity):
- Назначение: Гарантирует уникальную идентификацию каждой записи (строки) в таблице. Это предотвращает дублирование информации и обеспечивает возможность однозначно обращаться к любому экземпляру сущности.
- Реализация: Сущностная целостность реализуется с помощью первичного ключа (PRIMARY KEY). Первичный ключ должен быть уникальным для каждой записи в таблице и не может содержать значения
NULL. Уникальный индекс первичного ключа – это индекс, передающий столбцу в таблице все свойства первичного ключа, по которому СУБД определяет первичный ключ и устанавливает условие ссылочной целостности. - Пример для спортивной школы:
ID_Учащегосяв таблицеУЧАЩИЕСЯявляется первичным ключом, гарантируя, что каждый спортсмен имеет уникальный идентификатор.ID_Группыв таблицеГРУППЫ— первичный ключ, обеспечивающий уникальность каждой тренировочной группы.
- Ссылочная целостность (Referential Integrity):
- Назначение: Поддерживает согласованность связей между таблицами. Она гарантирует, что внешний ключ в дочерней таблице либо ссылается на существующее значение первичного ключа в родительской таблице, либо содержит
NULL(если это разрешено). Это предотвращает «висячие ссылки» и гарантирует, что связанные данные всегда существуют. - Реализация: Ссылочная целостность реализуется с помощью внешних ключей (FOREIGN KEY), которые связывают дочернюю таблицу с родительской. При этом задаются правила, определяющие поведение СУБД при попытке изменить или удалить данные в родительской таблице, на которые ссылаются внешние ключи в дочерней таблице.
- Пример для спортивной школы:
- Поле
ID_Группыв таблицеУЧАЩИЕСЯявляется внешним ключом, ссылающимся наID_Группыв таблицеГРУППЫ. Это гарантирует, что каждый учащийся приписан к существующей группе. - Поле
ID_Тренерав таблицеГРУППЫявляется внешним ключом, ссылающимся наID_Тренерав таблицеТРЕНЕРЫ.
- Поле
- Назначение: Поддерживает согласованность связей между таблицами. Она гарантирует, что внешний ключ в дочерней таблице либо ссылается на существующее значение первичного ключа в родительской таблице, либо содержит
Реализация ссылочной целостности и правила CASCADE/RESTRICT/SET NULL
Ссылочная целостность — это не просто объявление внешнего ключа; это еще и определение того, как система должна реагировать на операции изменения или удаления данных, которые могут нарушить эту целостность. В SQL для этого используются различные действия для внешних ключей при операциях ON DELETE и ON UPDATE.
Рассмотрим основные действия:
RESTRICT(илиNO ACTION):- Поведение: Эта опция предотвращает операцию удаления или обновления в родительской таблице, если существуют связанные строки в дочерней таблице. Запрос будет отклонен.
- Разница:
RESTRICTобычно проверяет ограничение немедленно, в то время какNO ACTIONоткладывает проверку до конца выполнения SQL-оператора (или транзакции). На практике их поведение часто схоже. - Пример для спортивной школы: Если мы пытаемся удалить запись о тренере (из таблицы
ТРЕНЕРЫ), который ведет хотя бы одну группу (ссылка изГРУППЫ.ID_Тренера), система выдаст ошибку, запретив удаление. Это полезно, когда нужно убедиться, что важные родительские записи не будут случайно удалены, пока на них есть ссылки.
CASCADE:- Поведение: При удалении или обновлении строки в родительской таблице, соответствующие строки в дочерней таблице также автоматически удаляются или обновляются. Это действие обеспечивает автоматическое распространение изменений.
- Пример для спортивной школы:
ON DELETE CASCADE: Если мы удаляем запись обУЧАЩЕМСЯиз таблицыУЧАЩИЕСЯ, все связанные с ним записи в таблицеДОСТИЖЕНИЯ(о его результатах на соревнованиях) будут автоматически удалены. Это логично, поскольку достижения без спортсмена не имеют смысла.ON UPDATE CASCADE: ЕслиID_Тренераизменится в таблицеТРЕНЕРЫ, то это изменение автоматически отразится во всех записях таблицыГРУППЫ, где этотID_Тренераиспользуется как внешний ключ.
SET NULL:- Поведение: При удалении или обновлении строки в родительской таблице, значения внешних ключей в соответствующих дочерних строках устанавливаются в
NULL. Это возможно только в том случае, если столбец внешнего ключа в дочерней таблице допускает значенияNULL(то есть, он не был определен какNOT NULL). - Пример для спортивной школы:
ON DELETE SET NULL: Если мы удаляем запись оТРЕНЕРЕ, а полеID_Тренерав таблицеГРУППЫдопускаетNULL(то есть, группа может временно остаться без тренера), то при удалении тренера,ID_Тренераво всех его группах будет установлен вNULL. Это может быть полезно, если группа продолжает существовать, но временно не имеет назначенного тренера.ON UPDATE SET NULL: Аналогично, при обновлении первичного ключа тренера, соответствующие внешние ключи вГРУППЫбудут установлены вNULL.
- Поведение: При удалении или обновлении строки в родительской таблице, значения внешних ключей в соответствующих дочерних строках устанавливаются в
Выбор действия:
Выбор между RESTRICT, CASCADE и SET NULL зависит от бизнес-логики и требований к данным:
RESTRICT(илиNO ACTION) используется, когда родительская запись является критически важной, и ее удаление или изменение должно быть явно запрещено, если на нее есть ссылки.CASCADEприменяется, когда удаление или обновление родительской записи естественным образом влечет за собой удаление или обновление зависимых дочерних записей (например, удаление заказа влечет удаление его позиций).SET NULLвыбирается, когда дочерние записи могут существовать без прямой связи с родительской после ее удаления/обновления (например, если уволенный тренер больше не ведет группу, но группа сохраняется без тренера).
В курсовой работе студент должен не только определить внешние ключи, но и обосновать выбор ON DELETE и ON UPDATE для каждой связи, исходя из логики работы спортивной школы. Например, удаление спортсмена должно каскадно удалять все его достижения, а удаление спортивной дисциплины, возможно, должно запрещаться, если существуют группы, которые ее преподают.
Физическое Проектирование и Выбор СУБД для Спортивной Школы
После завершения логического проектирования и полной нормализации структуры данных, наступает этап физического проектирования. Здесь абстрактная реляционная схема трансформируется в конкретную реализацию, учитывающую особенности выбранной Системы Управления Базами Данных (СУБД) и физические аспекты хранения данных. Этот этап критичен для производительности, безопасности и удобства эксплуатации готовой базы данных.
Критерии выбора СУБД
Выбор СУБД — это одно из ключевых решений на этапе проектирования, которое будет определять дальнейшие возможности и ограничения системы. Для курсовой работы студент должен не просто выбрать СУБД по умолчанию, а провести обоснованный сравнительный анализ.
Основные критерии выбора СУБД:
- Характеристики производительности:
- Скорость выполнения запросов: Насколько быстро СУБД обрабатывает сложные запросы на выборку, обновление и вставку данных. Это особенно важно для систем с высокой нагрузкой.
- Масштабируемость: Способность СУБД эффективно работать с растущим объемом данных и увеличивающимся количеством пользователей без существенного падения производительности. Для спортивной школы это может означать рост числа спортсменов, групп, соревнований.
- Параллельная обработка: Поддержка одновременной работы множества пользователей и транзакций.
- Запас функциональных возможностей для развития информационной системы:
- Поддержка стандартов SQL: Насколько полно СУБД соответствует стандартам SQL, что облегчает переносимость и взаимодействие.
- Расширенные возможности: Наличие хранимых процедур, функций, триггеров, поддержки XML/JSON, географических данных. Эти возможности могут быть полезны для автоматизации и реализации сложной бизнес-логики.
- Индексирование: Разнообразие поддерживаемых типов индексов (B-tree, hash, полнотекстовые) и эффективность их работы.
- Поддержка транзакций: ACID-свойства (Атомарность, Согласованность, Изолированность, Долговечность) для обеспечения надежности операций.
- Оснащенность инструментарием для администрирования:
- Удобство управления: Наличие графических средств администрирования (GUI), таких как SQL Server Management Studio, pgAdmin, MySQL Workbench.
- Средства резервного копирования и восстановления: Возможность создания и восстановления резервных копий данных, а также механизмы восстановления после сбоев.
- Мониторинг производительности: Инструменты для отслеживания и анализа работы СУБД.
- Управление пользователями и правами доступа: Гибкие механизмы разграничения доступа к данным.
- Удобство и надежность эксплуатации:
- Надежность: Устойчивость к сбоям, способность восстанавливать данные.
- Документация и сообщество: Наличие обширной и актуальной документации, активного сообщества пользователей и разработчиков для получения поддержки.
- Простота установки и настройки: Легкость развертывания СУБД.
- Стоимость СУБД и дополнительного программного обеспечения:
- Лицензионные отчисления: Стоимость коммерческих СУБД (Oracle, MS SQL Server) может быть значительной.
- Открытый исходный код: СУБД с открытым исходным кодом (MySQL, PostgreSQL) могут быть бесплатными, но требовать вложений в поддержку и обучение.
- Стоимость оборудования: Требования к серверному оборудованию.
Для курсовой работы, учитывая целевую аудиторию и характер задачи, часто выбирают такие СУБД как Microsoft Access, MySQL или PostgreSQL. MS Access прост в освоении и подходит для небольших проектов с локальным хранением данных. MySQL и PostgreSQL — это более мощные реляционные СУБД, которые предоставляют гораздо большую масштабируемость и функциональность, лучше подходят для многопользовательских систем и являются стандартом в индустрии. Выбор MS SQL Server или Oracle 12c также возможен, особенно если предполагается изучение более сложных корпоративных решений.
Например, для спортивной школы, которая планирует расти, PostgreSQL будет отличным выбором из-за своей открытости, надежности, богатой функциональности и соответствия стандартам SQL. Если же проект небольшой и локальный, а основной акцент делается на быстрое освоение, то MS Access может быть подходящим вариантом.
Особенности физического проектирования в выбранной СУБД
Физическое проектирование — это адаптация логической модели к реальным условиям хранения и обработки данных в выбранной СУБД. На этом этапе принимаются решения, которые напрямую влияют на производительность и эффективность базы данных.
Основные шаги физического проектирования:
- Проектирование физического представления БД (файлы):
- Определение, как данные будут храниться на диске (например, в каких файлах, на каких дисковых устройствах).
- Разделение БД по файлам и устройствам для оптимизации ввода-вывода (например, журналы транзакций на одном диске, данные на другом).
- Конфигурация параметров хранения (размер страницы, размер блока).
- Выбор оптимальных типов данных для полей:
- На логическом этапе мы определяли общие типы (числовой, текстовый, дата). На физическом этапе выбираются конкретные типы данных, предоставляемые СУБД, которые наилучшим образом подходят для каждого атрибута, учитывая его размер, диапазон значений и потребности в хранении.
- Примеры:
- Для
ID_Учащегося,ID_Тренералучше использоватьINTилиBIGINT, а неVARCHAR, если это численные идентификаторы. - Для
Фамилия,Имя,ОтчествоиспользоватьVARCHAR(N)с адекватной длинойN, а неTEXTилиNVARCHAR(MAX), чтобы не тратить лишнюю память. - Для
Дата_РожденияиспользоватьDATEилиDATETIME. - Для
ПолиспользоватьCHAR(1)или булевый тип.
- Для
- Правильный выбор типов данных экономит дисковое пространство и улучшает производительность запросов.
- Создание индексов для ускорения запросов:
- Индексы — это специальные структуры данных, которые улучшают скорость операций поиска данных в таблице. Они аналогичны предметному указателю в книге.
- Выбор полей для индексирования: Индексы обычно создаются на столбцах, которые часто используются в условиях
WHERE(фильтрация),ORDER BY(сортировка),GROUP BY(группировка), а также на внешних ключах для ускорения операцийJOIN. - Типы индексов: Кластерные (определяют физический порядок хранения данных) и некластерные.
- Пример: Создание индекса по
Фамилияв таблицеУЧАЩИЕСЯдля быстрого поиска спортсменов по фамилии. Создание индекса поID_Группыв таблицеУЧАЩИЕСЯдля быстрого получения списка спортсменов в определенной группе. - Недостаток индексов: они занимают дисковое пространство и замедляют операции вставки, обновления и удаления, так как индекс должен быть обновлен. Важно найти баланс.
- Определение требований к дисковой памяти:
- Оценка примерного объема данных, который будет храниться, и прогнозирование роста БД.
- Планирование дискового пространства с учетом файлов данных, индексов, журналов транзакций.
- Разработка пользовательских представлений (VIEW):
- Представления — это виртуальные таблицы, результат выполнения запроса. Они не хранят данные сами по себе, но предоставляют упрощенное или агрегированное представление данных из одной или нескольких таблиц.
- Назначение:
- Безопасность: Скрытие конфиденциальных столбцов или строк от определенных пользователей.
- Упрощение: Предоставление пользователям только той информации, которая им нужна, избавляя их от необходимости писать сложные JOIN-запросы.
- Согласованность: Обеспечение единообразного представления данных.
- Пример:
VIEWпод названиемСПИСОК_СПОРТСМЕНОВ_ГРУППА_ТРЕНЕР, объединяющий данные из таблицУЧАЩИЕСЯ,ГРУППЫ,ТРЕНЕРЫ.
- Разработка механизмов защиты и пользовательских приложений:
- Управление доступом: Создание пользователей, ролей и назначение им прав доступа (например, роль «Директор» имеет полный доступ, «Тренер» — доступ к своим группам и достижениям своих спортсменов, «Ветеринар» в конно-спортивной школе — только выборка и вставка).
- Шифрование данных: Для конфиденциальных данных (например, медицинских справок).
- Разработка приложений: Создание интерфейсов для взаимодействия с БД.
Физическое проектирование требует глубоких знаний выбранной СУБД и ее особенностей. Решения, принятые на этом этапе, могут значительно повлиять на успех всей информационной системы. Важно помнить, что между логическим и физическим проектированием существует обратная связь: иногда решения, принятые для оптимизации производительности на физическом уровне (например, денормализация), могут потребовать корректировки логической модели.
Разработка Функциональности и Пользовательского Интерфейса
После того как база данных спроектирована и реализована на физическом уровне, следующим шагом является создание механизмов для взаимодействия с ней. Это включает в себя проектирование удобных форм для ввода и редактирования данных, разработку эффективных запросов для анализа и извлечения информации, формирование отчетов для различных нужд и, при необходимости, использование расширенных возможностей СУБД, таких как хранимые процедуры и триггеры. Цель этого этапа — сделать БД не просто хранилищем, а полноценным инструментом для решения бизнес-задач спортивной школы.
Проектирование форм для ввода и редактирования данных
Пользовательский интерфейс является ключевым элементом, определяющим удобство и эффективность работы с базой данных. Грамотно спроектированные формы упрощают ввод информации, снижают количество ошибок и делают систему доступной даже для пользователей без глубоких технических знаний.
Принципы проектирования форм:
- Интуитивность и простота: Формы должны быть легкими для понимания, с логически сгруппированными полями.
- Согласованность: Единообразное расположение элементов управления, шрифты и цветовая схема.
- Валидация ввода: Автоматическая проверка корректности вводимых данных в режиме реального времени (например, для числовых полей, полей даты, обязательных полей).
- Использование списков и выпадающих меню: Для полей, имеющих ограниченный набор значений (например, пол, спортивный разряд, название дисциплины), вместо свободного ввода лучше использовать выпадающие списки, что предотвращает опечатки и обеспечивает доменную целостность.
- Информативные сообщения об ошибках: Четкие и понятные сообщения, указывающие на характер ошибки и способы ее устранения.
- Удобная навигация: Кнопки для сохранения, отмены, перехода между записями.
Примеры форм для спортивной школы:
- Форма «Регистрация нового спортсмена»:
- Поля: Фамилия, Имя, Отчество (раздельные поля), Дата рождения (календарь), Пол (выпадающий список «М/Ж»), Адрес, Телефон родителя, Медицинская группа (выпадающий список), Дата зачисления (календарь), Выберите группу (выпадающий список из существующих групп).
- Кнопки: «Сохранить», «Отмена», «Очистить».
- Валидация: Все поля «ФИО», «Дата рождения», «Телефон родителя», «Группа» — обязательны для заполнения.
- Форма «Добавление результатов соревнования»:
- Поля: Выберите спортсмена (поиск по ФИО), Выберите соревнование (выпадающий список), Дисциплина (выпадающий список), Занятое место (числовое поле), Присвоенный разряд/звание (выпадающий список), Комментарий.
- Кнопки: «Добавить», «Отмена».
- Форма «Управление расписанием»:
- Поля: Выберите группу, Выберите дисциплину, Выберите тренера, День недели (выпадающий список), Время начала/окончания (часы/минуты), Место проведения.
- Кнопки: «Добавить занятие», «Редактировать», «Удалить».
Разработка запросов для анализа и извлечения данных
SQL-запросы — это язык общения с базой данных. Они позволяют извлекать, фильтровать, сортировать, агрегировать и модифицировать данные в соответствии с информационными потребностями пользователей.
Примеры SQL-запросов для спортивной школы:
- Вывести список всех спортсменов с указанием их групп и тренеров:
SELECT U.Фамилия_Учащегося, U.Имя_Учащегося, G.Название_Группы, T.Фамилия_Тренера, T.Имя_Тренера FROM УЧАЩИЕСЯ AS U JOIN ГРУППЫ AS G ON U.ID_Группы = G.ID_Группы JOIN ТРЕНЕРЫ AS T ON G.ID_Тренера = T.ID_Тренера ORDER BY U.Фамилия_Учащегося; - Найти всех спортсменов с разрядом «КМС» в дисциплине «Футбол»:
SELECT U.Фамилия_Учащегося, U.Имя_Учащегося, D.Название_Дисциплины, UD.Разряд FROM УЧАЩИЕСЯ AS U JOIN УЧАЩИЕСЯ_ДИСЦИПЛИНЫ AS UD ON U.ID_Учащегося = UD.ID_Учащегося JOIN СПОРТИВНЫЕ_ДИСЦИПЛИНЫ AS D ON UD.ID_Дисциплины = D.ID_Дисциплины WHERE UD.Разряд = 'КМС' AND D.Название_Дисциплины = 'Футбол'; - Показать расписание тренировок для конкретной группы на текущую неделю:
SELECT R.День_Недели, R.Время_Начала, R.Время_Окончания, D.Название_Дисциплины, T.Фамилия_Тренера, R.Место_Проведения FROM РАСПИСАНИЕ AS R JOIN ГРУППЫ AS G ON R.ID_Группы = G.ID_Группы JOIN СПОРТИВНЫЕ_ДИСЦИПЛИНЫ AS D ON R.ID_Дисциплины = D.ID_Дисциплины JOIN ТРЕНЕРЫ AS T ON R.ID_Тренера = T.ID_Тренера WHERE G.Название_Группы = 'Младшая группа по футболу' ORDER BY FIELD(R.День_Недели, 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'), R.Время_Начала;(Примечание:
FIELD— специфическая функция MySQL для сортировки по пользовательскому порядку, в других СУБД могут быть другие аналоги.) - Подсчитать количество спортсменов в каждой группе:
SELECT G.Название_Группы, COUNT(U.ID_Учащегося) AS Количество_Спортсменов FROM ГРУППЫ AS G LEFT JOIN УЧАЩИЕСЯ AS U ON G.ID_Группы = U.ID_Группы GROUP BY G.Название_Группы ORDER BY Количество_Спортсменов DESC;
Создание отчетов
Отчеты — это структурированные представления данных, предназначенные для анализа, принятия решений и документирования. Они могут быть как простыми списками, так и сложными сводными таблицами с агрегированными показателями.
Примеры отчетов для спортивной школы:
- Отчет о посещаемости занятий:
- Для каждой группы, за выбранный период, список учащихся и отметки о посещении.
- Может включать общую статистику посещаемости по группе.
- Отчет об успеваемости спортсменов:
- Список спортсменов, их разряды, последние достижения, участие в соревнованиях.
- Возможность фильтрации по дисциплинам или возрастным категориям.
- Списки групп и тренеров:
- Информация о каждой группе: название, дисциплина, назначенный тренер, количество учащихся.
- Информация о каждом тренере: ФИО, квалификация, список групп, которые он ведет.
- Отчет о предстоящих соревнованиях:
- Список соревнований, даты, места проведения, участвующие дисциплины.
Создание отчетов часто требует использования специфических инструментов СУБД (например, Crystal Reports для SQL Server, встроенные мастера отчетов в MS Access) или интеграции с внешними BI-инструментами.
Дополнительные возможности: хранимые процедуры, триггеры (по желанию)
Для повышения эффективности, автоматизации и обеспечения более сложной бизнес-логики в базе данных можно использовать расширенные возможности СУБД.
- Хранимые процедуры (Stored Procedures):
- Определение: Это набор SQL-инструкций, который компилируется один раз и хранится в базе данных. Процедуры могут принимать параметры и возвращать результаты.
- Преимущества:
- Производительность: Предварительно скомпилированный код выполняется быстрее.
- Безопасность: Пользователям можно предоставить права на выполнение процедуры, не давая прямого доступа к таблицам.
- Повторное использование: Код пишется один раз и используется многократно.
- Инкапсуляция бизнес-логики: Сложная логика может быть инкапсулирована в процедуре.
- Пример для спортивной школы:
- Процедура
ДобавитьНовогоСпортсмена(@Фамилия,@Имя,@ДатаРождения, …), которая выполняет все необходимые проверки и вставки в таблицыУЧАЩИЕСЯиУЧАЩИЕСЯ_ДИСЦИПЛИНЫ. - Процедура
ОбновитьРазрядСпортсмена(@ID_Учащегося,@НовыйРазряд).
- Процедура
- Триггеры (Triggers):
- Определение: Это специальные хранимые процедуры, которые автоматически выполняются (срабатывают) в ответ на определенные события в базе данных (например,
INSERT,UPDATE,DELETEна определенной таблице). - Преимущества:
- Автоматизация: Автоматическое выполнение действий при изменении данных.
- Поддержание целостности и бизнес-правил: Реализация сложных ограничений целостности, которые невозможно выразить стандартными внешними ключами или
CHECKограничениями. - Ведение журналов изменений (логирование): Запись всех изменений в отдельные таблицы аудита.
- Пример для спортивной школы:
- Триггер
AFTER INSERT ON ДОСТИЖЕНИЯ, который автоматически обновляет полеПоследний_Разрядв таблицеУЧАЩИЕСЯпри добавлении нового достижения. - Триггер
BEFORE DELETE ON ТРЕНЕРЫ, который проверяет, не ведет ли тренер активные группы, и если ведет, отменяет удаление или переназначает группы.
- Триггер
- Определение: Это специальные хранимые процедуры, которые автоматически выполняются (срабатывают) в ответ на определенные события в базе данных (например,
Включение хранимых процедур и триггеров в курсовую работу демонстрирует более глубокое понимание возможностей СУБД и ��мение применять их для создания надежных и функциональных информационных систем. Однако их использование должно быть обоснованным и не усложнять систему без реальной необходимости.
Заключение
На протяжении этой курсовой работы мы проделали путь от абстрактного представления предметной области «Спортивная школа» до детального плана по разработке функциональной базы данных. Каждый этап проектирования — от системного анализа до реализации пользовательского интерфейса — играет ключевую роль в создании эффективной и надежной информационной системы.
Мы начали с определения фундаментальных понятий, таких как СУБД, модели данных и этапы проектирования, заложив теоретический фундамент. Далее, углубившись в предметную область спортивной школы, мы выявили ключевые сущности, процессы и информационные потоки, что позволило нам сформировать четкое представление о потребностях будущей системы.
Этап инфологического проектирования, реализованный через ER-моделирование, позволил нам визуализировать взаимосвязи между сущностями, такими как Учащиеся, Тренеры, Группы и Соревнования, создав наглядную схему без привязки к конкретной технологии. Затем, на этапе логического проектирования, мы преобразовали эту концептуальную модель в реляционную схему, подробно рассмотрев процесс нормализации. Особое внимание было уделено детальному разбору каждой нормальной формы — 1NF, 2NF, 3NF и BCNF — с практическими примерами из спортивной школы, что является критически важным для устранения избыточности и аномалий данных.
Мы также акцентировали внимание на обеспечении целостности данных, подробно описав доменную, сущностную и, что особенно важно, ссылочную целостность. Механизмы ON DELETE/ON UPDATE с действиями CASCADE, RESTRICT и SET NULL были разобраны с конкретными сценариями применения, что гарантирует поддержание согласованности данных при любых операциях.
Выбор СУБД и физическое проектирование завершили технический аспект, где мы обосновали критерии выбора оптимальной СУБД и рассмотрели вопросы оптимизации хранения данных, индексирования и обеспечения безопасности. Наконец, мы обсудили разработку пользовательского интерфейса через формы и отчеты, а также возможности использования хранимых процедур и триггеров для автоматизации и повышения надежности системы.
Значимость разработанной БД для спортивной школы:
Созданная по этому плану база данных станет мощным инструментом для спортивной школы, позволяющим:
- Автоматизировать учет: Эффективно управлять информацией о спортсменах, тренерах, группах, расписаниях и достижениях.
- Повысить точность данных: За счет строгих ограничений целостности минимизировать ошибки и несоответствия.
- Оптимизировать управление: Предоставлять руководству, тренерам и администраторам оперативный доступ к актуальной информации для принятия обоснованных решений.
- Улучшить коммуникацию: Сделать информацию о расписании, соревнованиях и достижениях легкодоступной для всех заинтересованных сторон.
- Создать основу для аналитики: Собирать и агрегировать данные для анализа эффективности тренировочного процесса, оценки прогресса спортсменов и планирования будущей деятельности.
Перспективы дальнейшего развития проекта:
Разработанная БД представляет собой прочный фундамент для дальнейшего развития информационной системы спортивной школы. Среди перспективных направлений можно выделить:
- Разработка веб-интерфейса или мобильного приложения: Для удобного доступа к данным и функционалу системы с различных устройств.
- Интеграция с платежными системами: Для автоматизации учета оплаты за обучение.
- Внедрение аналитических модулей: Для прогнозирования спортивных результатов, выявления тенденций и персонализации тренировочных планов.
- Модуль управления инвентарем и оборудованием: Для учета и контроля использования спортивного инвентаря.
- Система уведомлений: Для информирования спортсменов и родителей о предстоящих занятиях, соревнованиях и изменениях.
Таким образом, данная курсовая работа не только демонстрирует глубокое понимание принципов проектирования баз данных, но и предоставляет студенту готовый, детальный и академически выверенный план для создания реальной, ценной информационной системы, способной существенно улучшить деятельность спортивной школы в условиях современного цифрового мира.
Список использованной литературы
- Диго С.М. Базы Данных. Москва : Финансы и статистика, 2005.
- Боуман Дж., Эмерсон С., Дарновски М. Практическое руководство по SQL.
- Хэлволсон М., Янг М. Эффективная работа с Microsoft Office. Санкт-Петербург : Питер, 2001.
- Модели данных и этапы проектирования баз данных : учебное пособие. URL: https://www.mgutm.ru/upload/iblock/58c/58c5826f7a6f7b1d9c0f9a2d3c9f7a7d.pdf (дата обращения: 12.10.2025).
- Основы работы с базами данных. Лекция 1: Введение в проектирование баз данных. URL: https://www.msu.ru/projects/intuit/2.pdf (дата обращения: 12.10.2025).
- Лекция 5. Целостная составляющая реляционной модели данных. URL: https://cscs.hse.ru/data/2012/10/24/1243916997/Lec05.pdf (дата обращения: 12.10.2025).
- Быстренина И.Е. Задачи и основные этапы проектирования баз данных. URL: https://www.timacad.ru/uploads/files/10444/bd-2020-09-02-14-38-08.pdf (дата обращения: 12.10.2025).
- Разработка базы данных учета о работе «ДЮСШ КОННОГО СПОРТА. URL: https://elib.bsu.by/bitstream/123456789/228807/1/177-180.pdf (дата обращения: 12.10.2025).
- Базы данных. Методические указания к выполнению курсовой работы. URL: https://www.belstu.by/static/journal/metod/bd_kurs.pdf (дата обращения: 12.10.2025).
- Логическая и физическая модели данных. URL: https://moodle.mesi.ru/mod/resource/view.php?id=80503 (дата обращения: 12.10.2025).
- Инфологическая модель данных: пример построения ER-диаграммы. URL: https://www.science-education.ru/ru/article/view?id=29541 (дата обращения: 12.10.2025).
- Классификация баз данных в сфере физической культуры и спорта. URL: https://cyberleninka.ru/article/n/klassifikatsiya-baz-dannyh-v-sfere-fizicheskoy-kultury-i-sporta/viewer (дата обращения: 12.10.2025).
- Проектирование базы данных. Методические указания к лабораторной работе. URL: https://omgtu.ru/upload/iblock/61d/61d76a213e8d2e8e3d0d5b51e4f4a3e7.pdf (дата обращения: 12.10.2025).
- Основы проектирования баз данных. URL: http://edu.misis.ru/data/2016/11/17/1251016584/Bazi_dannie.pdf (дата обращения: 12.10.2025).
- Базы данных: Теория нормализации. URL: https://cyberleninka.ru/article/n/bazy-dannyh-teoriya-normalizatsii/viewer (дата обращения: 12.10.2025).
- Целостность данных в базах данных: что это и зачем нужно. URL: https://staffcop.ru/blog/chto-takoe-tselostnost-dannyh-v-bazah-dannyh-i-zachem-nuzhna/ (дата обращения: 12.10.2025).
- Основы проектирования баз данных : учебное пособие. URL: https://www.bmstu.ru/doc/db-design_manual_bmstu.pdf (дата обращения: 12.10.2025).
- Зайцева В.П., Каменева Т.В., Петрищев А.В. Базы данных : учебное пособие. URL: http://www.rgrtu.ru/file/download/5594/ (дата обращения: 12.10.2025).
- Проектирование и разработка базы данных для реализации в спортивных школах. URL: https://www.elibrary.ru/item.asp?id=46104764 (дата обращения: 12.10.2025).
- Проектирование ER-диаграммы. URL: https://worldskills.ru/media/documents/Proektirovanie-ER-diagrammy.pdf (дата обращения: 12.10.2025).
- Разработка базы данных информационной системы учреждения дополнительного образования детей. URL: https://vestnik-natural-sciences.mgou.ru/jour/article/view/178/178 (дата обращения: 12.10.2025).