Проєктування бази даних. Ключі й зовнішні ключі. 

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

Якщо сутності – це таблиці у базі даних, то зв’язки реалізуються дещо інакше. По перше, це залежить від типу зв’язку. Пригадаємо, що є три типи зв’язків: 1-1, 1-багато, багато-багато.

Тож розглянемо ці типи зв’язків та їх реалізацію у базі даних школа.

Зв'язок "один-до-багатьох"

Почнемо з найпростішого в реалізації – зв'язок 1-до-багатьох: між сутностями Учень та Клас. Учень може навчатись лише в одному класі, а у класі може навчатись багато учнів.

У базі даних ці сутності реалізовані у таблицях Учні та Класи. Для відображення зв’язку «навчається» потрібно створити ще одне поле (стовпчик) у таблиці Учні (тобто з боку багато), у яке внести назви класів, у яких навчаються відповідні учні. Ці назви є ключами таблиці Класи, і саме таким чином формується зв'язок між цими таблицями. Ми вказуємо, що ключі таблиці Класи використовуються у таблиці Учні у якості так званих зовнішніх ключів.

Тож змінимо структуру таблиці Учні у конструкторі.

Для того, щоб гарантувати цілісність даних – зовнішній ключ у таблиці Учні не може містити значення, яких немає серед ключів таблиці Класи (тобто не можна вказати, що учень навчається у 11Г класі, якщо у школі такого класу не існує) – скористаємось стрічкою меню Знаряддя бази даних – Зв’язки. 

Тут потрібно додати таблиці (Учні та Класи), та перетягнути ключове поле таблиці Класи на зовнішній ключ у таблицю Учні. У діалоговому вікні потрібно перевірити правильність співставлення полів та встановити прапорець про забезпечення цілісності даних. Наступні два прапорці відповідають за оновлення та видалення відомостей з пов’язаних таблиць; наприклад, видаляти учнів при видаленні певного класу, чи оновлювати відомості при зміні назви класу. Поки що встановлюємо лише перший прапорець і клацаємо Створити. Якщо все зроблено правильно, на схемі даних з’являються позначки 1 та багато.

Якщо у таблицю вже введено некоректні значення – зв’язок не буде створено поки не усунути порушення.

Зв'язок "багато-до-багатьох"

Розглянемо наступний тип зв’язку – багато до багатьох. У нашій базі даних це зв'язок між сутностями Учитель та Клас – вчитель викладає у багатьох класах, а у класі викладає багато вчителів. 

Тож потрібно взяти ключі цих обох таблиць і внести їх у нову таблицю Викладання, ключем якої буде комбінація з двох зовнішніх ключів. Факт викладання вчителя у певному класі супроводжується фіксуванням предмету, котрий викладає вчитель у класі, причому цих предметів може бути кілька.

Для збереження цієї інформації створюємо поле Предмет у таблиці Викладання і створимо підстановку з переліком предметів, котрі викладаються у школі. Вибираємо «Я введу потрібні значення самостійно» і на наступному етапі роботи майстра вказуємо можливі значення. Зверніть увагу, що у режимі конструктора таблиці цей тип показаний як текстовий, і ми маємо змогу вказати, що можна обирати кілька значень з цього переліку.

Заповнимо таблицю Викладання, причому для уникнення неточного внесення номерів паспортів, краще їх копіювати з таблиці Учителі. Для кожної комбінації вчителя та класу можна вибрати кілька предметів викладання.

Далі оновлюємо зв’язки, додаючи таблиці Учителі та Викладання до схеми та перетягуючи відповідні поля. 

Таким чином ми бачимо, що зв'язок багато-до-багатьох при реалізації у Access перетворився на два зв’язки 1-до-багатьох. Можна також зауважити, що поле предмет у таблиці Викладання відрізняється від інших полів – це поле з можливістю вибору кількох предметів для вчителя у класі. По суті це теж зв'язок 1-до-багатьох, просто програма надає зручний спосіб введення цих даних без фактичного створення ще однієї таблиці.

Зв'язок "один-до-одного"

І залишається ще один тип зв’язку – 1-до-1. Нагадаємо, це зв'язок між сутностями Вчитель та Клас, але у значенні класний керівник. Вчитель може бути класним керівником лише одного класу, тоді як у класу може бути тільки один класний керівник.

Такий зв'язок можна задати, додаванням зовнішнього ключа у будь-яку із таблиць. Проте доцільніше внести такий ключ в таблицю Класи, а не Вчителі, оскільки кожен клас повинен мати класного керівника, тоді як вчитель не обов’язково може бути керівником класу. Тож у таблиці класи це поле буде завжди заповнене, а у таблиці Вчителі траплялись би пропуски.

Додаємо поле у режимі конструктора, вказуючи його текстовий тип (тут буде зовнішній ключ – паспорт вчителя), і встановлюємо властивість індексованого поля без повторень. 


Внісши зміни у схему даних бачимо, що створено зв'язок 1-1.


Створіть зв'язки між таблицями бази даних за завданням і надішліть цю базу даних


Учні:


Класи:


Викладання:


Якщо на Вашому комп'ютері є Microsoft Access, виконуйте завдання у ньому. Якщо немає - скористайтесь онлайновим варіантом https://www.apponfly.com/microsoft-access

Для реєстрації пригодиться електронна скринька на gmail.

Як створювати зв'язки в цьому онлайновому середовищі: