Мета правильної розробки таблиць – видалення надлишкових (повторюваних) даних. Для досягнення цієї мети таблицю розділяють на багато тематичних таблиць, щоб кожний факт було представлено тільки один раз. Потім ви надаєте Access спосіб повернути розділену інформацію разом – це можна зробити, помістивши спільні поля в пов'язані таблиці. Проте для того, щоб зробити це належним чином, необхідно зрозуміти, які зв’язки існують між таблицями, а потім вказати ці зв’язки в базі даних.
У цій статті
Вступ
Створивши таблицю для кожного предмета бази даних, потрібно надати Access спосіб знову об'єднати ці відомості, коли потрібно. Для цього в пов’язані між собою таблиці потрібно вставити спільні поля й установити зв’язки між цими таблицями. Потім можна створювати запити, форми та звіти, які відображатимуть дані одночасно з кількох форм. Наприклад, наведена тут форма містить дані, отримані з кількох таблиць.
1. Ця форма містить відомості з таблиці "Клієнти"...
2. ...з таблиці "Замовлення"...
3. ...з таблиці "Товари"...
4. ...з таблиці "Відомості про замовлення".
Ім’я клієнта в полі Рахунок для надходить із таблиці "Клієнти", значення ідентифікатора замовлення та дати замовлення – з таблиці "Замовлення", назва товару – з таблиці "Товари", а значення вартості одиниці та кількості – з таблиці "Відомості про замовлення". Ці таблиці зв’язані між собою різними способами, що дає змогу об’єднати у формі дані з кожної таблиці.
У попередньому прикладі поля таблиць мають узгоджуватися між собою таким чином, щоб у них відображалися дані щодо одного й того самого замовлення. Така узгодженість досягається за допомогою зв’язків між таблицями. Принцип роботи зв’язків полягає в зіставленні даних у полях ключів – часто такі поля мають однакові імена в обох таблицях. У більшості випадків поля, що збігаються – це первинний ключ однієї таблиці, який створює унікальний ідентифікатор для кожного запису, і зовнішній ключ іншої таблиці. Наприклад, із працівниками можна зіставити замовлення, за які вони відповідають, створивши зв’язок між полями "Ідентифікаційний номер працівника" в таблицях "Працівники" та "Замовлення".
1. Поле "Ідентифікаційний номер працівника" відображається в обох таблицях – як первинний ключ...
2. ... і як зовнішній ключ.
Типи зв’язків між таблицями
У Access є три типи зв'язків між таблицями.
-
Зв’язок "один-до-багатьох"
Розглянемо як приклад базу даних відстеження замовлень, яка містить таблицю "Клієнти" та таблицю "Замовлення". Клієнт може розмістити будь-яку кількість замовлень. Таким чином, для будь-якого клієнта, представленого в таблиці ''Клієнти'', у таблиці ''Замовлення'' може міститися багато замовлень. Взаємозв’язок між таблицями ''Клієнти'' та ''Замовлення'' – це зв’язок ''один-до-багатьох''.
Щоб представити зв’язок ''один-до-багатьох'' у структурі власної бази даних, візьміть первинний ключ на стороні зв’язку ''один'' і вставте його як додаткове поле або поля в таблицю на стороні зв’язку ''багато''. У цьому разі, наприклад, нове поле – поле ідентифікатора з таблиці ''Клієнти'' – потрібно додати до таблиці ''Замовлення'' та назвати його ''Код користувача''. Access потім за допомогою ідентифікатора клієнта в таблиці "Замовлення" знайдіть потрібного клієнта для кожного замовлення.
-
Зв’язок "багато-до-багатьох"
Тепер розгляньмо зв'язок між таблицею "Товари" та таблицею "Замовлення". В одному замовленні може бути вказано кілька товарів. З іншого боку, один товар може зустрічатися в багатьох замовленнях. Таким чином, кожному запису в таблиці ''Замовлення'' може відповідати багато записів у таблиці ''Товари''. Крім того, кожному запису в таблиці ''Товари'' також може відповідати багато записів у таблиці ''Замовлення''. Такий тип зв’язку називається зв’язком ''багато-до-багатьох''. Зверніть увагу, що для виявлення наявних зв’язків ''багато-до-багатьох'' між таблицями важливо розглянути обидва кінці зв’язку.
Для представлення зв’язку "багато-до-багатьох" потрібно створити третю таблицю, яку часто називають розподільною, щоб розділити зв’язок "багато-до-багатьох" на два зв’язки "один-до-багатьох". Первинний ключ із кожної із двох таблиць потрібно вставити у третю таблицю. Унаслідок цього у третій таблиці буде записано всі випадки або екземпляри зв’язків. Наприклад, таблиці "Замовлення" та "Товари" пов’язані зв’язком "багато-до-багатьох", який визначатиметься через створення двох зв’язків "один-до-багатьох" із таблицею "Відомості про замовлення". В одному замовленні може зустрічатися багато товарів, і кожний товар може зустрічатися в багатьох замовленнях.
-
Зв’язок "один-до-одного"
У зв’язку ''один-до-одного'' кожному запису в першій таблиці може відповідати лише один запис у другій таблиці, а кожному запису у другій таблиці може відповідати лише один запис у першій таблиці. Цей зв’язок не дуже поширений, оскільки зазвичай відомості, пов’язані між собою в такий спосіб, зберігаються в одній таблиці. Зв’язок ''один-до-одного'' можна використовувати для розділення таблиці з великою кількістю полів, для відокремлення частини таблиці з міркувань безпеки або для зберігання даних, які застосовуються лише до підмножини головної таблиці. У разі визначення такого зв’язку в обох таблицях мають бути спільні поля.
Навіщо створювати зв’язки між таблицями?
Зв’язки між таблицями можна створювати явно, використовуючи вікно ''Зв’язки'', або перетягуванням полів з області Список полів. Access використовує зв'язки між таблицями, щоб вирішити, як об'єднувати таблиці, коли їх потрібно використовувати в об'єкті бази даних. Існує кілька причин для створення зв’язків між таблицями перед створенням інших об’єктів бази даних, таких як форми, запити та звіти.
-
Зв’язки між таблицями розкривають структуру запитів
Для роботи із записами, отриманими з кількох таблиць, часто потрібно створити запит, який об’єднуватиме таблиці. Робота запиту полягає в зіставленні значень у полі первинного ключа першої таблиці зі значеннями в полі зовнішнього ключа другої таблиці. Наприклад, для повернення рядків, у яких перелічуватимуться всі замовлення кожного клієнта, слід побудувати запит, який об’єднуватиме таблицю ''Клієнти'' з таблицею ''Замовлення'' на основі поля ''Код користувача''. У вікні ''Зв’язки'' можна вручну вказати поля для об’єднання. Але якщо між таблицями вже визначено зв'язок, Access надає об'єднання за промовчанням на основі наявного зв'язку між таблицями. Крім того, якщо використовується один із майстрів запитів, Access використовує відомості, зібрані зі зв'язків між таблицями, які ви вже визначили, щоб представити вам обґрунтовані варіанти вибору та попередньо заповнити властивості відповідними значеннями за замовчуванням.
-
Зв’язки між таблицями розкривають структуру форм і звітів
Під час створення форми або звіту Access використовує відомості, зібрані зі зв'язків між таблицями, які ви вже визначили, щоб представити вам обґрунтовані варіанти вибору та попередньо заповнити параметри властивостей відповідними значеннями за замовчуванням.
-
Зв’язки між таблицями – це основа для забезпечення цілісності даних, що дає змогу запобігти виникненню в базі даних відірваних записів. Відірваний запис – це запис із посиланням на інший запис, якого не існує, наприклад запис про замовлення, який посилається на відсутній запис про клієнта.
Під час створення бази даних усі відомості поділяються на таблиці, кожна з яких має первинний ключ. Потім до пов’язаних таблиць можна додати зовнішній ключ, який посилатиметься на ці первинні ключі. Такі пари ''зовнішній ключ – первинний ключ'' створюють основу для зв’язків між таблицями та багатотабличних запитів. Важливо, щоб ці посилання на зовнішній ключ і первинний ключ синхронізувалися. Цілісність даних залежить від зв’язків між таблицями та допомагає забезпечити синхронізацію посилань.
Загальні відомості про цілісність даних
Під час створення бази даних усі дані про базу даних поділяються на кілька тематичних таблиць для мінімізації надлишковості даних. Потім ви надаєте Access спосіб об'єднати дані, помістивши спільні поля в пов'язані таблиці. Наприклад, для представлення зв’язку ''один-до-багатьох'' потрібно взяти первинний ключ із таблиці ''один'' і вставити його як додаткове поле до таблиці ''багато''. Щоб повернути дані разом, Access приймає значення в таблиці "багато" і шукає відповідне значення в таблиці "один". Таким чином, значення в таблиці ''багато'' посилаються на відповідні значення в таблиці ''один''.
Припустімо, що між таблицями "Служби доставки" та "Замовлення" існує зв’язок "один-до-багатьох". Якщо для служби доставки, яку потрібно видалити, у таблиці "Замовлення" містяться замовлення, ці замовлення після видалення запису "Служба доставки" стануть "відірваними". Замовлення й надалі міститимуть ідентифікатор служби доставки, але ідентифікатор уже буде недійсний, оскільки запису, на який він посилається, більше не існує.
Мета цілісності даних – уникнути відірваності даних і забезпечити синхронізацію посилань таким чином, щоб ця гіпотетична ситуація не могла скластися взагалі.
Забезпечити цілісність можна, застосувавши відповідний параметр до зв’язку таблиці. Після застосування Access відхиляє будь-яку операцію, яка порушує цілісність даних для цього зв'язку таблиці. Це означає, що Access відхилятиме обидва оновлення, які змінюють цільовий об'єкт посилання, і видалення, які видаляють цільовий об'єкт посилання. Можливо, у вас є цілком припустима потреба змінити первинний ключ для перевізника, який має замовлення в таблиці "Замовлення". У таких випадках насправді потрібно, щоб Access автоматично оновили всі застосовані рядки в рамках однієї операції. Таким чином, Access гарантує, що оновлення завершено в повному обсязі, щоб база даних не залишалася в неузгодженому стані, а деякі рядки оновлено, а деякі – ні. Тому Access підтримує параметр Каскадне оновлення пов'язаних полів . Коли ви застосовуєте цілісність даних і вибираєте параметр Каскадне оновлення пов'язаних полів , а потім оновлюєте первинний ключ, Access автоматично оновлює всі поля, які посилаються на первинний ключ.
Крім того, може виникнути потреба видалити рядок і всі пов’язані з ним записи, наприклад запис ''Служба доставки'', і всі замовлення, пов’язані з цією службою доставки. Тому Access підтримує параметр Каскадне видалення пов'язаних записів . Якщо застосувати цілісність даних і вибрати параметр Каскадне видалення пов'язаних записів , а потім видалити запис на стороні первинного ключа зв'язку, Access автоматично видаляє всі записи, які посилаються на первинний ключ.
Перегляд зв’язків між таблицями
Щоб переглянути зв’язки між таблицями, натисніть кнопку Зв’язки на вкладці Знаряддя бази даних. Відкриється вікно ''Зв’язки'', у якому відображаються всі наявні зв’язки. Якщо зв'язки між таблицями не визначено та ви вперше відкриваєте вікно "Зв'язки", Access з'явиться запит на додавання таблиці або запиту до вікна.
Відкриття вікна "Зв’язки"
-
На вкладці Файл натисніть кнопку Відкрити, а потім виберіть і відкрийте базу даних.
-
На вкладці Знаряддя бази даних у групі Зв’язки натисніть кнопку Зв’язки.
-
На вкладці Конструктор зв'язків у групі Зв'язки натисніть кнопку Усі зв'язки.Відобразяться всі визначені зв'язки в базі даних. Зверніть увагу, що приховані таблиці (таблиці, для яких у діалоговому вікні Властивості встановлено прапорець Приховано) не відображатимуться, якщо в діалоговому вікні Параметри переходів не встановити прапорець Приховані об’єкти.
Зв’язок між таблицями зображується за допомогою лінії зв’язку, яка з’єднує таблиці у вікні "Зв’язки". Зв’язки, для яких не забезпечується цілісність даних, зображуються тонкою лінією, яка з’єднує спільні поля, що підтримують зв’язок. Якщо вибрати зв’язок, клацнувши його лінію, лінія стане товстішою для позначення її як вибраної. Якщо для цього зв’язку забезпечити цілісність даних, лінія стане товстішою з обох кінців. Крім того, над товстішим відрізком лінії з одного боку відображається цифра 1, а над товстішим відрізком лінії з іншого боку – знак нескінченності (∞).
Коли вікно "Зв’язки" активне, на стрічці відображаються такі команди:
На вкладці Конструктор зв'язків у групі Знаряддя :
-
Змінити зв’язки . Відкриває діалогове вікно Редагування зв’язків. Вибравши лінію зв’язку, можна вибрати команду Змінити зв’язки, щоб змінити зв’язок таблиці. Крім того, можна двічі клацнути лінію зв’язку.
-
Очистити макет . Видаляє всі таблиці та зв’язки, що відображаються у вікні "Зв’язки". Зверніть увагу, що ця команда лише приховує таблиці та зв’язки – самі вони не видаляються.
-
Звіт про зв’язки . Створює звіт, у якому відображаються таблиці та зв’язки в базі даних. У звіті відображаються лише ті таблиці та зв’язки, які не було приховано у вікні "Зв’язки".
На вкладці Конструктор зв'язків у групі Зв'язки :
-
Додавання таблиць Дає змогу вибрати таблиці для відображення у вікні "Зв'язки".
-
Приховати таблицю . Приховує вибрану таблицю у вікні "Зв’язки".
-
Прямі зв’язки . Відображає всі зв’язки та пов’язані таблиці для вибраної таблиці у вікні "Зв’язки", якщо вони ще не відображаються.
-
Усі зв’язки . Відображає всі зв’язки та пов’язані таблиці для вибраної таблиці у вікні "Зв’язки". Зверніть увагу, що приховані таблиці (таблиці, для яких у діалоговому вікні Властивості встановлено прапорець Прихований) не відображатимуться, якщо в діалоговому вікні "Параметри переходів" не встановлено прапорець "Приховані об’єкти".
-
Закрити . Закриває вікно "Зв’язки". Якщо до макета вікна "Зв’язки" внесено зміни, програма запропонує зберегти їх.