sql server+c++
.pdfМіністерство освіти та науки України Національний університет “Львівська політехніка”
Реєстр. № 2942
від 12.01.2010
Проектування реляційної бази даних
MS SQL Server 2005 та клієнтської програми на основі ADO.NET 2.0
Методичні вказівки та завдання до контрольної роботи
з курсу “Бази даних та знань”
для студентів базового напряму 6.0914 “Комп’ютеризовані системи, автоматика і управління” та базового напряму 050201 “Системна інженерія”
Затверджено на засіданні кафедри
“Комп’ютеризовані системи автоматики” Протокол № 4 від 28.12.2009
Львів 2010
Проектування реляційної бази даних MS SQL Server 2005 та клієнтської програми на основі ADO.NET 2.0: Методичні вказівки та завдання до контрольної роботи з курсу “Бази даних та знань” для студентів базового напряму 6.0914 “Ком- п’ютеризовані системи, автоматика і управління” та базового напряму 050201 “Системна інженерія” / Укл.: У.Ю. Дзелендзяк, А.Г. Павельчак, В.В. Самотий – Львів: Львівська політехніка. – 2010. – 115 с.
Укладачі: У.Ю. Дзелендзяк, к.т.н., доцент А.Г. Павельчак, к.т.н., ст. викладач В.В. Самотий, д.т.н., професор
Відповідальний за випуск:
А.Й. Наконечний, д.т.н., професор
Рецензент: З.Р. Мичуда, д.т.н., професор
Мета контрольної роботи:
1.закріпити отримані при вивченні даного курсу знання і навики проектування ER-моделі реляційної бази даних з використанням IE-нотації та реалізації цієї моделі для СКБД
Microsoft SQL Server 2005 у вигляді SQL-сценарію діалектом мови Transact-SQL;
2.ознайомитися з основними об’єктами моделі ADO.NET 2.0 та на їхній основі навчитися отримувати, модифікувати, зберігати, шукати та фільтрувати дані;
3.отримати навики розроблення клієнтських програм для баз
даних з ієрархічною організацією структури даних. Контрольна робота є підсумковою та передбачає самостійне
опрацювання частини інформації, що стосується моделі ADO.NET 2.0.
Етапи виконання контрольної роботи:
1.спроектувати графічну ER-модель реляційної бази даних з використанням IE-нотації;
2.реалізувати розроблену модель у вигляді SQL-скріпту, у результаті виконання якого має створитися фізична база даних та заповнитися першопочатковими даними;
3.розробити клієнтську Windows Forms програму мовою C++/CLI чи C# за допомогою інструментарію Microsoft Visual Studio .NET 2005 на основі моделі ADO.NET 2.0.
1. Поняття ER-діаграм баз даних
Модель «сутність-зв’язок» (Entity-Relationship model чи ER-мо-
дель) була запропонована у 1976 році Пітером Ченом (Peter Chen). Основною метою розроблення такої високорівневої концептуальної моделі даних було графічне представлення логічних об’єктів (таблиць) та їхніх відношень (зв’язків) у структурі бази даних. Слід зазначити, що концептуальна модель даних не залежить від якоїсь конкретної системи керування базами даних (СКБД) чи апаратної платформи, на якій реалізується база даних.
Запропоноване П. Ченом графічне представлення ER-моделі зазнало еволюції, і на сьогоднішній день вона у своєму первісному вигляді вже не використовується. Натомість, сучасними інструментальними CASE-засобами підтримуються, як правило, такі дві методології побудови ER-діаграм – IE та IDEF1X.
1
•Модель IDEF1X є результатом досліджень інтегрованих систем автоматизованого виробництва (ICAM), що проводилися у 1970 роках. Інтеграція графічних напрацювань ICAM для відображення структур даних отримала назву IDEF, а в оригінальній версії компанії Hughes Aircraft – IDEF1. Розширена версія цієї моделі, під назвою IDEF1X, була «прийнята на озброєння» ВВС США, і завдяки цьому набула широке розповсюдження.
Table1 |
Table3 |
Table2 |
Table4 |
ID1 |
ID1 (FK) |
ID2 |
ID4 |
Name |
ID2 (FK) |
Subject |
Model |
|
|||
|
|
ID4 (FK) |
|
Рис. 1.1. Зображення структури БД у IDEF1X-нотації
•Методологія IE (Information Engineering – інформаційна інже-
нерія) побудована на моделі Crow’s Foot (воронячої чи пташиної лапки), що розроблена К.В. Бахманом (C.W. Bachman). Ця модель є достатньо розповсюдженою, завдяки своєму простому візуальному відображенню ER-діаграм.
Table1 |
Table3 |
Table2 |
Table4 |
ID1 |
ID1 (FK) |
ID2 |
ID4 |
Name |
ID2 (FK) |
Subject |
Model |
|
|||
|
|
ID4 (FK) |
|
Рис. 1.2. Зображення структури БД у IE-нотації
Слід зазначити, що у різних інструментальних CASE-засобах методологія IE може мати незначні відмінності у представленні елементів на ER-діаграмах. Серед найвідоміших CASE-засобів можна відзначити такі:
–CA ERwin Data Modeler компанії Computer Associates (CA);
–ER/Studio виробництва Embarcadero Technologies, Inc.;
–Toad Data Modeler виробництва Quest Software, Inc.
2
2. Схематичне зображення IE-нотації
Основу будь-якої ER-діаграми складають такі три елементи: таблиці, стовпці та зв’язки між таблицями.
2.1. Таблиці та стовпці.
УIE-нотації незалежні таблиці відображаються у прямокутнику
зпрямими кутами (рис. 2.1).
Ім’я таблиці |
|
|
Student |
|
|
|
|
|
|
|
Первинний |
|
|
IDstud |
INTEGER |
IDENTITY |
|
|
|||
ключ |
|
|
Surname |
CHAR(20) NOT NULL (AK1.1) |
|
|
||||
|
|
|
|
Альтернатив- |
||||||
|
|
|
Name |
CHAR(15) NOT NULL (AK1.2) |
|
ний ключ |
||||
|
|
|
Rating |
INTEGER |
NULL |
|
|
|||
|
|
|
Birthday |
DATE |
NULL (IE1.1) |
|
|
|||
|
Інверсний вхід |
|||||||||
|
|
|
|
|
|
|
|
|
|
(неунікальний |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
індекс) |
|
|
|
Ім’я |
|
Тип |
|
Null |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
стовпця |
|
стовпця |
|
опції |
|
|
|
Рис. 2.1. Приклад визначення таблиці даних (Data Table)
Ім’я таблиці вказується зверху над прямокутником. Первинний ключ (PK, Primary Key) визначається у верхній час-
тині загального прямокутника та відокремлюється від інших даних суцільною рискою. Первинний ключ може бути визначений як на основі окремого стовпця, так і бути композитним, тобто на основі декількох стовпців. Усі імена стовпців, що визначають первинний ключ, вказуються у верхній відокремленій області прямокутника, інші стовпці – вказуються у нижній частині.
Тип стовпця (Column Datatype) вказується безпосередньо після його назви.
Null-опції (Null option) визначають один з таких параметрів:
•NULL – вказує на допустимість у полях стовпця null-значень;
•NOT NULL – null-значення є недопустимі;
•IDENTITY – є ідентифікуючим стовпцем, тобто визначений як автоінкрементне поле. За замовчуванням такий стовпець починає лічбу від 1 та з одиничним приростом. Якщо потрібно вказати інші значення, тоді їх задають у дужках: IDENTITY(10, 5) – стартує з числа 10 та з приростом у 5 одиниць.
3
Альтернативний ключ (AK, Alternate Key) представляє собою унікальний потенційний ключ, який не є первинним. Цей ключ, аналогічно до первинного, може бути побудований як на одному стовпцеві, так бути і композитним. До альтернативних ключів на діаграмах відносять також і унікальні індекси. Позначення альтернативного ключа розшифровується так:
це число вказує на порядковий номер ключа у таблиці; якщо у таблиці три альтернативних ключі, тоді у інших ключів на цьому місці будуть стояти числа, відповідно, 2 та 3
це число вказує на порядко- (AK1.2) вий номер стовпця у ключі
означає, що це аль- |
|
розділювач (іноді замість крапки |
тернативний ключ |
|
використовують двокрапку : ) |
Рис. 2.2. Розшифрування позначення альтернативного ключа
Інверсний вхід (IE, Inversion Entry) – це стовпець або набір стовпців, що унікально не ідентифікують стрічок таблиці, але через які часто звертаються до даних цієї таблиці. Іншими словами, інверсний вхід представляє собою неунікальний індекс. Позначення є схожим до позначення альтернативного ключа, лише замість AK вписується IE.
Зовнішній ключ (FK, Foreign Key) вказує, що за визначеним стовпцем таблиці є встановлений зв’язок з іншою таблицею. Зовнішні ключі також називають мігруючими стовпцями, які визначені як потенційні (первинні чи унікальні) у тій іншій таблиці. Позначення зовнішнього ключа (FK) вказується одразу ж після імені стовпця (рис. 2.3). У позначеннях зовнішнього ключа не вказуються жодні нумерації.
Security |
Зовнішній ключ |
|
IDstud (FK) INTEGER
Password CHAR(20)
Рис. 2.3. Приклад визначення залежної таблиці даних (Subset Table)
4
У прямокутниках із заокругленими краями (рис. 2.3) зображуються залежні таблиці, тобто такі, які ідентифікуються потенційними ключами іншої таблиці. Іншими словами, первинний ключ або його частина для залежної таблиці мігрує з іншої таблиці, наприклад:
Student |
|
|
Security |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
IDstud |
|
INTEGER |
|
|
IDstud (FK) |
|
INTEGER |
|
|
Surname |
CHAR(20) |
|
Password |
|
CHAR(20) |
|||
|
Name |
CHAR(15) |
|
|
|
|
|
||
|
rating |
INTEGER |
|
|
|
|
|
||
|
birthday |
DATE |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
Parent
ID INTEGER
Name CHAR(10)
Surname CHAR(10)
Child
ChildName CHAR(10)
ID_Par (FK) INTEGER
Birthday DATE
Рис. 2.4. Приклади ідентифікації залежних таблиць
Примітка: підкреслення назв стовпців та їхніх властивостей сірим кольором наводяться тут та нижче по тексту лише для наочності, на своїх діаграмах робити цього не потрібно.
2.2. Зв’язки.
УER-діаграмах використовують такі два типи зв’язків:
•Ідентифікуючий зв’язок – це такий зв’язок, що з’єднує дві таблиці у яких первинні ключі чи їхня частина співпадають. Тобто, потенційний ключ з базової таблиці мігрує у первинний ключ підлеглої таблиці. На ER-діаграмах такий вид зв’язку позначається суцільною лінією (рис. 2.5).
Primary |
|
Slave |
ID |
|
ID_Pr (FK) |
Name |
|
Password |
|
|
|
Рис. 2.5. Ідентифікуючий зв’язок
5
•Неідентифікуючий зв’язок означає, що потенційний ключ з базової таблиці не мігрує у первинний ключ таблиці-нащадка. Такий тип зв’язку часто використовують при посиланні на довідкову таблицю чи з метою уникнення аномалій вставки (тоді усі допустимі значення виносяться у додаткову таблицю, а між таблицями встановлюється неідентифікуючий зв’язок, що забезпечує цілісність посилань). На ER-діаграмах такий вид зв’язку позначається штриховою лінією (рис. 2.6).
Group |
Student |
ID_gr
GroupName
ID_st
ID_gr (FK)
Surname
Рис. 2.6. Неідентифікуючий зв’язок
У IE-нотації для позначення кардинального числа (кількості стрічок, що беруть участь у зв’язку) однієї зі сторін реляційного зв’язку використовують такі позначення «пташиної лапки»:
|
Table |
Table |
|
Table |
||
|
ID |
|
ID |
|
ID |
|
|
Name |
|
Name |
або |
Name |
|
Рис. 2.7. Позначення сто- |
Рис. 2.8. Позначення сторони |
|||||
рони зв’язку «один до…» |
зв’язку «нуль або один до…» |
Позначення сторони зв’язку «один» (рис. 2.7) означає, що кожна стрічка таблиці обов’язково бере участь в індивідуальному зв’язку.
Позначення сторони зв’язку «нуль або один» (рис. 2.8) означає, що кожна стрічка таблиці може брати участь у зв’язку, а може і не брати, але не більше, аніж однієї стрічки у зв’язку. Стрічки, що не беруть участь у зв’язку, мають у сполучному полі null-значення.
6
|
Table |
|
Table |
|
Table |
||
|
ID |
|
|
ID |
|
ID |
|
|
Name |
|
|
Name |
або |
Name |
|
Рис. 2.9. Позначення сторони |
|
Рис. 2.10. Позначення сторони |
|||||
зв’язку «один або багато до…» |
зв’язку «нуль, один або багато до…» |
Позначення сторони зв’язку «один або багато» (рис. 2.9) означає, що у зв’язку беруть участь від однієї до багатьох стрічок. При цьому усі стрічки таблиці мають обов’язково брати участь у зв’язку.
Позначення сторони зв’язку «нуль, один або багато» (рис. 2.10) означає, що кожна стрічка таблиці може брати участь у зв’язку, а може і не брати, при цьому у зв’язку одночасно беруть участь від однієї до багатьох стрічок. Стрічки, що не задіяні у зв’язках, мають у сполучних полях null-значення.
При необхідності можна додатково вказати точне значення кардинального числа, яке чітко регламентує обмеження на допустиму кількість стрічок у зв’язку.
|
Table |
|
|
|
Table |
|
|
ID |
|
|
|
ID |
|
|
|
6 |
|
|
|
(5,20) |
|
Name |
|
|
Name |
||
|
|
|
|
|
||
|
|
|
|
|
|
|
Рис. 2.11. Позначення сторо- |
Рис. 2.12. Позначення сторо- |
|||||
ни зв’язку «точно до…» |
ни зв’язку «(min, max) до…» |
Позначення сторони зв’язку «точно» (рис. 2.11) вказує на те, що кількість стрічок на стороні «багато» не може перевищувати вказаного числа. Наприклад, відношення 1 : 6 відповідає визначенню «один до багатьох», але містить вказівку, що на стороні «багато» кількість стрічок не може перевищувати шести.
Позначення сторони зв’язку «(min, max)» (рис. 2.12) регламентується бізнес-правилом, згідно якого визначається кількість учасників з цього боку зв’язку. Наприклад, між таблицями GROUP та STUDENT можемо встановити зв’язок 1 : (5,20), який вимагатиме присутність у кожній групі не менше 5 студентів, але і не більше 20.
7
Основні види зв’язку між двома таблицями:
а) Ідентифікуючий зв’язок «один до одного».
ця лінія вказує на те, що одній стрічці у таблиці Security ставиться у відповідність лише одна стрічка з таблиці Person
Car |
|
|
|
|
Color |
||||||
|
ID |
|
IDENTITY |
|
|
має |
|
ID (FK) |
|
NOT NULL |
|
|
|||||||||||
|
Model |
NULL |
|
|
|
|
IDColor NOT NULL |
||||
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
ця лінія вказує на те, що одній стрічці у таблиці Person ставиться у відповідність лише одна стрічка з таблиці Security
б) Ідентифікуючий зв’язок «один до нуля, одного чи багатьох».
ця лінія вказує на те, що одній стрічці у таблиці Group ставиться у відповідність лише одна стрічка з таблиці Course
Course |
|
Group |
|
|
|
|||
|
NameCRS |
NOT NULL |
належать |
|
NameGRP |
|
NOT NULL |
|
|
|
|
|
|
|
|
|
|
|
Institute NOT NULL |
|
|
NameCRS (FK) |
NOT NULL |
|||
|
|
|
Note |
|
NULL |
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
цей «воронячий слід» з кружечком вказує на те, що одній стрічці у таблиці Course ставиться у відповідність нуль або декілька стрічок з таблиці Group
в) Неідентифікуючий зв’язок «один до нуля, одного чи багатьох».
Course |
|
Group |
|
|
|
|||
|
NameCRS |
NOT NULL |
належать |
|
NameGRP |
|
NOT NULL |
|
|
Institute NOT NULL |
|
|
|
|
|
|
|
|
|
NameCRS (FK) |
NOT NULL |
|||||
|
|
|
|
|
Note |
|
NULL |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
8