- зміст
- виконання
- 2. Створення / підключення бази даних
- 3. Поля ID_Source і ID_Emission
- 4. Встановлення зв'язку між таблицями
- 4.2. Встановлення первинного ключа (Primary Key) в таблиці Source
- 4.3. Створення зв'язку між таблицями по полю ID_Source
- 4.4. діаграма зв'язку
- 5. Програмне управління даними
У даній темі показано, як створювати зв'язок (відношення) між таблицями по деякому полю. Дана тема базується на знаннях попередніх тем:
зміст
Умова задачі
Дана база даних Microsoft SQL Server. База даних розміщується в файлах «MyDatabase.mdf» і «MyDatabase.ldf». Завантажити архів з готовими для роботи файлами бази даних можна тут .
У базі даних задані дві таблиці з іменами Source і Emission. Таблиця Source визначає джерело забруднених викидів. Таблиця Emission визначає час викидів і число забруднених викидів, яке було сформовано джерелом.
Структура таблиць наступна.
Таблиця Source.
Назва поляТип данихКоментарID_Source int Ключове поле, унікальне поле (лічильник), первинний ключ Name char [50] Назва, рядок символів Address char [100] Адреса, рядок символів
Таблиця Emission
Назва поляТип данихКоментарID_Emission int Ключове поле, унікальне поле (лічильник) ID_Source int Зовнішній ключ, значення Source.ID_Source count float Кількість викидів Text char [100] Коментар date datetime Дата і час викидів
Використовуючи засоби системи Microsoft Visual Studio необхідно реалізувати зв'язок (відношення) «один до багатьох» між таблицями Source і Emission по полю ID_Source.
виконання
1. Запуск Microsoft Visual Studio
Запустити систему візуальної розробки додатків Microsoft Visual Studio.
2. Створення / підключення бази даних
На цьому етапі необхідно підключити (або створити) готову базу даних «MyDataBase.mdf», яка складається з двох файлів:
- файл «MyDataBase.mdf»;
- файл «MyDataBase.ldf».
Архів з файлами можна скачати тут .
Після підключення вікно Server Explorer матиме вигляд, як показано на малюнку 1.
Мал. 1. Вікно Server Explorer після підключення бази даних «MyDataBase.mdf»
3. Поля ID_Source і ID_Emission
Слід зазначити, що поля ID_Source і ID_Emission є унікальними лічильниками. Такі поля використовуються в базах даних для забезпечення унікальності кожного запису таблиці.
Поле ID_Source таблиці Source є первинним ключем.
Докладний приклад створення унікального поля, яке є лічильником, описується в статті:
4. Встановлення зв'язку між таблицями
4.1. Зняття опції «Prevent saving changes that require table re-creation»
За замовчуванням, система MS Visual Studio забороняє збереження змін, які вимагають повторного створення таблиць. Щоб дозволити вносити зміни в таблиці потрібно налаштувати (зняти виділення) опцію
Prevent saving changes that require table re-creation
Для цього потрібно виконати наступну послідовність кроків:
- перейти в меню Tools головного меню MS Visual Studio;
- в меню Tools вибрати команду «Options ...». В результаті відкриється вікно «Options» (малюнок 2);
- в лівій частині вікна «Options» послідовно розкрити вкладки «Database Tools» -> «Table and Database Designers» (малюнок 2);
- вибрати елемент «Table and Diagram Options». В результаті в правій частині вікна активується група елементів «Table Options»;
- в групі «Table Options» зняти позначку з опції «Prevent saving changes that require table re-creation» (малюнок 2) і підтвердити вибір (кнопка OK).
Після виконаних дій можна створювати зв'язок між таблицями.
Мал. 2. Опція «Prevent saving changes that require table re-creation»
4.2. Встановлення первинного ключа (Primary Key) в таблиці Source
Як видно зі структури таблиць (рисунок 1) загальним для таблиць є поле ID_Source. Зв'язок між таблицями буде здійснюватися по цьому полю.
У таблиці Source потрібно встановити поле ID_Source як «Первинний ключ» (Primary Key).
Щоб встановити первинний ключ потрібно виконати такі дії:
- перейти в режим редагування таблиці Source вибором команди «Open Table Definition» (малюнок 3). Відкриється вікно редагування таблиці;
- зробити клік правою кнопкою «мишки» на рядку ID_Source і в контекстному меню вибрати команду «Set Primary Key». В результаті поле ID_Source буде позначено як поле, яке є первинним ключем (рисунок 5);
- зберегти і закрити таблицю Source.
Мал. 3. Команда «Open Table Definition»
Мал. 4. Встановлення первинного ключа в таблиці Source
Мал. 5. Поле ID_Source в таблиці Source після встановлення первинного ключа
У таблиці Emission не обов'язково встановлювати первинний ключ.
4.3. Створення зв'язку між таблицями по полю ID_Source
Для створення зв'язків між таблицями використовується елемент "Database Diagrams» бази даних «MyDataBase.mdf». Щоб створити зв'язок між таблицями потрібно виконати наступні дії:
- за допомогою кліка правою кнопкою «мишки» викликати контекстне меню (рисунок 6). У меню вибрати команду «Add New Diagram». В результаті, база даних створить порожню діаграму. Буде виведено вікно «Add Table» додавання таблиць в діаграму (рисунок 7);
- по черзі вибрати потрібні таблиці (Source, Emission) і підтвердити вибір натисканням на кнопці «Add Table»;
- закрити вікно «Add Table».
Мал. 6. Команда додавання нової діаграми
Мал. 7. Вікно «Add Table» додавання таблиць в діаграму
Після виконаних дій вікно діаграми буде мати вигляд, як показано на малюнку 8. Поки що таблиці не мають зв'язку між собою.
Мал. 8. Таблиці Source і Emission
Щоб почати встановлювати відношення між таблицями, потрібно зробити клік на поле ID_Source таблиці Source, а потім (не відпускаючи кнопку мишки) перетягнути його на поле Source таблиці Emission.
В результаті послідовно відкриються два вікна: Tables and Columns (рисунок 9) і Foreign Key Relationship (рисунок 10), в яких потрібно залишити все як є і підтвердити свій вибір на кнопці OK.
У вікні «Tables and Columns» є такі поля (малюнок 9):
- поле «Relationship name». У цьому полі задається ім'я об'єкта, який символізує з'єднання (відношення) між таблицями. За допомогою цього об'єкта (імені) можна управляти деякими властивостями зв'язку (відносини). У нашому випадку з'єднання (відношення) має назву FK_Emission_Source;
- поле «Primary key table:». Це поле задає таблицю, яка є первинною по відношенню до іншої таблиці. У нашому випадку первинної є таблиця Source. Поле, яке служить первинним ключем таблиці має назву ID_Source;
- поле «Foreign key table:» вказує назву таблиці (Emission) і поля в цій таблиці (ID_Source), яке є зовнішнім ключем.
Мал. 9. Вікно налаштування параметрів зв'язку (відносини) між таблицями
У вікні «Foreign Key Relationship» налаштовуються властивості з'єднання. Можна залишити все як є.
Мал. 10. Налаштування властивостей з'єднання FK_Emission_Source
4.4. діаграма зв'язку
Після створення зв'язку вікно діаграми буде мати вигляд, як показано на малюнку 11.
Мал. 11. Вид діаграми після установки відносини (зв'язку) між таблицями Source і Emission
Як видно з малюнка, кінець з'єднання (відносини), що примикає до таблиці Source має вигляд ключа. А кінець з'єднання, яке примикає до таблиці Emission має вигляд знака нескінченність ∞.
Це означає, що в таблиці Source числове значення в поле ID_Source може зустрічатися тільки один раз. А в таблиці Emission числове значення ID_Source може повторюватися (нескінченну кількість разів). Таким чином можна уявити будь-яка множина унікальних об'єктів, які мають властивість повторюватися в деякій предметній області.
Після закриття діаграми її потрібно зберегти під деяким ім'ям, наприклад Diagram1 (рисунок 12). Система видасть відповідне вікно уточнення.
Мал. 12. Завдання імені для діаграми
Також, система може вивести вікно збереження таблиць в базі даних (рисунок 13), оскільки між таблицями вже існує відношення (зв'язок). У цьому вікні потрібно вказати «Yes».
Мал. 13. Вікно збереження таблиць в базі даних у зв'язку зі змінами
Після виконаних дій, діаграма Diagram1 відобразиться у вікні Server Explorer (рис. 14). За допомогою команд контекстного меню є можливість керувати діаграмою. Так, наприклад, команда «Design Database Diagram» переводить діаграму в режим редагування, в якому можна змінювати зв'язки між таблицями бази даних.
Мал. 14. Команда редагування зв'язків (відносин) між таблицями
5. Програмне управління даними
Після створення зв'язку (відносини) між таблицями можна створювати проект, який буде керувати даними в таблицях. Але це вже зовсім інша тема.