Лабораторные работы / Методические указания к ЛР по ОАИП (09.02.07)
.pdfER-диаграммы удобны тем, что процесс выделения сущностей,
атрибутов и связей является пошаговым. Разработав первый приближенный вариант диаграмм, мы уточняем их, опрашивая экспертов предметной области. При этом документацией, в которой фиксируются результаты бесед,
являются сами ER-диаграммы.
Ранее, во втором параграфе, мы выделили все требования к разрабатываемой информационной системе.
Выделим все существительные в этих предложениях - это будут потенциальные кандидаты на сущности и атрибуты:
Пользователь - явный кандидат на сущность.
Студент - явный кандидат на сущность.
Преподаватель - явный кандидат на сущность.
Дипломная работа - явный кандидат на сущность.
Сразу возникает очевидная связь между сущностями – «Студент является Пользователем», «Преподаватель является Пользователем», «Преподаватель является дипломным руководителем студентом» и «Преподаватель предлагает темы дипломных работ». Первый вариант диаграммы выглядит так:
Рисунок 14.6 – Диаграмма сущностей
Определим набор атрибутов сущностей. Анализируя предметную область, мы выяснили следующее:
Каждый пользователь информационной системы имеет логин,
пароль и роль для авторизации.
201
Каждый студент имеет фамилию, имя, отчество, номер группы,
персональные данные о себе, личную фотографию.
Каждая преподаватель имеет фамилию, имя, отчество, должность,
персональные данные о себе, личную фотографию, список предлагаемых им тем дипломных работ.
Каждая дипломная работа имеет тему и аннотацию.
Снова выпишем все существительные, которые будут потенциальными атрибутами, и проанализируем их:
Фамилия/имя/отчество – можно объединить в единый атрибут ФИО, который будет являться явной характеристикой студента и преподавателя.
Логин – явная характеристика пользователя.
Пароль – явная характеристика пользователя.
Роль – явная характеристика пользователя.
Авторизация – процесс предоставление определённому лицу или группе лиц прав на использование возможностей системы. Не является характеристикой.
Номер группы – явная характеристика студента.
Персональные данные о себе – явная характеристика студента и преподавателя.
Личная фотография – явная характеристика студента и преподавателя.
Предлагаемые темы дипломных работ – явная характеристика преподавателя.
Тема дипломной работы – явная характеристика дипломной
работы.
Аннотация к дипломной работе – явная характеристика дипломной работы.
Теперь можно внести все это в диаграмму:
202
Рисунок 14.7 - ER-диаграмма
Данный пример ER-диаграммы является примером концептуальной диаграммы. Это означает, что диаграмма не учитывает особенности конкретной СУБД.
Построение физической модели базы данных
Для создания базы данных, которая будет взаимодействовать с нашим приложением, используем подход Model First. Суть данного подхода состоит в том, что сначала делается модель, а потом по ней создается база данных.
Итак, создадим новый проект по типу Приложение Windows Forms. И
затем добавим в проект новый элемент. Нажмем правой кнопкой мыши на проект в окне Обозреватель решений и в появившемся списке выберем
Добавить → Создать элемент. И затем в окне добавления нового элемента выберем Модель ADO.NET EDM:
203
Рисунок 14.8 – Добавление нового элемента Модель ADO.NET EDM
Модель назовем EntityModel. Нажмем Добавить и нам откроется мастер создания модели.
Рисунок 14.9 – Мастер создания моделей
Окно нам предлагает четыре варианта создания модели, из которых нам надо выбрать Пустая модель конструктор в EF.
Нажмем кнопку Готово, и перед нами откроется пустое окно создания модели.
204
Перетащим на это поле с панели Панель Инструментов в левой части элемент Сущность. Теперь у нас на поле создания модели имеется небольшая схема будущей модели, в которой сейчас по умолчанию указано лишь одно поле - Id. Во-первых, переименуем сущность. По умолчанию она называется
Entity1.
Рисунок 14.10 – Схема модели и панель элементов
Выделим схему и перейдем к окну свойств в правом нижнем углу:
Рисунок 14.11 – Свойства сущности
Здесь изменим значение свойства Имя на User. Это у нас будет имя сущности. И также изменим значение свойства Имя набора сущностей на
Users. Это у нас будет название набора объектов User.
Далее создадим несколько свойств. Сущность у нас будет простая и будет содержать всего два свойства для логина и пароля пользователя. Итак,
выделим схему сущности и нажмем на правую кнопку мыши. В выпадающем списке выберем Добавить новый → Скалярное свойство. После этого будет добавлено новое свойство. Скалярное свойство подразумевают свойства на
205
основе простейших типов int, float, string и т.д. Добавим три свойства –
Login, Password и Role. По умолчанию все добавляемые свойства имеют тип string. Однако мы можем изменить тип в окне свойств.
Таким образом, у нас должна получиться следующая схема сущности:
Рисунок 14.12 – Схема сущности «Пользователь»
Составим соответствующие схемы для остальных трех сущностей:
студента преподавателя и дипломной работы.
Рисунок 14.13 – Схемы сущностей «Преподаватель», «Студент» и «Дипломная работа»
Далее добавим связи между сущностями. Выберем из панели элементов объект «Ассоциация» и выберем в поле две сущности, между которыми будет установлена связь.
206
Рисунок 14.14 – Объект «Ассоциация» для установления связей»
Например, установим для начала связь между сущностями User и Student. Изменим ее вид, нажав на линию связи правой кнопкой мыши и выбрав пункт Свойства.
Рисунок 14.15 – Свойства связи
Для связи между сущностями User и Student установим вид связи «ноль-
или-один-к-одному», так как необходимо допустить возможность отсутствия
(равенство NULL) привязанной сущности Student при создании User и
наоборот. Для изменения вида связи необходимо изменить свойство
Кратность элемента на 0 (ноль из Student/ User) в обоих случаях.
После создания связи также будет автоматически сгенерировано навигационное свойство для обоих сущностей, которые будут играть роль внешний ключей в структуре базы данных.
207
Общий вид модели данных после установления всех связей между сущностями представлен на рисунке 14.16.
Рисунок 14.16 – Общий вид модели данных
Теперь по модели мы можем сгенерировать код и базу данных. Вначале сгенерируем код модели. Для этого нажмем на диаграмму модели правой кнопкой мыши и выберем пункт Добавить элемент создания кода:
Далее нам будет предложено выбрать версию EF. Выберем шестую версию:
208
Рисунок 14.17 – Добавление элемента создания кода
После этого в структуре проекта мы можем увидеть узел EntityModel.tt,
который в качестве подузлов будет содержать сгенерированные классы модели в файлах User.cs, Professor.cs, Thesis.cs и Student.cs:
Рисунок 14.18 – Узел с классами модели
Также здесь мы можем найти файл контекста данных
EntityModel.Context.cs, который выглядит в моем случае следующим образом:
|
Листинг 14.1 – Сгенерированный контекст данных |
|
|
|
|
1 |
using System; |
|
2 |
using System.Data.Entity; |
|
3 |
using System.Data.Entity.Infrastructure; |
|
4 |
public partial class EntityModelContainer : DbContext |
|
5 |
{ |
|
6 |
public EntityModelContainer() |
|
209
7 |
: base("name=EntityModelContainer"){} |
|
8 |
protected override void OnModelCreating(DbModelBuilder |
|
modelBuilder) |
||
|
||
9 |
{ |
|
10 |
throw new UnintentionalCodeFirstException(); |
|
11 |
} |
|
12 |
public virtual DbSet<User> UserSet { get; set; } |
|
13 |
public virtual DbSet<Student> StudentSet { get; set; } |
|
14 |
public virtual DbSet<Professor> ProfessorSet { get; |
|
set; } |
||
15 |
public virtual DbSet<Thesis> ThesisSet { get; set; } |
|
16 |
} |
Теперь сгенерируем базу данных по нашей модели. Итак, нажмем на диаграмму модели правой кнопкой мыши и в выпадающем списке выберем
Сформировать базу данных на основе модели. Перед нами откроется мастер создания подключения.
Рисунок 14.19 – Мастер создания базы данных
Нажмем на кнопку Создать подключение. Далее открывается новое окно, где будет предложено настроить подключение и создать базу данных:
210