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

Створення бд і контексту даних

Створюємо базу даних

Після визначення всіх моделей створимо базу даних. Оскільки багато моделі взаємопов'язані, то нам доведеться це враховувати і при створенні таблиць, вказуючи відповідні зовнішні ключі.

Отже, додамо в папку App_Data проекту базу даних. Назвемо її, наприклад, helpdeskuser.mdf

Потім відкриємо базу даних у вікні Database Explorer. Почнемо додавати таблиці для тих сутностей, які не вимагають зовнішніх ключів.

Створимо таблицю для моделі Category:

Далі створимо таблиці для моделей Department і Activ. Модель Department:

Модель Activ:

Так як модель Activ пов'язана через зовнішній ключ з моделлю Department, то при визначенні таблиці також прописуємо цей зовнішній ключ і вказуємо дію, яка буде відбуватися при видаленні пов'язаної моделі Department. У даному випадку поле DepartmentId прийматиме значення null.

Тепер додамо таблиці для ролей і користувачів. Таблиця для класу Role:

Також тут же можна і внести всі можливі ролі:

Визначення таблиці користувачів буде виглядати наступним чином:

Тут у нас вже два зовнішніх ключа. В принципі можна вже визначити одного користувача - адміністратора:

Цей адміністратор потім вже буде додавати всіх інших користувачів у додаток.

Тепер перейдемо до системи заявок. Спочатку додамо таблицю для сутності Lifecycle, яка описує життєвий цикл заявки. Скрипт створення таблиці буде виглядати наступним чином:

І скрипт створення таблиці заявок буде виглядати так:

 

GO

 

Тут у нас купа зовнішніх ключів і, крім того, ще не дуже зрозуміла конструкція наприкінці під назвою тригер, точніше два тригера. Загальна дія у нас така: у нас два поля - користувач, який створив заявку, і виконавець цієї заявки - посилаються на таблицю Users. Ми хочемо, щоб у разі видалення об'єкта з таблиці Users відповідні поля в таблиці Requests встановлювалися в NULL. Ну наприклад в реальності користувач відписався про якусь проблему, і раптом його звільнили (на рівні коду - видалили), але проблема могла залишитися, тому ми встановлюємо null. Однак ви також можете використовувати тут каскадне видалення (ON DELETE CASCADE)

У випадку з іншим полем ExecutorId встановити за допомогою зовнішнього ключа в null вже не вийде, так як середовище нам не дозволяє задати два зовнішніх ключа на одне поле іншої таблиці. Але ми можемо вийти з цієї ситуації, задавши тригер.

По суті весь текст починаючи з GO і до слова END являє собою визначення тригера, який робить практично те ж саме, тільки для поля ExecutorId. У даному випадку використовується специфічне оголошення тригера.

Другий тригер у нас визначений для тієї ситуації, якщо якийсь користувач перестає бути виконавцем, але залишається в системі, тобто змінює статус. І тоді ми також встановлюємо для поля ExecutorId значення NULL.

Якщо в загальних словах, то створення тригера починається зі слів CREATE TRIGGER, після яких йде назва тригера. Далі вказуємо таблицю, за якою тригер буде стежити і операцію після слова AFTER, при проведенні якої тригер буде спрацьовувати. В обох випадках таблицею є Users. А ось операції у нас використовується дві: видалення для першого тригера, і оновлення для другого.

Сама дія проводить наступний код UPDATE Requests SET ExecutorId = NULL - звичайний вираз SQL, що встановлює значення NULL. А далі слідує умова, при якій відбувається таке присвоєння.

При видаленні умова WHERE Requests.ExecutorId IN (SELECT [Id] FROM [deleted]) говорить видалити ті рядки, де значення полів Requests.ExecutorId потрапляють в набір (SELECT [Id] FROM [deleted]). Слово deleted вказує на набір видалених об'єктів з таблиці Users.

При оновленні трохи більше складне рішення, бо нам треба перевірити, чи є оновлений об'єкт в таблиці Users по колишньому виконавцем.

Завдяки використанню тригера видалення виконавця, навіть у тому випадку, якщо є і творцем заявки, пройде цілком спокійно і без помилок.

Створення контексту даних

Отже, ми створили весь необхідний набір даних, який зараз виглядає таким чином:

Нас залишилося створити контекст даних, через який ми будемо отримувати всі необхідні відомості з бази даних. Так, додамо в папку Models клас HelpUserContext:

Тепер треба зв'язати контекст з базою даних. Відкриємо файл web.config змінимо в ньому стандартне визначення рядка підключення в секції connectionStrings на наступне:

<connectionStrings>

<add name="HelpUserContext" providerName="System.Data.SqlClient"

connectionString="Data Source=(LocalDb)\v11.0;AttachDBFilename=|DataDirectory|\helpdeskuser.mdf" />

</connectionStrings>

На цьому у нас закінчена робота зі створенням і налаштуванням моделей і таблиць бази даних, і тепер ми можемо перейти вже до побудови самої логіки програми.