0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом посте я продолжу рассказывать о высшем образовании в сфере IT. На этот раз я расскажу о курсовой работе за второй курс по базам данных. Эта курсовая не ограничивается написанием кода и составлением базы данных. В ходе её реализации с нуля была изучена предметная область "Аварийная служба", составлена диаграмма "сущность-связь", в которой присутствовало четыре типа связей: один к одному, один ко многим, многие ко многим, а также иерархия категорий. Затем мною было написано техническое задание, а после завершения - пояснительная записка с руководством пользователя. Технология разработки - ASP.NET MVC, технология доступа к данным - Entity Framework.</p>
1
<p>В этом посте я продолжу рассказывать о высшем образовании в сфере IT. На этот раз я расскажу о курсовой работе за второй курс по базам данных. Эта курсовая не ограничивается написанием кода и составлением базы данных. В ходе её реализации с нуля была изучена предметная область "Аварийная служба", составлена диаграмма "сущность-связь", в которой присутствовало четыре типа связей: один к одному, один ко многим, многие ко многим, а также иерархия категорий. Затем мною было написано техническое задание, а после завершения - пояснительная записка с руководством пользователя. Технология разработки - ASP.NET MVC, технология доступа к данным - Entity Framework.</p>
2
<h2>Содержание</h2>
2
<h2>Содержание</h2>
3
<ul><li><a>Модель данных</a></li>
3
<ul><li><a>Модель данных</a></li>
4
<li><a>Проектирование базы данных</a></li>
4
<li><a>Проектирование базы данных</a></li>
5
<li><a>Написание кода</a></li>
5
<li><a>Написание кода</a></li>
6
<li><a>Составление документации</a></li>
6
<li><a>Составление документации</a></li>
7
<li><a>Заключение</a></li>
7
<li><a>Заключение</a></li>
8
</ul><h2>Модель данных</h2>
8
</ul><h2>Модель данных</h2>
9
<p>Не смотря на то, что на выполнение этой работы был отведён семестр, большая ее часть была сделана за последний месяц (июнь). Это связано с тем, что значительная часть времени ушла на составление диаграммы "Сущность-связь", по которой должна была проектироваться база данных. Практические занятия были раз в две недели, и за занятие можно было показать свою версию только один раз. Диаграмма содержит 10 таблиц и 41 атрибут, не считая первичные и внешние ключи.</p>
9
<p>Не смотря на то, что на выполнение этой работы был отведён семестр, большая ее часть была сделана за последний месяц (июнь). Это связано с тем, что значительная часть времени ушла на составление диаграммы "Сущность-связь", по которой должна была проектироваться база данных. Практические занятия были раз в две недели, и за занятие можно было показать свою версию только один раз. Диаграмма содержит 10 таблиц и 41 атрибут, не считая первичные и внешние ключи.</p>
10
<h2>Проектирование базы данных</h2>
10
<h2>Проектирование базы данных</h2>
11
<p>После успешной защиты моей модели, я наконец-то перешёл непосредственно к проектированию базы данных. Для этого я использовал Microsoft SQL Server Managment Studio 2017. На этом этапе начались первые трудности. По началу я забыл проставить значения по умолчанию во всех таблицах, а также выбрал не тот тип данных для нескольких атрибутов. Пришлось делать базу данных заново. Также я настроил каскадное обновление и удаление во всех таблиц - это стало, по моему мнению, ошибочным решением, так как при удалении записи из таблицы "Бригада" удалялись все связанные с ней записи из пяти таблиц (заявки, персонал, акты и два перечня с материалами и работами). Наверное, стоило выбрать установление значения Null.</p>
11
<p>После успешной защиты моей модели, я наконец-то перешёл непосредственно к проектированию базы данных. Для этого я использовал Microsoft SQL Server Managment Studio 2017. На этом этапе начались первые трудности. По началу я забыл проставить значения по умолчанию во всех таблицах, а также выбрал не тот тип данных для нескольких атрибутов. Пришлось делать базу данных заново. Также я настроил каскадное обновление и удаление во всех таблиц - это стало, по моему мнению, ошибочным решением, так как при удалении записи из таблицы "Бригада" удалялись все связанные с ней записи из пяти таблиц (заявки, персонал, акты и два перечня с материалами и работами). Наверное, стоило выбрать установление значения Null.</p>
12
<h2>Написание кода</h2>
12
<h2>Написание кода</h2>
13
<p>Дописав базу данных, я перешёл к программированию. Для написания кода я использовал Visual studio 2019, Технология разработки - ASP.NET MVC, технология доступа к данным - Entity Framework. Не смотря на то, что большая часть кода генерируется автоматически по базе данных (был выбран подход Code Second), в ней было предостаточно косяков - лишние атрибуты почти во всех таблицах, а также значения обычных атрибутов вместо первичных ключей. Другим весьма неприятным моментом стало то, что почему-то не поддерживались значения по умолчанию из БД, и их пришлось прописывать через код в контроллерах.</p>
13
<p>Дописав базу данных, я перешёл к программированию. Для написания кода я использовал Visual studio 2019, Технология разработки - ASP.NET MVC, технология доступа к данным - Entity Framework. Не смотря на то, что большая часть кода генерируется автоматически по базе данных (был выбран подход Code Second), в ней было предостаточно косяков - лишние атрибуты почти во всех таблицах, а также значения обычных атрибутов вместо первичных ключей. Другим весьма неприятным моментом стало то, что почему-то не поддерживались значения по умолчанию из БД, и их пришлось прописывать через код в контроллерах.</p>
14
<p>Также изначально для реализации авторизации была выбрана технология ASP.NET Identity, однако для четвертого уровня требовалась именно аутентификация, а не авторизация, а выбранная технология прежде - это средство авторизации, как объяснил мне преподаватель. Поэтому проект пришлось делать заново. На этот раз я добавил дополнительную таблицу в БД и соответствующий контроллер для неё, а также простенькое представление, на котором расположилась форма из 2 полей логина и пароля.</p>
14
<p>Также изначально для реализации авторизации была выбрана технология ASP.NET Identity, однако для четвертого уровня требовалась именно аутентификация, а не авторизация, а выбранная технология прежде - это средство авторизации, как объяснил мне преподаватель. Поэтому проект пришлось делать заново. На этот раз я добавил дополнительную таблицу в БД и соответствующий контроллер для неё, а также простенькое представление, на котором расположилась форма из 2 полей логина и пароля.</p>
15
<p>Также в системе присутствовали три роли - администратора, диспетчера и бригадира. В зависимости от роли, пользователь получал разные версии интерфейса с разными возможностями. Это достигалось через механизм Cookie. На страницу макета передавался номер роли, который записывался из контроллера, и в зависимости от этого менялась главная страница со ссылками на таблицы. Не аутентифицированному пользователю был доступен только просмотр данных.</p>
15
<p>Также в системе присутствовали три роли - администратора, диспетчера и бригадира. В зависимости от роли, пользователь получал разные версии интерфейса с разными возможностями. Это достигалось через механизм Cookie. На страницу макета передавался номер роли, который записывался из контроллера, и в зависимости от этого менялась главная страница со ссылками на таблицы. Не аутентифицированному пользователю был доступен только просмотр данных.</p>
16
<p>Также была реализована обработка ошибок, например - ошибка аутентификации (введён неправильный логин или пароль), ошибка нарушения ссылочной целостности (попытка добавить более одного экземпляра данных при связи один к одному), а также контроль ввода данных пользователем в таблицы.</p>
16
<p>Также была реализована обработка ошибок, например - ошибка аутентификации (введён неправильный логин или пароль), ошибка нарушения ссылочной целостности (попытка добавить более одного экземпляра данных при связи один к одному), а также контроль ввода данных пользователем в таблицы.</p>
17
<p>По мимо описанного выше, были составлены две хранимые в БД функции, возвращающие табличное значение (подсчёт стоимости работ и материалов по каждому акту), а также одна хранимая процедура. Это было одним из требований к курсовой работе. Другим требованием было наличие операций поиска и фильтрации в 3 таблицах.</p>
17
<p>По мимо описанного выше, были составлены две хранимые в БД функции, возвращающие табличное значение (подсчёт стоимости работ и материалов по каждому акту), а также одна хранимая процедура. Это было одним из требований к курсовой работе. Другим требованием было наличие операций поиска и фильтрации в 3 таблицах.</p>
18
<h2>Составление документации</h2>
18
<h2>Составление документации</h2>
19
<p>Документация к проекту получилась достаточно объёмной - 80 страниц, из них 40 страниц были в приложении (исходный код контроллеров). В документации содержалось несколько разделов - введение с кратким описанием предметной области, техническое задание, информационное обеспечение системы с моделью, описанием таблиц и выбранных между ними связей, алгоритмическое обеспечение системы (с описанием блок-схемы хотя бы одного алгоритма, при чём алгоритм должен был содержать не менее шести действий и одного условия, для четвертого уровня), прикладное программное обеспечение с описанием всех папок и файлов, присутствующих в проекте, руководство пользователя, список литературы, а также приложение.</p>
19
<p>Документация к проекту получилась достаточно объёмной - 80 страниц, из них 40 страниц были в приложении (исходный код контроллеров). В документации содержалось несколько разделов - введение с кратким описанием предметной области, техническое задание, информационное обеспечение системы с моделью, описанием таблиц и выбранных между ними связей, алгоритмическое обеспечение системы (с описанием блок-схемы хотя бы одного алгоритма, при чём алгоритм должен был содержать не менее шести действий и одного условия, для четвертого уровня), прикладное программное обеспечение с описанием всех папок и файлов, присутствующих в проекте, руководство пользователя, список литературы, а также приложение.</p>
20
<h2>Заключение</h2>
20
<h2>Заключение</h2>
21
<p>Защита курсовой работы проходила в дистанционном формате на портале моего вуза. Преподаватель приглашал отдельно каждого студента присоединиться к видеоконференции, затем включалась демонстрация экрана, и начиналась презентация программного продукта. Демонстрировались аутентификация, CRUD операции с данными, фильтрация и поиск, а также исключительные ситуации. Защита длилась около 15 минут.</p>
21
<p>Защита курсовой работы проходила в дистанционном формате на портале моего вуза. Преподаватель приглашал отдельно каждого студента присоединиться к видеоконференции, затем включалась демонстрация экрана, и начиналась презентация программного продукта. Демонстрировались аутентификация, CRUD операции с данными, фильтрация и поиск, а также исключительные ситуации. Защита длилась около 15 минут.</p>