Методические указания для самостоятельной работы студентов по дисциплине «Базы данных»

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ТЕХНІКУМ ПРОМИСЛОВОЇ АВТОМАТИКИ
ОДЕСЬКОЇ НАЦІОНАЛЬНОЇ АКАДЕМІЇ ХАРЧОВИХ ТЕХНОЛОГІЙ



«Затверджую»
Заст. директора
з навчально-методичної роботи
____________ В. Л. Оксаніченко
«___»__________________2013 р.






Методичні вказівки
для самостійної роботи студентів
з навчальної дисципліни
«БАЗИ ДАНИХ»



для підготовки молодших спеціалістів зі спеціальності
5.05010301 «Розробка програмного забезпечення»








м. Одеса
Бази даних. Методичні вказівки для підготовки молодших спеціалістів зі спеціальності 5.05010301 «Розробка програмного забезпечення» за напрямом підготовки 050103 «Програмна інженерія».

Укладач: Тичина Ю. В. – викладач Технікуму промислової автоматики ОНАХТ.
Методичні вказівки розроблені на підставі навчальної програми з «Баз даних», затверджених директором ТПА ОНАХТ Стамболцяном В. О. у 2012 р.

Методичні вказівки розглянуті і схвалені цикловою комісією інформаційних систем ТПА ОНАХТ.

Протокол № ___ від «___» ___________2013 р.
Голова циклової комісії ______________ О. Г. Клименко


























Пояснювальна записка
Самостійна робота студентів є однією з важливих складових освітнього процесу. Їй приділяється особлива увага так як під час її виконання формуються уміння освоювати знання без сторонньої допомоги.
У вітчизняній структурі освіти самостійній роботі студента відводиться багато часу та вона стоїть на рівні з такими видами занять як лекції, практичні і лабораторні роботи.
Методичні вказівки призначені для самостійної підготовки студентів, що вивчають бази даних. На самостійний розгляд виносяться теми, які доповнюють розглянутий на лекційних заняттях матеріал. Самостійна робота припускає опрацювання теоретичного матеріалу, відповіді на питання по кожній темі.
Студенти оформляють свою роботу у вигляді конспекту. Результати роботи можуть бути використані при виконанні практичних завдань та при написанні модульного контролю.
Форми перевірки виконання можуть бути найрізноманітніші: опитування, диктант, тест, захист практичної роботи.
Завдання з самостійної роботи видаються поступово протягом семестру в кінці відповідного лекційного чи практичного заняття.
Функції самостійної роботи:
сприяє засвоєнню знань, формуванню професійних вмінь і навиків, забезпечує формування професійної компетенції;
виховує потребу в самоосвіті, розвиває пізнавальні і творчі здібності;
спонукає до науково-дослідницької роботи .
Види самостійної роботи:
опрацювання навчального матеріалу;
виконання завдань до практичних робіт;
вирішення варіантних завдань та вправ;
написання рефератів, докладів за різними темами;
прийняття участі у студентських конференціях.



Тематика самостійних робіт













































Тема 1 «Компоненти середовища системи керування базами даних (СКБД)»
Мета: визначення головних компонентів середовища СКБД та ознайомлення з їх змістом.
План
Апаратне забезпечення як компонент середовища СКБД.
Програмне забезпечення як компонент середовища СКБД.
Дані як компонент середовища СКБД.
Процедури як компонент середовища СКБД.
Користувачі як компонент середовища СКБД.

Література
Т. Конолі, К. Бегг, А. Строчан «Бази даних. Проектування, реалізація та супровід.» Теорія та практика. Москва, СПб., Київ. 2000 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання:
Які компоненти можна визначити в середовищі СКБД?
Який компонент середовища СКБД вважається найважливішим з точки зору користувачів?
Що таке «Метадані»?
Для чого призначена схема бази даних?
Які функції в середовищі СКБД виконує програмне забезпечення?
На які групи можна розподілити користувачів?
Чим відрізняються функції адміністратора даних від функцій адміністратора баз даних?
Чим займаються розробники баз даних?

В середовищі СКБД можна визначити 5 головних компонентів:
апаратне забезпечення;
програмне забезпечення;
дані;
процедури;
користувачі.

Апаратне
забезпечення
Програмне
забезпечення
Дані
Процедури
Користувачі


КОМП’ЮТЕР МОСТ ЛЮДИНА

Апаратне забезпечення
Для роботи СКБД та додатку необхідне деяке апаратне забезпечення. Воно може змінюватися в широких межах – від одного ПК до мережі з декількох комп’ютерів. Апаратне забезпечення, яке використовується залежить від вимог даної організації та СКБД, яка використовується. Деякі СКБД призначені для роботи тільки з конкретними типами ОС чи обладнанням, інші мають змогу працювати з широким колом апаратного забезпечення та різними ОС.
Програмне забезпечення
Цей компонент охоплює програмне забезпечення самої СКБД та прикладних програм разом з ОС, охоплюючи мережеве програмне забезпечення, якщо СКБД використовується в мережі.
Звичайно, додатки створюються на мовах третього покоління. Таких як С, Cobol, Ada, Pascal чи на мовах четвертого покоління, таких як SQL, оператори якого впроваджуються до програми на мовах третього покоління. Втім, СКБД може мати свої особисті інструменти четвертого покоління, призначені для швидкої розробки додатків з використанням вбудованих не процедурних мов запитів, генераторів звітів, форм, графічних зображень та навіть повномасштабних додатків.


Дані
Найбільш важливим компонентом середовища СКБД (з точки зору кінцевих користувачів) є дані, які грають роль мосту між комп’ютером та людиною. База даних містить як робочі дані, так і метадані, тобто «дані про дані». Структура бази даних має назву схема.
Процедури
До процедур належать інструкції та правила, які повинні враховуватися при проектуванні та використанні БД.
Користувачам та обслуговуючому персоналу важливо надати документацію, яка містить досконалий опис процедур використання та супровід цієї системи, включаючи інструкції про правила виконання наступних дій:
реєстрація в СКБД;
використання деякого інструменту СКБД чи додатку;
запуск та зупинка СКБД;
створювання резервних копій СКБД;
обробка збоїв апаратного та програмного забезпечення, включаючи процедури ідентифікації компоненту, який вийшов з ладу, виправлення компоненту, який відмовив в роботі (наприклад, за допомогою виклику спеціалісту з ремонту апаратного забезпечення), а також відновлення бази даних після ліквідування несправностей;
зміна структури таблиці, реорганізація бази даних, розташованої на деяких дисках, способи поліпшення продуктивності та методи архівації даних на другорядних пристроях зберігання.
Користувачі
Серед них можливо виділити 4 різних групи: адміністратори даних та баз даних, розробники БД, прикладні програмісти та кінцеві користувачі.
Адміністратори даних та баз даних
База даних та СКБД є корпоративними ресурсами, якими слід керувати так само, як іншими ресурсами.
Адміністратор даних (АД) відповідає за керування даними, враховуючи планування бази даних, розробку та супровід стандартів, бізнес-правил та ділових процедур.
АД консультує та дає рекомендації керівнику найвищої ланки, контролює співвідношення спільного напрямку розвитку бази даних, встановленим корпоративній меті.
Адміністратор баз даних (АБД) відповідає за фізичну реалізацію бази даних, враховуючи фізичне проектування та втілення проекту, за забезпечення безпеки та цілісності даних, за супровід ОС, а також за забезпечення максимальної продуктивності додатків та користувачів.
У порівнянні з адміністратором даних, обов’язки адміністратора бази даних носять більш технічний характер, та для нього необхідне знання конкретної СКБД та системного оточування.
Розробники баз даних
В проектуванні великих баз даних приймають участь два різних типи розробників: розробники логічної бази даних та розробники фізичної бази даних.
Розробник логічної бази даних займається ідентифікацією даних (тобто сутностей та її атрибутів), встановлює зв’язки між даними та обмеження, які накладаються на дані, які зберігаються.
Розробник фізичної бази даних отримує готову логічну модель даних та займається її фізичною реалізацією, у тому числі:
перетворенням логічної моделі даних в набір таблиць та обмежень цілісності даних;
обранням конкретних структур зберігання та методів доступу до даних, які забезпечують необхідний рівень продуктивності при роботі з базою даних;
проектуванням різних засобів безпеки даних, які вимагаються.
Розробник фізичної бази даних повинен розбиратися в функціональних можливостях кінцевої СКБД та розуміти переваги та недоліки кожного можливого варіанту втілення.
Він повинен вміти обирати стратегію зберігання даних, яка найбільш буде влаштовувати, за обліком усіх існуючих особливостей їх використання.
Прикладні програмісти
Одразу після створення бази даних треба почати розробку додатків, які надають користувачам необхідні їм функціональні можливості. Саме цю роботу і виконують прикладні програмісти. Звичайно вони працюють на основі специфікацій, які створені системними аналітиками.
Кінцеві користувачі
Користувачами є клієнти бази даних – вона проектується, створюється та підтримується для того, щоб обслуговувати їх інформаційні потреби.
Користувачів можна поділити за засобом використання ними системи:
наївні користувачі звичайно навіть і не підозрюють про присутність СКБД. Вони звертаються до бази даних за допомогою спеціальних додатків, які дозволяють в максимальному ступені спростити виконання ними операції.
Такі користувачі ініціюють виконання операцій бази даних, виконуючі найпростіші команди чи обираючи пункти меню. Це значить, що таким користувачам не потрібно нічого розуміти про СКБД.
Наприклад, для того щоб дізнатися ціну товару, касир в супермаркеті використовує сканер для зчитування нанесеного на нього штрих-коду. В підсумку цієї простої дії спеціальна програма не тільки зчитує штрих-код, але й обирає на основі його значення ціну товару з бази даних, а також зменшує значення в іншому полі базі даних, який визначає залишок товарів на складі, після чого зображує ціну та загальну вартість на касовому апараті.
Користувачі з досвідом знайомі зі структурою бази даних та можливостями СКБД. Для виконання необхідних операцій вони можуть використовувати таку мову запитів високого рівня, як SQL. А деякі користувачі з досвідом можуть створювати власні прикладні програми.






Тема 2 «Трьохрівнева архітектура системи керування базами даних»
Мета: впровадження ідентифікації трьох різних рівнів опису елементів даних, які формують архітектуру систем керування базами даних.

План
Види рівнів архітектури системи керування базами даних.
Зовнішній рівень.
Концептуальний рівень.
Внутрішній рівень.

Література
Т. Конолі, К. Бегг, А. Строчан «Бази даних. Проектування, реалізація та супровід.» Теорія та практика. Москва, СПб., Київ. 2000 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання:
Що є найбільш фундаментальним моментом у звітах дослідницьких груп про архітектуру СКБД?
Які рівні формують трьохрівневу архітектуру СКБД?
На якому рівні сприймають дані користувачі?
На якому рівні сприймають дані СКБД та операційна система?
Для чого призначений концептуальний рівень зображення даних?
Яка інформація міститься на кожному з рівнів архітектури СКБД?
Навіщо архітектура СКБД була поділена на три рівні?



Найбільш фундаментальним моментом у звітах дослідницьких груп про архітектуру системи керування базами даних є ідентифікація трьох різних рівнів опису елементів даних. Ці рівні формують трьохрівневу архітектуру, яка охоплює зовнішній, внутрішній та концептуальний рівні.
Рівень, на якому сприймають дані користувачі, називається зовнішнім рівнем, тоді як система керування базами даних та операційна система сприймають дані на внутрішньому рівні. Концептуальний рівень зображення даних призначений для відображення зовнішнього рівня на внутрішньому та забезпечення необхідної незалежності одне від одного.
Зовнішній рівень – це зображення бази даних з точки зору користувачів. Цей рівень описує ту частину бази даних, яка належить до кожного користувача.
Зовнішнє зображення містить тільки ті сутності, атрибути та зв’язки «реального» світу, які цікаві користувачу, інші сутності, атрибути або зв’язки, які йому не цікаві, також можуть бути зображені в базі даних, але користувач може навіть не підозрювати про їх існування. Різні зображення можуть по-різному відобразити одні й ті ж дані. Наприклад, один користувач може продивлятися дати в форматі день, місяць, рік, а інший – в форматі рік, місяць, день.
Концептуальний рівень – узагальнене зображення бази даних. Цей рівень описує те, які дані зберігаються в базі даних, а також зв’язки, існуючі між ними. Фактично, це повне зображення вимог до даних з боку організації, які не залежать від будь-яких міркувань відносно способу їх зберігання.
На концептуальному рівні зображені такі компоненти:
усі сутності, атрибути та зв’язки;
обмеження на дані;
семантична інформація про дані;
інформація про заходи безпеки та підтримка цілісності.
Внутрішній рівень – фізичне зображення бази даних в комп’ютері. Цей рівень описує те, яка інформація зберігається в базі даних.
Внутрішній рівень описує фізичну реалізацію бази даних, призначену для досягнення оптимальної продуктивності та забезпечення економного використання дискового простору. Він містить опис структур даних та організації окремих файлів, які використовуються для зберігання даних в запам’ятовуючих пристроях.
На внутрішньому рівні зберігається така інформація:
розподіл дискового простору для зберігання даних та індексів;
опис подробиць зберігання записів (з вказівкою реальних розмірів елементів даних, які зберігаються);
відомості про розміщення записів;
відомості про стиснення даних та обраних методах їх шифрування.
Мета трьохрівневої архітектури – це відокремлення користувацького зображення бази даних від її фізичного зображення.



















Тема 3 «Об'єктно-орієнтована модель даних»
Мета: засвоєння основних понять та призначення об'єктно-орієнтованої моделі даних.

План
Об'єктно-орієнтовані СКБД.
Підходи для практичної реалізації об'єктно-орієнтованих баз даних.
Недоліки об'єктно-орієнтованих баз даних.

Література
Т. Конолі, К. Бегг, А. Строчан «Бази даних. Проектування, реалізація та супровід.» Теорія та практика. Москва, СПб., Київ. 2000 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання:
На яких ідеях базуються об'єктно-орієнтовані СКБД?
Якими характеристиками володіє об'єкт в об'єктно-орієнтованих СКБД?
Що називається поліморфізмом?
Який процес називається наслідуванням?
Якими компонентами повинна володіти об'єктно-орієнтована СКБД?
Які існують підходи для практичної реалізації об'єктно-орієнтованих баз даних? Призначення кожного з підходів.
Якими недоліками володіють об'єктно-орієнтовані бази даних?





Створення об'єктно-орієнтованих СКБД вважається одним з найбільш перспективних напрямків в галузі розробки нових типів баз даних.
Об'єктно-орієнтовані СКБД базуються на ідеях, сформованих в об'єктно-орієнтованих мовах програмування (наслідування, інкапсуляції та поліморфізму). Предметна область представляється у вигляді множини класів об'єктів. Структура та поведінка об'єктів одного класу (наприклад, товарів бази даних торговельного підприємства) є однаковими.
Об'єкт володіє наступними характеристиками:
1. Має унікальний ідентифікатор, який однозначно визначає об'єкт.
2. Належить до деякого класу, який володіє визначеними поведінкою та властивостями.
3. Може обмінюватися повідомленнями з іншими об'єктами.
4. Має деяку внутрішню структуру. Об'єкти, внутрішня структура яких прихована від користувачів (відомо лише, які функції може виконувати даний об'єкт), мають назву інкапсульованими.
Поведінка об'єкта задається за допомогою методів його класу – операцій, які можна застосовувати до об'єкту. Здібність застосовувати один й той же метод для різних класів називається поліморфізмом.
В об'єктно-орієнтованій моделі можливе створення нового классу об’єктів на основі вже існуючого классу. Цей процес називається наслідуванням. Новий клас, який має назву підклас існуючого класу (суперкласу), наслідує всі властивості та методи суперкласу. Крім того, для нього можуть бути визначені додаткові властивості та методи.
Об'єктно-орієнтована СКБД дозволяє зберігати об'єкти та забезпечує їх спільне використання різноманітними додатками. Для цього вона повинна володіти наступними компонентами:
1. мовою баз даних, яка дозволяє декларувати класи об'єктів, а потім створювати, зберігати, вилучати та знищувати об'єкти.
2. Сховищем об'єктів, до яких можуть отримати доступ різні додатки. Для ссилок на об'єкти використовуються їх ідентифікатори.

Для практичної реалізації об'єктно-орієнтованих баз даних застосовуються два підходи:
1. Використовується мова об'єктно-орієнтованого програмування (наприклад, С++), доповнена засобами, які дозволяють при необхідності зберігати об'єкти після завершення програми, за допомогою якої вони були створені.
2. Основою є реляційна система, до якої додаються об'єктно-орієнтовані компоненти.
Недоліки об'єктно-орієнтованих баз даних:
1)      відсутнє необхідне уніфіковане теоретичне обгрунтування та стандартизована термінологія;
2)       не існує формально сформульованої методалогії проектування баз даних;
3)       відсутні засоби створення нерегламентованих запитів;
4)       немає загальнихправил підтримки узгоджуванності даних.

В завершення можна відмітити, що об'єктно-орієнтовані бази даних в сучасний час дуже важкі в проектуванні та експлуатації, що обмежує їх практичне застосування. Тому, недивлячись на інтенсивні дослідження, які продовжуються, об'єктно-орієнтована модель даних доки підтримується лише декількома СКБД (POET, Jasmine, Versant, Iris).













Тема 4 «Фундаментальні властивості відношень в реляційній моделі даних»
План
Відсутність кортежів-дублікатів.
Відсутність впорядкованості кортежів.
Відсутність впорядкованості атрибутів.
Атомарність значень атрибутів.

Література
Т. Конолі, К. Бегг, А. Строчан «Бази даних. Проектування, реалізація та супровід.» Теорія та практика. Москва, СПб., Київ. 2000 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання:
Які фундаментальні властивості відношень підтримуються в реляційній моделі?
Що означає властивість відношення «Відсутність кортежів-дублікатів»?
Що означає властивість відношення «Відсутність впорядкованості кортежів»?
Що означає властивість відношення «Відсутність впорядкованості атрибутів»?
Що означає властивість відношення «Атомарність значень атрибутів»?







В реляційній моделі підтримуються такі фундаментальні властивості відношень:
відсутність кортежів-дублікатів;
відсутність впорядкованості кортежів;
відсутність впорядкованості атрибутів;
атомарність значень атрибутів.
Розглянемо детальніше кожне з цих властивостей.
Відсутність кортежів-дублікатів
Та властивість, що відношення не містять кортежів-дублікатів, виходить з визначення відношення як безлічі кортежів. У класичній теорії множин за визначенням кожна множина складається з різних елементів.
З цієї властивості витікає наявність у кожного відношення так званого первинного ключа - набору атрибутів, значення яких однозначно визначають кортеж відношення. Для кожного відношення принаймні повний набір його атрибутів має цю властивість. Проте при формальному визначенні первинного ключа потрібно забезпечення його «мінімальності», тобто в набір атрибутів первинного ключа не повинні входити такі атрибути, які можна відкинути без збитку для основної властивості, - однозначно визначати кортеж. Поняття первинного ключа є виключно важливим у зв'язку з поняттям цілісності баз даних.
2. Відсутність впорядкованості кортежів
Властивість відсутності впорядкованості кортежів відношення також є наслідком визначення відношення-екземпляра як множини кортежів. Відсутність вимоги до підтримки порядку на безлічі кортежів відношення дає додаткову гнучкість СКБД при зберіганні баз даних в зовнішній пам'яті і при виконанні запитів до бази даних. Це не суперечить тому, що при формулюванні запиту до БД, наприклад, на мові SQL можна зажадати сортування результуючої таблиці відповідно до значень деяких стовпців. Такий результат, взагалі кажучи, не відношення, а деякий впорядкований список кортежів.
3. Відсутність впорядкованості атрибутів
Атрибути відношень не впорядковані, оскільки за визначенням схема відношення є безліч пар {ім'я атрибуту, ім'я домена}. Для ссилки на значення атрибуту в кортежі відношення завжди використовується ім'я атрибуту. Ця властивість теоретично дозволяє, наприклад, модифікувати схеми існуючих стосунків не лише шляхом додавання нових атрибутів, але і шляхом видалення існуючих атрибутів. Проте у більшості існуючих систем така можливість не допускається, і хоча впорядкованість набору атрибутів відношення явно не потрібно, часто як неявний порядок атрибутів використовується їх порядок в лінійній формі визначення схеми відношення.
4. Атомарність значень атрибутів
Значення усіх атрибутів є атомарними. Це витікає з визначення домена як потенційної множини значень простого типу даних, тобто серед значень домена не може міститися множина значень (відношення). Прийнято говорити, що в реляційних базах даних допускаються тільки нормалізовані відношення або відношення, представлені в першій нормальній формі. Потенційним прикладом ненормалізованого відношення є наступне:
Номер відділення
Відділення
Номер співробітника ПІБ співробітника ЗП співробітника


310
2934
Євдокімов М. К.
3000


2935
Афоніна О. М.
3200


2936
Петров А. А.
4000

313
2937
Константинов П. Р.
4500

315
2938
Мішина Г. Є.
3900

Можна сказати, що тут ми маємо бінарне відношення, значеннями атрибуту ВІДДІЛЕННЯ якого є відношення. Помітимо, що початкове відношення СПІВРОБІТНИКИ є нормалізованим варіантом відношення ВІДДІЛЕННЯ:
Номер співробітника
ПІБ співробітника
ЗП співробітника
Номер відділення

2934
Євдокімов М. К.
3000
310

2935
Афоніна О. М.
3200
310

2936
Петров А. А.
4000
310

2937
Константинов П. Р.
4500
313

2938
Мішина Г. Є.
3900
315


Нормалізовані відношення складають основу класичного реляційного підходу до організації баз даних. Вони мають деякі обмеження (не будь-яку інформацію зручно представляти у вигляді плоских таблиць), але істотно спрощують маніпулювання даними. Розглянемо, наприклад, два ідентичних оператори занесення кортежу:
Зарахувати співробітника Кузнєцова А. В. (номер співробітника - 3000, ЗП співробітника - 3700) у відділення номер 320 і
Зарахувати співробітника Кузнєцова А. В. (номер співробітника - 3000, ЗП співробітника - 3700) у відділення номер 310.
Якщо інформація про співробітників представлена у вигляді відношення СПІВРОБІТНИКИ, обидва оператори виконуватимуться однаково (вставити кортеж у відношення СПІВРОБІТНИКИ). Якщо ж працювати з ненормалізованим відношенням ВІДДІЛЕННЯ, то перший оператор виразиться в занесення кортежу, а другий - на додавання інформації про Кузнєцова в множинне значення атрибуту ВІДДІЛЕННЯ кортежу з первинним ключем 310.















Тема 5 «Аномалії оновлення в базі даних»
Мета: вивчення недоліків надмірності даних в базі даних та проблем, які виникають внаслідок надмірних даних.

План
Типи аномалій оновлення.
Аномалії вставки та їх різновиди.
Аномалії знищення.
Аномалії модифікації.

Література
Т. Конолі, К. Бегг, А. Строчан «Бази даних. Проектування, реалізація та супровід.» Теорія та практика. Москва, СПб., Київ. 2000 р.
Ч. Сигел «Access’97». Мінськ. 1997 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання:
Що таке «Надмірність даних»?
Що таке «Аномалії оновлення»?
Які види аномалій оновлення Ви знаєте?
При яких обставинах виникають різні види аномалій оновлення? Довести свою відповідь на своїх прикладах.







Головною метою проектування реляційної бази даних є групування атрибутів в відношення таким чином, щоб зменшити надмірність даних та таким чином скоротити об’єм пам’яті, необхідний для фізичного зберігання відношень, які зображуються у вигляді таблиць.
Проблеми, які пов’язані з надмірністю даних, можна простежити, порівнявши відношення «Співробітники» та «Відділення» з відношенням «Співробітники в відділеннях».
Відношення «Співробітники»
Номер
співробіт-ника
ПІБ
Адреса
співробітника
Посада
Дата
народження
ЗП
Номер відділ.

21
Філатов Андрій
Петрович
Одеса, Вільямса 7, 45
Менеджер
01.05.1970
2950
5

37
Нікітіна Ганна
Миколаївна
Черкаси, Корольова 67, 3
Секретар
16.09.1980
1700
3

14
Федоров Микола Сергійович
Черкаси, б-р Шевченко 19, 5
Директор
28.10.1969
5500
3

9
Краснова Олена
Валеріївна
Київ, Пушкінська 21, 44
Бухгалтер
31.12.1964
4200
7

5
Петренко Оксана Вікторівна
Одеса, Левітана 4, 90
Менеджер
03.04.1972
2950
3

41
Васильєва Ганна Семенівна
Одеса, Грецька 47, 15
Бухгалтер
18.02.1968
4200
5


Відношення «Відділення»

Номер
відділення
Адреса
відділення

Телефон
відділення

5
Одеса, Ген. Бочарова 19
551440

7
Київ, Іванова 8
285190

2
Черкаси, Шевченко 14
438615

4
Запоріжжя, Гоголя 82
648369

3
Одеса, Ген. Петрова 1
659569

1
Луганськ, Київська 67
938544







Відношення «Співробітники в відділеннях»

Номер
співр
ПІБ
Адреса
співробітника
Посада
ДН
ЗП
Номер
відділення
Адреса відділення
Телефон відділення

21
Філатов Андрій Петрович
Одеса, Вільямса 7, 45
Менеджер
01.05.
1970
2950
5
Одеса, Ген. Бочарова 19
551440

37
Нікітіна Ганна Миколаївна
Черкаси, Корольова 67, 3
Секретар
16.09.
1980
2700
3
Одеса, Ген. Петрова 1
659569

14
Федоров Микола Сергійович
Черкаси, б-р Шевченко 19, 5
Директор
28.10.
1969
5500
3
Одеса, Ген. Петрова 1
659569

9
Краснова Олена Валеріївна
Київ, Пушкінська 21, 44
Бухгалтер
31.12.
1964
4200
7
Київ, Іванова 8
285190

5
Петренко Оксана Вікторівна
Одеса, Левітана 4, 90
Менеджер
03.04.
1972
2950
3
Одеса, Ген. Петрова 1
659569

41
Васильєва Ганна Семенівна
Одеса, Грецька 47, 15
Бухгалтер
18.02.
1968
4200
5
Одеса, Ген. Бочарова 19
551440


Відношення «Співробітники в відділеннях» є альтернативною формою зображення відношень «Співробітники» та «Відділення».
В відношенні «Співробітники в відділеннях» створюються надмірні дані, так як відомості про відділення компанії повторюються в записах про кожного співробітника цього відділення.
В протилежність цьому, в відношенні «Відділення» відомості про відділення компанії створюються лише в одному записі, а в відношенні «Співробітники» повторюється лише номер відділення компанії, який уявляє собою місце роботи кожного співробітника.
При роботі з відношеннями, які мають надмірні дані, можуть виникати проблеми, які називаються аномаліями оновлення та діляться на:
аномалії вставки;
аномалії знищення;
аномалії модифікації.
Розглянемо детальніше про кожну з аномалій.
1. Аномалії вставки
Існує 2 головних різновиди аномалій вставки, які можна зобразити за допомогою відношення «Співробітники в відділеннях».
При додаванні відомостей про нових співробітників у відношення
«Співробітники в відділеннях» необхідно вказати і відомості про відділення компанії, в якому ці співробітники працюють.
Наприклад, при додаванні відомостей про нового співробітника відділення компанії №7 необхідно ввести відомості про це відділення компанії №7, які повинні співпадати з відомостями про це ж відділення компанії в інших записах відношення «Співробітники в відділеннях».
Відношення «Співробітники» та «Відділення» не постраждають від такого потенційного неспівпадіння даних, так як для кожного співробітника в відношенні «Співробітники» необхідно буде ввести тільки номер існуючого відділення компанії. Окрім цього, відомості про відділення компанії з номером №7 записуються в базу даних один раз у вигляді одного рядка відношення «Відділення».
Для додавання відомостей про нове відділення компанії, яке ще не має своїх
власних співробітників, необхідно буде присвоїти визначення Null всім атрибутам переліку персоналу відношення «Співробітники в відділеннях».
Так як атрибут «Номер співробітника» є первинним ключем відношення «Співробітники в відділеннях», то спроба ввести визначення Null в атрибут «Номер співробітника» викличе порушення цілісності сутностей та буде відхилена. Тобто, в відношення «Співробітники в відділеннях» неможливо ввести запис про нове відділення компанії, який містить визначення Null в атрибуті «Номер співробітника».
Структура відношень «Співробітники» та «Відділення» допомагає уникнути виникнення цієї проблеми, так як відомості про відділення компанії заносяться в відношення «Відділення» незалежно від введення відомостей про співробітників. Відомості про співробітників, які будуть працювати в новому відділенні компанії, можуть бути додані в відношення «Співробітники» трохи згодом.



2. Аномалії знищення
При знищенні з відношення «Співробітники в відділеннях» запису з інформацією про останнього співробітника деякого відділення компанії, відомості про це відділення компанії будуть повністю знищенні з бази даних.
Наприклад, після знищення з відношення «Співробітники в відділеннях» запису «Краснова Олена Валеріївна» з особовим номером «9» з бази даних неявним чином будуть знищенні всі відомості про відділення компанії з номером 7.
Структура відношень «Співробітники» та «Відділення» допомагає попередити виникнення цієї проблеми, так як відомості про відділення компанії характеризуються окремо від записів з відомостями про співробітників. Пов’язує ці два відношення тільки атрибут «Номер відділення».
При знищенні з відношення «Співробітники» запису з номером співробітника «9» відомості про відділення компанії №7 в відношенні «Відділення» залишаться недоторканими.
Аномалії модифікації
При спробі змінити значення одного з атрибутів для деякого відділення компанії в відношенні «Співробітники в відділеннях», необхідно оновити відповідні значення в записах для всіх співробітників цього відділення. Якщо не всі записи з даними в відношенні «Співробітники в відділеннях» будуть оновленні, то в такому разі база даних буде мати суперечливі відомості.
Тобто, в нашому прикладі для відділення компанії з номером 3 в записах, які ставляться до різних співробітників, помилково можуть бути вказані різні значення номеру телефону цього відділення.
Всі наведені приклади показують те, що краще зберігати інформацію в окремих відношеннях «Співробітники» та «Відділення», а не в одному відношенні «Співробітники в відділеннях».





Тема 6 «Робота з оператором Where та Order by»
Мета: ознайомитися з призначенням та синтаксисами операторів мови SQL Where та Order by.
План
Призначення та формат оператора Where.
Типи умов пошуку.
Приклади з використанням типів умов пошуку.
Оператор Order by – оператор для сортування підсумків.
Сортування підсумків в порядку збільшення або зменшення значень.
Слова, які використовуються при роботі з оператором Order by.
Приклади sql-запитів з використанням оператору Order by.

Література
Т. Конолі, К. Бегг, А. Строчан «Бази даних. Проектування, реалізація та супровід.» Теорія та практика. Москва, СПб., Київ. 2000 р.
Ч. Сигел «Access’97». Мінськ. 1997 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання:
Для чого призначений оператор Where?
Які існують типи умов пошуку?
Які оператори порівняння можна використовувати в SQL?
Завдяки якому ключовому слову перевіряється, відповідає або ні деяке рядкове значення заданому шаблону?
Якими способами можна задати діапазон значень?
Для чого призначений оператор Order by?
За якими видами розрізняють сортування підсумків? Що треба для цього вказати в операторі Order by?
Чому оператор Order by повинен бути останім оператором в sql-запиті?
Для чого використовуються ключові слова Top та Percent при роботі з оператором Order by?

Обрання рядків з використанням оператора WHERE
В підсумку виконання оператора Select обираються всі рядки таблиці. Але дуже часто треба тим чи іншим чином обмежити набір рядків, які розташовуються в підсумковій таблиці запиту. Це досягається за допомогою оператора Where, який має такий формат: Where критерій пошуку
Він складається з ключового слова Where, за яким йде перелік умов пошуку, які визначають ті рядки, які повинні бути обрані при виконані запита. Припустимо до 40 виразів, пов’язаних логічними операторами And або Or.
Існує п’ять головних типів умов пошуку:
порівняння – порівнюються результати обчислення одного виразу з результатами обчислення іншого виразу;
діапазон (between) – перевіряється, потрапляє або ні результат обчислення виразу в заданий діапазон значень;
належність до множини (In) – перевіряється, належить або ні результат обчислення виразу до заданої множини значень;
відповідність шаблону (Like) – перевіряється, відповідає або ні деяке рядкове значення заданому шаблону;
значення Null – перевіряється, містить або ні даний стовпець визначення Null (невідоме або пусте значення). Використовується як для числових, символьних так й датових полів.
В SQL можна використовувати такі оператори порівняння:
== - рівність; < - менше; <= - менше або рівно;
> - більше; >= - більше або рівно;
<> - нерівність (стандарт ISO);
!= - нерівність (використовується в деяких діалектах).

Найбільш складні предикати можуть бути побудовані за допомогою логічних операторів And, Or або Not, а також за допомогою дужок, які використовуються для визначення порядку обчислення виразу.
Обчислення виразу в умовах пошуку виконується за такими правилами:
вираз обчислюється з лівого боку на правий;
першими обчислются підвирази в дужках;
оператори Not виконуються до виконання операторів And та Or;
оператори And виконуються до виконання операторів Or.

Приклад. Порівняння умов пошуку
Перелічити весь персонал з розміром заробітної плати більш ніж 3500 грн.
Select [Номер співробітника],Прізвище,Ім’я,По-батькові,Посада, ЗП
From Співробітники
Where ЗП>3500;

Приклад. Складні умови пошуку
Перелічити адреси всіх відділень компанії в Одесі або Києві.
Select [Номер відділення],Місто,Вулиця,Район,[Поштовий індекс]
From Відділення
Where Місто=Одеса’ or Місто=Київ’;

Приклад. Використання діапазону Between в умовах пошуку
Перелічити весь персонал з заробітною платою від 4000 до 4500 грн.
Select [Номер співробітника], Прізвище, Ім’я, По-батькові,Посада, ЗП
From Співробітники
Where ЗП Between 4000 and 4500;

Цей запит можна записати ще таким чином:
Select [Номер співробітника],Прізвище,Ім’я,По-батькові,Посада, ЗП
From Співробітники
Where ЗП>=4000 and ЗП<=4500;
Приклад. Умови пошуку з перевіркою входження в множину (In / Not In)
Скласти перелік всіх бухгалтерів та менеджерів компанії.
Select [Номер співробітника],Прізвище,Ім’я,По-батькові,Посада
From Співробітники
Where Посада In (Бухгалтер’, Менеджер’);

Існує ще заперечна версія цієї перевірки (Not In), яка використвується для відбору будь-яких значень, окрім тих, які вказані в переліку. Запит можна записати таким чином:
Select [Номер співробітника],Прізвище,Ім’я,По-батькові,Посада
From Співробітники
Where Посада=Бухгалтер’ Or Посада=Менеджер’;
Але використання ключового слова In уявляє собою найбільш ефективний спосіб запису умов пошуку, особливо якщо набір припустимих значень є дуже великим.

Приклад. Умови пошуку з вказівкою шаблонів (Like / Not Like)
Знайти всіх співробітників, які проживають в місті Одеса.
При виконанні цього запита треба організувати пошук рядка «Одеса», який може розташовуватися в будь-якому місці значень стовпця «Адреса» таблиці «Співробітники». В SQL існують два спеціальних символи шаблону, які використовуються при перевірці символьних значень:
* (%) - символ проценту являє будь-яку послідовність від нуля або більшої кількості символів;
_ - символ підкреслювання являє собою будь-який один символ.

Всі інші символи в шаблоні уявляють лише себе. Наприклад:
Адреса Like «К*» – цей шаблон означає, що першим символом значення обов’язково повинен бути символ К, а всі інші символи не уявляють зацікавлення та не перевіряються;
Адреса Like «К_ _ _» – цей шаблон означає, що значення повинне мати довжину, яка дорівнює чотирьом символам, до того ж першим символом обов’язково повинен бути символ К;
Адреса Like «*а» – цей шаблон визначає будь-яку послідовність символів довжиною не менш одного символу, до того ж останнім символом обов’язково повинен бути символ а;
Адреса Like «*Київ*» – цей шаблон означає, що нас цікавить будь-яка послідовність символів, яка містить підрядок Київ;
Адреса Not Like «К*» – цей шаблон вказує на те, що треба знайти будь-які рядки, які не починаються з символу К.

Select [Номер співробітника],Прізвище,Ім’я,По-батькові,Посада
From Співробітники
Where Адреса Like *Одеса*’;

Приклад . Використання значення Null в умовах пошуку
Скласти перелік всіх відвідувань здаваємого в оренду объекта нерухомості з номером 36, за якими не было зроблено коментарів.
Select [Номер огляду], [Дата огляду]
From Огляд
Where [Номер об’єкта]= 36 and Коментар is null;


Сортування підсумків - оператор ORDER BY
Рядки в підсумковій таблиці sql-запиту не підпорядковані яким-небудь чином. Але їх можна необхідним чином відсортувати. Для цього використовується оператор ORDER BY.
Оператор ORDER BY вміщує список відокремлених комами ідентифікаторів стовпців, за якими необхідно підпорядкувати підсумкову таблицю sql-запиту. ORDER BY дозволяє підпорядкувати обрані записи в порядку збільшення (Asc) або зменшення (Desc) значень будь-якого стовпця або комбінації столпців, незалежно від того, присутні ці столпці в таблиці підсумків або ні.
Оператор ORDER BY завжди повинен бути останнім елементом в операторі Select.
При роботі з оператором ORDER BY можуть використовуватися такі слова:
Top - повертає відповідну кількість записів, які знаходяться на початку або в кінці діапазону, який описаний за допомогою оператору ORDER BY.
Формат: Top N, де N - ціле значення.

Perсent - повертає відповідний відсоток записів, які знаходяться на початку або в кінці діапазону, який описаний за допомогою оператору ORDER BY.
Формат: Top N Perсent, де N - ціле значення.

Приклад. Сортування за значенням одного стовпця.
Скласти звіт про заробітну плату всіх співробітників компанії, розташувавши рядки в порядку зменшення суми заробітної плати.
Інформація про співробітників компанії може бути представлена відношенням «Співробітники», яке містить стовпці з такими атрибутами:
Відношення «Співробітники»
Код
ПІБ
Адреса
Теле-
фон
Поса-
да
Стать
ДН

ЗП
Номер
відділ.

21
Філатов Андрій Петрович
Одеса, Вільямса 7, 45
496433
Менед-
жер
Ч
01.05.
1970
2950
5

37
Нікітіна Ганна Миколаївна
Черкаси, Корольова 67, 3

Секре-
тар
Ж
16.09.
1980
2700
3

14
Федоров Микола Сергійович
Черкаси, б-р Шевченко 19, 5
480091
Дирек-
тор
Ч
28.10.
1969
5500
3

9
Краснова Олена Валеріївна
Київ, Пушкінська 21, 44
735565
Бухгал-тер
Ж
31.12.1964
4200
7

5
Петренко Оксана Вікторівна
Одеса, Левітана 4, 90
489657
Менед-
жер
Ж
03.04.1972
2950
3

41
Васильєва Ган-на Семенівна
Одеса, Грецька 47, 15
228900
Бухгал-тер
Ж
18.02.1968
4200
5


Select Код, ПІБ, З_П
From Співробітники
Order by ЗП desc;



Приклад. Сортування за деякими стовпцями.
Вивести скорочений перелік об’єктів нерухомості, які здаються в оренду, розташувавши за їх типом. Інформація про об’єкти нерухомості може бути представлена відношенням «Об’єкт нерухомості», яке містить стовпці з такими атрибутами:
Відношення «Об’єкт нерухомості»
Номер
об’єкту
Місто
Вулиця
Район
Тип
Кімнати
Орендна
плата
Номер
власника

1
Одеса
Ген. Бочарова
Суворовський
Квартира
2
250 у.о.
45

2
Київ
Пушкіна
Центральний
Квартира
1
350 у.о.
16

3
Миколаїв
Київська
Центральний
Будинок
3
300 у.о.
72

4
Одеса
І. Рабіна
Малиновський
Квартира
1
280 у.о.
11


Select [Номер об’єкту], Тип, Кімнати, [Орендна плата]
From [Об’єкт нерухомості]
Order by Тип;
Для того, щоб підпорядкувати об’єкти нерухомості ще й в порядку зменшення орендної плати, необхідно додатково вказати молодший ключ сортування.
Select Номер_об’єкту, Тип, Кімнати, Орендна_плата
From [Об’єкт нерухомості]
Order by Тип, Орендна_плата desc;

Після написання такого sql-коду підсумок буде підпорядкований спочатку за типом об’єкту нерухомості, який здається в оренду, а в межах одного типу об’єкту – в порядку зменшення значення орендної плати.










Тема 7 «Організація реляційних баз даних. Створення бази даних в СКБД Access»
Мета: ознайомитися з призначенням реляційної СКБД MS Access та етапами проектування в ній бази даних. Навчитися створювати нову базу даних в реляційній СКБД MS Access декількома способами. Навчитися створювати таблиці для бази даних в СКБД Access та здійснювати поєднання інформації з декількох таблиць завдяки створенню зв’язків між ними.

План
Призначення реляційної СКБД MS Access.
Етапи проектування бази даних.
Створення бази даних в реляційній СКБД MS Access.
Способи створення бази даних в реляційній СКБД MS Access.
Методи створення таблиць.
Визначення полів.
Типи даних, які використовуються при створенні таблиць.
Визначення первинного ключу.
Визначення властивостей полів.
Встановлення зв’язків між таблицями.

Література
Т. Конолі, К. Бегг, А. Строчан «Бази даних. Проектування, реалізація та супровід.» Теорія та практика. Москва, СПб., Київ. 2000 р.
Ч. Сигел «Access’97». Мінськ. 1997 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.


Домашнє завдання: вивчити конспект, знати відповіді на такі питання:
Для чого при проектуванні бази даних потрібно задавати структуру?
На які етапи поділяється проектування бази даних?
Який етап проектування бази даних є самим першим та що на ньому визначається?
Якими принципами рекомендується керуватися при проектуванні таблиць бази даних?
За що відповідає етап визначення зв’язків між таблицями?
Що треба зробити після проектування таблиць, полів та зв’язків?
Які об’єкти, окрім таблиць, можна створювати при роботі з базою даних?
Які дії треба виконати для того щоб запустити MS Access?
Як створити нову базу даних в MS Access?
Якими способами можна створити базу даних MS Access?
Як присвоїти новій базі даних ім’я?
Яке розширення мають бази даних, створені в MS Access?
Для чого призначена закладка «Таблиці» в вікні бази даних?
Якими методами можна створити таблицю в MS Access?
Для чого потрібні стовбці «Ім’я поля», «Тип даних» та «Опис» при визначенні полів? Який з них є необов’язковим для заповнення?
Якими типами даних можна користуватися при роботі з полями таблиць бази даних MS Access?
Чим «Поле Memo» відрізняється від текстових полів?
Який тип даних дозволяє створювати поле, за допомогою якого користувач має змогу обрати значення з переліку.
Що таке «Ключове поле»? Яким чином можна створити ключове поле в MS Access? Який тип даних найчастіше використовується для ключу, призначеного в якості ключового?
Для чого потрібна секція „Властивості поля” вікна „Таблиця” в режимі конструктору?
Як встановити зв’язок між таблицями в СКБД Access?

Організація реляційних баз даних
Система керування базою даних MS Access стала найбільш продаваємою в світі системою керування базою даних, тому що в ній оптимальним чином поєднуються міцність та легкість в керуванні.
Вона достатньо міцна та насичена для того, щоб користувачі мали змогу створити з її допомогою закінчені додатки з незначним використанням програмування чи зовсім не програмуючи.
У той же час система керування базою даних Access містить сучасну мову програмування Visual Basic for Application, яка може бути використана для створення найбільш сучасних додатків.
Крім цього, пакет системи керування базою даних Access достатньо легкий в використанні, так що за короткий час новачок має змогу навчитися керувати своїми власними даними за допомогою системи керування базою даних Access.
В Microsoft Access перш ніж створювати таблиці, форми та інші об’єкти необхідно задати структуру бази даних. Добра структура бази даних є основою для створення адекватної вимогам ефективної бази даних.
Виділяють такі етапи проектування бази даних:
визначення мети створення бази даних;
визначення таблиць, які повинна містити в собі база даних;
визначення необхідних в таблиці полів;
завдання індивідуального значення кожному полю;
визначення зв’язків між таблицями;
відновлення структури бази даних;
додавання даних та створення інших об’єктів бази даних.

1. Визначення мети створення бази даних
На першому етапі проектування бази даних необхідно визначити мету створення бази даних, головні функції та інформацію, яку вона повинна містити. Тобто необхідно визначити головні теми таблиць бази даних та інформацію, яку будуть містити поля таблиць.
База даних повинна відповідати вимогам тих, хто буде безпосередньо з нею працювати. Для цього необхідно визначити теми, які повинна покривати база даних, звіти, які вона повинна видавати, проаналізувати форми, які в теперишню мить використовуються для запису даних.
Визначення таблиць, які повинна містити база даних
Одним з найбільш важким етапом в процесі проектування бази даних є розробка таблиць, так як результати, які повинна видавати база даних (звіти, вихідні форми та інші) не завжди дають загальну уяву про структуру таблиці.
При проектуванні таблиць зовсім необов’язково використовувати Microsoft Access. Спочатку найкраще розробити структуру на папері. При проектуванні таблиць рекомендується керуватися наступними головними принципами:
інформація в таблиці не повинна дублюватися. Не повинно бути повторень та й між таблицями.
Коли відповідна інформація зберігається тільки в одній таблиці, то змінювати її доведеться тільки в одному місці. Це робить роботу більш ефективною, а також виключає можливість неспівпадіння інформації в різних таблицях. Наприклад, в одній таблиці повинні міститися адреси та телефони клієнтів.
кожна таблиця повинна містити інформацію тільки на одну тему.
Відомості на кожну тему опрацьовуються набагато легше, ніж якщо б містилися в незалежних одна від одної таблицях. Наприклад, адреси та закази клієнтів зберігаються в різних таблицях, з тим щоб при знищенні заказу інформація про клієнта залишалась в базі даних.
Визначення необхідних в таблиці полів
Кожна таблиця містить інформацію на окрему тему, а кожне поле в таблиці містить окремі відомості по темі таблиці. Наприклад, в таблиці з даними про клієнта можуть міститися поля з назвою компанії, адресою, країною та номером телефону.
При розробці полів для кожної таблиці необхідно пам’ятати:
кожне поле повинне бути пов’язане з темою таблиці;
в таблиці повинна бути присутня вся необхідна інформація;
інформацію слід розбивати на найменші логічні одиниці (наприклад, поля «Ім’я» та «Прізвище», а не загальне поле ПІБ).
Завдання індівідуальних значень кожному полю
З тим щоб Microsoft Access мав змогу зв’язати дані з різних таблиць, наприклад, дані про клієнта та його закази, кожна таблиця повинна містити поле чи набір полів, які будуть задавати індивідуальні значення кожному запису в таблиці. Таке поле чи набір полів називається головним ключем.
Визначення зв’язків між таблицями
Після розподілу даних по таблицях та визначення ключових полів необхідно обрати схему для зв’язку даних в різних таблицях. Для цього потрібно визначити зв’язки між таблицями.
6. Відновлення структури бази даних
Після проектування таблиць, полів та зв’язків необхідно ще раз проглянути структуру бази даних та виявити можливі недоліки. Бажано це зробити на цьому етапі, доки таблиці не заповнені даними.
Для перевірки необхідно створити декілька таблиць, визначити зв’язки між ними та занести декілька записів до кожної таблиці, потім продивитися, відповідає база даних поставленим вимогам.
Рекомендується також створювати чернеткові вихідні форми та звіти та перевіряти, видають вони потрібну інформацію чи ні. Крім того необхідно виключити з таблиць всі можливі повторювання даних.
7. Додавання даних та створення інших об’єктів бази даних.
Якщо структури таблиць відповідають поставленим вимогам, то можна заносити дані. Потім можна створювати запити, форми, звіти, макроси та модулі.
Запити використовуються для відбору даних з бази даних. Відбір даних можливо здійснювати на таких мовах як: SQL та QBE.
Форми використовуються для введення та модифікації даних в базі даних.
Звичайно користувачі працюють з формами, а не з таблицями. Форми дають можливість більш художньо відобразити дані в базі даних.
Звіти використовуються для видачі даних на принтер.
Макроси використовуються для автоматизації виконання окремих операцій над базою даних.
Модулі – це створення додатків з використанням мови VBA (Visual Basic for Application).
Створення бази даних в СКБД MS Access
Для того щоб запустити MS Access необхідно виконати наступні дії:
на «Линейке задач» Windows (Task Bar) натиснути «Пуск» (Start) та перемістити покажчик миші на пункт «Программы» (Programs);
в меню «Программы» (Programs) натиснути на опції «Microsoft Access».
Після запуску MS Access відображає діалогове вікно, яке дозволяє створити нову базу даних або відкрити вже існуючу.
Базу даних можна створювати двома способами:
створити пусту базу даних, а потім створювати таблиці та інші об’єкти, які будуть необхідні;
використовувати один з можливих шаблонів бази даних, які постачаються разом з MS Access, та використавши «Мастер базы данных», зробити його відповідним пред’явленим вимогам.
При створенні пустої бази даних або використанні «Мастера базы даннях», MS Access відображає діалогове вікно «Файл новой базы даннях», для того, щоб дати можливість визначити ім’я нової бази даних та папку, де буде знаходитися нова база даних.
Для того щоб дати ім’я новій базі даних, необхідно ввести ім’я в поле «Имя файла» («File Name»). Для імен файлів потрібно використовувати такі ж самі правила, що й при призначенні імен іншим файлам в Windows: довжина імені не повинна перевищувати 256 символів, та в ім’я можна вміщувати пробіли.
MS Access автоматично присвоїть файлу розширення .mdb (Microsoft DataBase). MS Access пропонує для нових баз даних, які створюються, такі імена, як db1.mdb або db2.mdb, але бажано використовувати більш обгрунтовані імена для того, щоб легше було розрізняти файли.



Створення таблиць та зв’язків між таблицями в СКБД Access
Після того як база даних буде створена, необхідно приступити до створення таблиць. Відкрите вікно бази даних має в якості означеної за умовчуванням закладку «Таблиці», яка з’явилась зверху всіх інших закладок, розташованих у верхній частині вікна бази даних.
Якщо натиснути по кнопці «Создать» («New») MS Access відобразить діалогове вікно «Новая таблица» («New Table»), яке пропонує обрання одного з наступних методів створення таблиці:
режим таблицы («Datasheet View») створює нову таблицю та відображає її в режимі таблиці таким чином, що в неї одразу можна вводити дані;
конструктор («Design View») відображає нову таблицю в режимі конструктору, що дає можливість задавати поля за допомогою спеціальних методів;
мастер таблиц («Table Wizard») дозволяє створювати таблицю за допомогою майстру;
импорт таблиц («Import Table») дозволяє створювати спеціальні типи
свіязь с таблицами («Link Table») таблиць, які використовуються для
роботи з даними з інших додатків.
Визначення полів
Якщо обрати «Режим конструктору» в діалогову вікні «Новая таблица», MS Access відобразить вікно «Таблица» в режимі конструктору, де для кожного поля в окремості треба ввести всю необхідну інформацію, тобто заповнити стовбці «Имя поля» («Field Name»), «Тип данных» («Data Type») та «Описание» («Description»).
«Имя поля» – необхідно використовувати ті ж самі правила присвоєння імен для полів, що для інших об’єктів MS Access. Імена можуть вміщувати в себе до 64 символів.
«Тип данных» - MS Access, як й інші системи керування базами даних потребує визначення типу даних, які будуть міститися в кожному полі.
Є можливість обрати наступні типи даних:
«Текстовый» («Text») – розмір – до 255 символів, включаючи букви, цифри та спеціальні символи.
«Поле Memo» («Memo») – розмір – до 65000 символів. На відміну від текстових полів, поле з даними цього типу має змінну довжину та користувач не завдає її максимальний розмір.
«Числовой» («Number») – цей тип містить числові дані, які використовуються в обчисленнях. Тип чисел, які містить поле, та точність обчислень залежить від розміру, який користувач завдасть числовому полю. Деякі числові поля містять тільки цілі числа, інші можуть містити числа з багатьма десятковими знаками.
«Дата/Время» («Date/Time») – містить дати та час. В залежності від формату, який користувач присвоює полю, можливо вводити в нього календарні дані чи значення часу в тій чи іншій формі.
«Денежный» («Currency») – містить числа, які використовуються в грошових обчислюваннях, в обчислюваннях с точністю до чотирьох цифр праворуч від десяткової коми.
«Счётчик» («AutoNumber») – містить послідовні числа, які Access вводить автоматично. Access розміщує число 1 в цьому полі в перший запис, який користувач вводить в таблицю, число 2 – в другий запис та т.п. Неможливо змінити числа, які Access вводить в це поле.
«Логический» («Yes/No») – використовується для зберігання тільки двох значень, визначаємих як ІСТИНА/НЕПРАВДА, ТАК/НІ чи ВІМКНУТИ/ВИМКНУТИ, в залежності від формату, який користувач задає даному полю в панелі «Свойства поля» («Properties»).
За умовчуванням поля ТАК/НІ відображаються в таблицях у вигляді вимикачей. Коли вимикач є активним, тобто позначений, то значення дорівнює ІСТИНА (чи ТАК, чи ВІМКНУТИ), а коли неактивний, значення дорівнює НЕПРАВДА (чи НІ, чи ВИМКНУТИ).
«Поле обекта OLE» («OLE Object») – цей тип даних вміщує дані з інших додатків, які підтримують технологію OLE (Object Linking And Embedding) – зв’язок та впровадження об’єктів.
Це поле може бути використане для приєднання зображень, звукових файлів та даних іншого типу, які доступні з іншого будь-якого windows-додатку, який підтримує OLE.
«Гіперссылка» («HyperLink») – це поле містить адресу об’єкту, документу або web-сторінки, який можна вивести на екран звичайним натиском на відповідному полі. Можна також вміщувати ці поля в форми та звіти.
Наприклад, якщо існує таблиця, в якій містяться дані про компанії, які є клієнтами деякої фірми, можна розмістити в неї поле гіперзноски з адресою сторінки кожної компанії. Дані такої сторінки може відобразити будь-який користувач звичайним натисканням по цьому полю в таблиці або в формах введення даних, які містять це поле.
«Мастер подстановок» («Lookup Wizard») – дозволяє створювати поле, за допомогою якого користувач має змогу обрати значення з переліку.
MS Access автоматично здійснює програмну перевірку внесення даних на тип даних. Наприклад, в числові поля можна заносити тільки числа, а в поля з датою – тільки дійсні календарні дати. Якщо користувач спробує в поле ввести дані не того типу, вони не будуть прийняті та користувач отримає від MS Access повідомлення про помилку.

«Описание» – розділ опису є необов’язковим для заповнення, але інформація, яка буде внесена в цей розділ відображається в рядку стану при внесенні даних для окремого поля, полегшуючи процес внесення.

Визначення первинного ключу
MS Access має змогу видобувати дані швидше, якщо таблиця має одне поле в якості первинного ключу. Це ключове поле завжди повинне бути присутнім при роботі з базою даних.
Ключове поле – це поле або декілька полів, які ідентифікують кожний запис в таблиці.
Найбільш поширеним первинним ключем є послідовно пронумероване поле, таке, як, наприклад, «Номер співробітника», якому надано унікальне значення для кожного запису в таблиці. Це поле використовується в якості первинного ключу.
Краще за все при створюванні первинного ключу використовувати поле, яке містить тип даних «Счётчик».
Для того, щоб створити первинний ключ, треба спочатку описати це поле в режимі конструктору, як будь-яке інше поле. Потім виділити це поле, після чого або обрати опцію «Ключевое поле» («Primary Key») з меню «Правка», або натиснути на панелі інструментів «Ключевое поле».
MS Access виводить на екран зображення ключу в лівій частині поля первинного ключу.
MS Access може створювати поле первинного ключу, коли користувач не створив його самостійно. Коли зачиняється вікно «Таблиця», MS Access виводить на екран діалогове вікно та запрошує підтвердження на визначення поля первинного ключу. Необхідно натиснути «Да», якщо треба, щоб MS Access створив це поле.
Якщо одне з полів таблиці має тип даних «Счётчик», то MS Access призначить його в якості первинного ключу. Та навпаки, MS Access додасть в таблицю нове поле з типом даних «Счётчик» та присвоїть йому ім’я «Код».

Визначення властивостей полів
СКБД MS Access надає засоби для вказівки додаткових обмежень для полів таблиці, які вводяться в секції «Свойства поля» вікна «Таблиця» в режимі конструктору.
З кожним полем таблиці пов’язаний набір властивостей, які можуть бути використані для налагоджування засобу зберігання даних в полі, методів роботи з полем та способу його відображення на екрані. Наприклад, розміщуючи необхідне значення в властивості «Розмер поля» («Field Size») можна завдавати максимальну кількість символів, яку припускається вводити в конкретне поле типу «Текстовый» («Text»).
Тип даних поля визначає набір властивостей, які будуть припустимі при опису цього поля. Доступ до властивостей полів здійснюється обранням необхідного поля в верхній секції вікна «Таблица» в режимі конструктору, після чого з’явиться можливість обрання необхідних властивостей в нижній секції цього вікну.
Встановлення значень властивостей полів в вікні «Таблица» в режимі конструктору гарантує, що поля будуть мати коректні значення властивостей при використанні їх описів у процесі створення форм або звітів.

Властивість «Розмер поля» («Field Size») – є доступним тільки полям з типом
даних «Текстовый», «Числовой» або «Счётчик» та призначений для завдання максимальної довжини даних, які можуть зберігатися в цьому полі.
Властивість «Формат поля» («Format») – призначена для визначення способу
відображення та виведення на друк полів, які містять числа, дату, відмітки часу та текстові дані.
СКБД MS Access надає широкий діапазон форматів для зображення даних різних типів. Наприклад, поля, які містять дату/час, можуть відображати дати в різних форматах – короткому («Short Date»), середньому («Medium Date») або довгому («Long Date»). Дата «21 листопада 2013 року» може бути зображена таким чином «21.11.13» (короткий формат), «21-лист-13» (середній формат) або «21 листопада 2013» (довгий формат).
Властивість «Число десятичных знаков» («Decimal Places») – відноситься
тільки до полів з числовим або грошовим типом даних та призначена для вказівки кількості дрібних десяткових знаків, які повинні виводитися при відображенні чисел.
Властивість «Маска ввода» («Input Mask») – використовується при внесені
даних в таблицю для організації контролю формату значень, які вводяться. Маска визначає тип символу, який є припустимим в кожній позиції вхідного поля. Крім цього, маска введення може спрощувати внесення даних за рахунок автоматичного розміщення спеціальних форматуючих символів в необхідні позиції та генерації повідомлень про помилки при спробі внесення некоректної інформації.
СКБД MS Access надає широкий діапазон символів маски, які дозволяють ефективно керувати процесом внесення даних.


Символи масок внесення
Символ
Значення

0
Необхідна цифра.

9
Можна ввести цифру або пробіл, але не обов’язково.

#
Може бути занесена цифра, пробіл, «+» або «-», але не обов’язково.

L
Повинна бути введена буква.

?
Може бути введена буква, але не обов’язково.

A
Повинна бути введена буква або цифра.

а
Може бути введена буква або цифра, але не обов’язково.

&
Може бути введений будь-який символ або пробіл.

C
Може бути введений будь-який символ або пробіл, але не обов’язково.

<
Перетворює всі символи праворуч до нижнього регістру.

>
Перетворює всі символи праворуч до верхнього регістру.

!
Вказує на те, що маску потрібно заповнювати з правої на ліву сторону, а не навпаки. Цей символ можна використовувати, якщо символи ліворуч є необов’язковими. ! можна використовувати в будь-якій позиції маски.

\
Наступний символ слід уявляти буквально, а не у вигляді коду.


Властивість «Подпись» («Caption») – використовується для внесення найбільш
повного опису імені полю або для розміщення іншої корисної інформації, які відображаються в заголовках різних уявлень.
Наприклад, якщо властивості «Подпись» поля «Н готелю» дати значення «Номер готелю», то саме це значення буде видано в заголовок відповідного стовпця сітки даних замість імені полю.
Властивість «Значение по умолчанию» («Default Value») – з метою
прискорення процесу внесення даних та зменшення кількості можливих помилок, для будь-якого полю можна вказати значення, які будуть автоматично розміщуватися в відповідне поле внесення при створенні нового запису.
Ця властивість не може бути застосована для даних типу «Счётчик» та «Поле объекта OLE».
Властивість «Условие на значение» («Validation Rule») та «Сообщение об
ошибке» («Validation Text»).
Властивість «Условие на значение» призначена для завдання вимог, яким повинне відповідати внесене в поле значення. При внесенні даних, для яких встановлені правила перевірки не виконуються, користувачу відображається повідомлення, яке містить текст, розташований в властивості «Сообщение об ошибке».
Правила перевірки можуть використовуватися для визначення діапазону припустимих значень числових полів та датових полів. Завдання схожих обмежень суттєво зменшує кількість помилок, які можуть винукнути при внесенні даних в таблицю.
Властивість «Обязательное поле» («Required»)
Обов’язковими називають такі поля, які повинні містити конкретні значення в будь-якому з записів таблиці. Якщо властивості «Обязательное поле» деякого поля дати значення «Так» («Yes»), це буде значити, що це поле є обов’язковим. В підсумку, при внесенні нових записів в таке поле обов’язково необхідно буде внести значення, яке відрізняється від Null. Таким чином, встановлення того чи іншого значення властивості «Обязательное поле» є еквівалентним дозволу або забороні розміщення в це поле визначення Null.
Так як поля первинних ключів грають особливу роль, висувається жорстка вимога: ключові атрибути завжди повинні бути обов’язковими полями та не повинні містити пустих значень. При створенні таблиці для кожного поля за умовчуванням приймається, що воно не є обов’язковим.
Властивість «Пустые строки» («Allow Zero Length») – використовується для
вказівки того, припускається розміщувати в текстове поле символьний рядок нулевої довжини (« »).
Ця властивість приймається тільки для полів типу «Текстовый», «Поле Memo» та «Гіперссылка».
Якщо потрібно, щоб СКБД MS Access при занесенні в деяке поле пустого значення розташовувала в таблицю замість значення Null строку нулевої довжини, то обом властивостям «Пустые строки» та «Обязательное поле» необхідно встановити значення «Так» («Yes»).
Але властивість «Пустые строки» працює незалежно від властивості «Обязательное поле». Останнє призначене тільки для вказівки того, припускається чи ні розміщення в даному полі значення Null. Якщо властивості «Пустые строки» надано значення «Так», то строки нулевої довжини будуть вважатися припустимим значенням для даного поля незалежно від стану його властивості «Обязательное поле».
Властивість «Індексированое поле» («Indexed») – може використовуватися
для створення індексів для одного поля. Наявність індексу прискорює виконання запитів до проіндексованого поля, а також операції сортування та групування.
Встановлення зв’язків між таблицями
Для того щоб встановити зв’язок між таблицями необхідно виконати команду «Схема данных» з меню «Сервіс»:
З’явиться вікно «Схема данных». Якщо зв’язок встановлюється вперше, то воно буде містити діалогове вікно «Добавление таблицы». Якщо вікно «Добавление таблицы» відсутнє, його можна відкрити, обравши команду «Добавить таблицу» з меню «Связи» або обравши піктограму «Добавить таблицу».
Обрати таблицю, яка буде використовуватися для встановлення зв’язків, потім виконати натискання по кнопці «Добавить», для додавання таблиці в вікно «Схема данных».
Повторити дії, які були описані в пункті №2 для кожної таблиці, яка приймає участь в встановленні зв’язку.
Для створення зв’язків між таблицями перемістити поле (або поля), які необхідно зв’язати на відповідне поле іншої таблиці. В більшості зв’язків ключове поле першої таблиці зв’язується з аналогічним полем другої таблиці. Після переміщення поля з’явиться діалогове вікно «Связи».
В діалоговому вікні зображені назви таблиць, між якими встановлюються зв’язки та імена полів для зв’язку. Полям, завдяки яким створюються зв’язки між таблицями, необов’язково мати однакові імена, але вони повинні бути одного типу. Виключення складають поля лічильників, які можна пов’язувати з числовими полями.
Для автоматичної підтримки цілісності бази даних треба встановити прапорець «Обеспечение целостности даннях». Крім цього прапорця в вікні зображені й інші:
Каскадное обновление связанных полей. При ввімкненні даного режиму зміни, зроблені в пов’язаному полі першої таблиці, автоматично заносяться в поля пов’язанної таблиці, яка містить ті ж самі дані.
Каскадное удаление связанных полей. При ввімкненні даного режиму знищення записів в першій таблиці призводить до знищення відповідних записів пов’язанної.
Виконати натискання по кнопці «Создать». Потім закрити вікно «Связи». При запиті про збереження зв’язку виконати натискання по кнопці «Да».
















Тема 8 «Створення запитів в СКБД MS Access»
Мета: навчитися створювати запити в СКБД MS Access.

План
Призначення запиту .
Типи запитів, які підтримуються в СКБД MS Access.
Створення нового запиту в СКБД MS Access.

Література
Т. Конолі, К. Бегг, А. Строчан «Бази даних. Проектування, реалізація та супровід.» Теорія та практика. Москва, СПб., Київ. 2000 р.
Ч. Сигел «Access’97». Мінськ. 1997 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання:
Для чого потрібен запит в базі даних?
Які типи запитів підтримуються в СКБД Access?
Який тип запиту використовується частіше за всіх типів запитів?
Виконання якого типу запиту супроводжується виведенням одного або більше раніш визначених діалогових вікон, призначених для внесення користувачем конкретних значень параметрів запиту?
Якими способами можна створити запит в СКБД Access?
Що таке «Бланк запроса»?
Для чого призначене вікно «Добавление таблицы» та одночасно з яким діалоговим вікном воно активується?
Як запустити запит на виконання?

Створення запитів в СКБД MS Access
Запит дозволяє вилучати дані з бази даних. Виконання запитів нагадує завдання питання таблиці бази даних.
Запит до існуючої в базі даних інформації треба сконструктувати таким чином, щоб вказати СКБД, які саме дані нас цікавлять. Частіше за все використовується тип запитів, який називають запитами на відбір. Вони дозволяють продивлятися, аналізувати або вносити зміни в дані, збережені в одній або декількох таблицях.
При виконанні запиту на відбір СКБД MS Access розміщує обрані дані в динамічний набір даних (Dynaset), який уявляє собою динамічно створюване уявлення (вигляд), яке містить дані, які вилучені з однієї або декількох таблиць.
Дані обираються та сортуються у відповідності з вказаними в запиті вимогами. Іншими словами, динамічний набір даних уявляє собою оновлений набір записів, визначений таблицею або запитом, який можна роздивлятися як окремий об’єкт.
Крім запитів на відбір, в середовищі СКБД MS Access може бути створено й багато інших корисних типів запитів.
Типи запитів, які підтримуються в СКБД MS Access

Тип запиту
Опис

1
Запити на відбір
Містять формування запиту до бази даних, яке визначається як набір критеріїв для відбору даних з однієї або більш таблиць.

2
Запити з узагальненням
Передбачає виконання обчислювань з використанням даних з деякої групи записів.

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

4
Запити на відбір дублікатів
Виконують пошук дублюючих записів в межах однієї таблиці.

5
Запити на відбір записів, які не мають відповідності
Працюють зі зв’язаними таблицями та виконують пошук записів однієї таблиці, які не мають відповідностей в іншій таблиці.

6
Перехресні запити
З їх допомогою великий об’єм даних може бути підрахований та зображений у форматі невеликої електронної таблиці.

7
Запити з автопідставлянням
При виконанні запиту виконується автоматичне підставляння зазначених значень до записів, які знов створюються.

8
Активні запити (запити на знищення, додавання, оновлення та створення таблиці)
Дозволяють за одну операцію внести зміни в багату кількість записів. зміни передбачають знищення, додавання або оновлення записів в таблиці, а також створення нової таблиці.

9
Специфічні запити
Цей тип запитів використовується для модифікації запитів, про які було розказано вище та для визначення властивостей форм та звітів.


На початку процедури створення нового запиту треба в вікні бази даних обрати закладку «Запросы» та натиснути кнопку «Создать». Після цього СКБД MS Access відображає діалогове вікно «Новый запрос» («New Query»). Зображений в цьому вікні перелік припустимих варіантів подальших дій дозволяє почати створення нового запиту з нуля та виконати всі необхідні дії самостійно (варіант «Конструктор»), або скористатися для створення запиту допомогою одного з майстрів СКБД MS Access, назви яких складають частину списку, що залишилася.
Майстри представляють собою один з варіантів допоміжних програм бази даних. Вони завдають користувачам ряд питань про створюваний запит, після чого генерують його текст на отриманих відповідях.

Рисунок 8.1 – Вікно «Новый запрос»
Після обрання режиму конструктору з’явиться діалогове вікно «Запрос на выборку», яке складається з двох панелей.
Панель, розташована зверху містить список усіх полів таблиці. Нижня панель вікна запиту містить область, яка має назву бланк запиту.
Одночасно з діалоговим вікном «Запрос на выборку» активується вікно «Добавление таблицы» з закладками «Таблицы», «Запросы» та «Таблицы и запросы», яке необхідно закрити за допомогою вікна «Закрыть». Далі треба в меню «Вид» обрати пункт «Режим SQL» або натиснути по кнопці «SQL» на панелі інструментів. В разі виконання цих дій MS Access відобразить вікно «Запрос1: запрос на выборку», де можна прописувати sql-код запиту.

Рисунок 8.2 - Вікно «Запрос1: запрос на выборку»

Після завершення заповнення бланку запиту для отримання динамічного набору даних необхідно запустити запит на виконання. Зробити це можна, обравши опцію «Запуск» з меню «Запрос» або натиснувши на панелі інструментів по кнопці «Запуск» з зображенням знаку оклику.
Запит можна запустити на виконання, перейшовши в «Режим конструктора». Треба обрати з меню «Вид» опцію «Режим таблицы» або натиснути на панелі інструментів «Режим таблицы». Після короткої паузи, впродовж якої MS Access виконає запит, на екран буде виведена таблиця з полями та записами, які вказані в запиті, та відсортованими в належному порядку.


Тема 9 «Внутрішні запити»
Мета: познайомитися з типами внутрішніх запитів та навчитися їх створювати

План
Визначення внутрішніх запитів.
Призначення внутрішніх запитів.
Типи внутрішніх запитів.
Приклади різних типів внутрішніх запитів.

Література
Т. Конолі, К. Бегг, А. Строчан «Бази даних. Проектування, реалізація та супровід.» Теорія та практика. Москва, СПб., Київ. 2000 р.
Ч. Сигел «Access’97». Мінськ. 1997 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання:
Що таке «Внутрішній запит» або «Підзапит»?
В яких операторах розташовують внутрішні запити?
Які типи внутрішніх запитів існують?
Що повертає в підсумку скалярний підзапит?
Який тип підзапиту повертає значення декількох стовпців таблиці, але у вигляді одного рядка?






Внутрішний запит – це оператор SELECT, впроваджений в тіло іншого оператора SELECT.
Зовнішній (другий) оператор SELECT використовує результат виконання внутрішнього (першого) оператора для визначення змісту кінцевого результату всієї операції.
Внутрішні запити можуть бути розміщені в операторах WHERE та HAVING зовнішнього оператора SELECT – в цьому випадку вони отримують назву підзапитів або вкладених запитів. Окрім цього внутрішні оператори SELECT можуть використовуватися в операторах INSERT, UPDATE, DELETE.
Існує три типи підзапитів:
скалярний підзапит – повертає значення, яке обирається з перетину одного стовпця з одним рядком, тобто одне значення. Скалярний підзапит може використовуватися всюди, де треба визначити лише одне значення.
рядковий підзапит - повертає значення декількох стовпців таблиці, але у вигляді одного рядка. Рядковий підзапит може використовуватися скрізь, де використовується конструктор рядкових значень – взагалі це предикати.
табличний підзапит - повертає значення одного або більшої кількості стовпців таблиці, які розміщені в більш ніж одному рядку. Табличний підзапит може використовуватися усюди, де припускається вказувати таблицю – наприклад, як операнд предиката IN.

Приклад. Використання підзапиту з перевіркою на рівність
Скласти перелік персоналу, який працює в відділенні компанії, яке розташоване на вулиці Катерининська №15.
Наприклад, інформація про відділення компанії може бути описана відношенням «Відділення», яке містить стовпці з атрибутами «Номер відділення», «Місто», «Вулиця», «Район», «Поштовий індекс», «Телефон».
Аналогічно, інформація про співробітників компанії може бути зображена відношенням «Співробітники», яке містить стовпці з атрибутами «Номер співробітника», «ПІБ», «Адреса», «Телефон», «Посада», «Стать», «Дата народження», «ЗП», «Номер відділення».
Відношення «Відділення»
Номер
відділення
Місто
Вулиця
Район
Поштовий
індекс
Телефон

5
Одеса
Ген. Бочарова 19
Суворівський
65135
551440

7
Київ
Іванова 8
Центральний
87505
285190

2
Черкаси
Шевченко 14
Центральний
43701
438615

4
Запоріжжя
Гоголя 82
Центральний
50883
648369

3
Одеса
Катерининська 15
Приморський
65120
659569

1
Луганськ
Київська 67
Північний
49913
938544


Відношення «Співробітники»
Номер
спів.
ПІБ
Адреса
Теле-
фон
Поса-
да
Стать
Дата
народж

ЗП
Номер
відділ.

21
Філатов Андрій Петрович
Одеса, Вільямса 7, 45
496433
Менед-
жер
Ч
01.05.
1970
2950
5

37
Нікітіна Ганна Миколаївна
Черкаси, Корольова 67, 3

Секре-
тар
Ж
16.09.
1980
2700
3

14
Федоров Микола Сергійович
Черкаси, б-р Шевченко 19, 5
480091
Дирек-
тор
Ч
28.10.
1969
5500
3

9
Краснова Олена Валеріївна
Київ, Пушкінська 21, 44
735565
Бухгал-тер
Ж
31.12.1964
4200
7

5
Петренко Оксана Вікторівна
Одеса, Левітана 4, 90
489657
Менед-
жер
Ж
03.04.1972
2950
3

41
Васильєва Ганна Семенівна
Одеса, Грецька 47, 15
228900
Бухгал-тер
Ж
18.02.1968
4200
5


Select [Номер співробітника], ПІБ, Посада
From Співробітники
Where [Номер відділення] =
(Select [Номер відділення]
From Відділення
Where Вулиця = «Катерининська 15»);
Внутрішній оператор SELECT (Select Номер_відділення
From Відділення
Where Вулиця = «Катерининська 15»);
призначений для визначення номеру відділення компанії, розташованого за адресою «Катерининська 15» (існує лише одне відділення компанії, тому даний приклад є прикладом скалярного підзапиту).
Після отримання номеру необхідного відділення компанії виконується зовнішній підзапит, призначений для відбору відомостей про співробітників цього відділення компанії. Тобто, внутрішній оператор SELECT повертає таблицю з одним значенням «3». Воно являє собою номер того відділення компанії, яке розташоване в будинку №15 на вулиці Катерининська.
В результаті зовнішній оператор SELECT має такий вигляд:
Select [Номер співробітника], ПІБ, Посада
From Співробітники
Where [Номер відділення] = 3;

Код
ПІБ
Посада

37
Нікітіна Ганна Миколаївна
Секретар

14
Федоров Микола Сергійович
Директор

5
Петренко Оксана Вікторівна
Менеджер


Підзапит уявляє собою інструмент створення тимчасової таблиці, зміст якої вилучається та обробляється зовнішнім оператором. Підзапит може вказуватися після операторів порівняння (тобто операторів =, <, >, <=, >=, < >) в операторах Where та Having. Текст підзапиту повинен бути розміщений у дужках.

Приклад. Використання підзапитів з функціями
Скласти перелік всіх співробітників компанії, які мають заробітну плату більш ніж середня заробітна плата, з вказівкою того, наскільки їх заробітна плата перевищує середню заробітну плату в цілому по компанії.

Select [Номер співробітника], ПІБ, Посада, ЗП –
(Select Avg(ЗП)
From Співробітники) As ЗП1
From Співробітники
Where ЗП >
(Select Avg(ЗП)
From Співробітники);

Потрібно відзначити, що неможливо напряму використовувати «Where ЗП > Avg(ЗП)», так як використовувати функції в операторі Where заборонено. Для досягнення необхідного результату потрібно створити підзапит, який підрахує середнє значення заробітної плати, а потім використовувати його в зовнішньому операторі Select, призначеному для відбору відомостей про тих співробітників компанії, в яких заробітна плата перевищує середнє значення.
Тобто, підзапит повертає значення середньої заробітної плати компанії, яке дорівнює деякому значенню, наприклад 3750 грн. Результат виконання цього скалярного підзапиту використовується в зовнішньому операторі Select для обчислення відхилу заробітної плати від середнього рівня та для відбору відомостей про співробітників. Тому зовнішній оператор Select буде мати такий вигляд:
Select [Номер співробітника], ПІБ, Посада, ЗП – 3750 As ЗП1
From Співробітники
Where ЗП > 3750;
Номер співробітника
ПІБ
Посада
ЗП1

14
Федоров Микола Сергійович
Директор
1750

9
Краснова Олена Валеріївна
Бухгалтер
450

41
Васильєва Ганна Семенівна
Бухгалтер
450








Тема 10 «Ключові слова Any та All»
Мета: познайомитися з ключовими словами Any та All та навчитися створювати запити з використанням цих слів.

План

Призначення ключового слова Any.
Призначення ключового слова All.
Приклад використання ключового слова Any.
Приклад використання ключового слова All.

Література
Т. Конолі, К. Бегг, А. Строчан «Бази даних. Проектування, реалізація та супровід.» Теорія та практика. Москва, СПб., Київ. 2000 р.
Ч. Сигел «Access’97». Мінськ. 1997 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання:
Для чого призначені ключові слова Any та All?
Якщо підзапиту буде передувати ключове слово Any, то умова порівняння буде вважатися виконаною або не виконаною? Обгрунтувати свою відповідь.
Якщо підзапиту буде передувати ключове слово All, то умова порівняння буде вважатися виконаною або не виконаною? Обгрунтувати свою відповідь.
Для чого використовується ключове слово Some?



Ключові слова Any та All можуть використовуватися з підзапитами, які повертають один стовпець.
Якщо підзапиту буде передувати Any, то умова порівняння буде вважатися виконаною лише в тому випадку, якщо воно виконується хоча б для одного зі значень в підсумковому стовпці підзапиту.
Якщо підзапиту буде передувати All, то умова порівняння буде вважатися виконаною лише в тому випадку, якщо воно виконується для кожного значення в підсумковому стовпці підзапиту.
Якщо в результаті виконання підзапиту буде отримане пусте значення, то для All умова порівняння буде вважатися виконаною, а для Any – не виконаною.
Додатково можна використовувати ключове слово Some замість Any.

Приклад. Використання ключових слів Any або Some
Знайти всіх співробітників компанії, заробітна плата яких більш ніж заробітна плата хоча б одного співробітника відділення компанії з номером 3.
Для виконання цього запиту скористуємося таблицею «Співробітники».
Відношення «Співробітники»
Номер
спів.
ПІБ
Адреса
Теле-
фон
Поса-
да
Стать
ДН

ЗП
Номер
відділ.

21
Філатов Андрій Петрович
Одеса, Вільямса 7, 45
496433
Менед-
жер
Ч
01.05.
1970
2950
5

37
Нікітіна Ганна Миколаївна
Черкаси, Корольова 67, 3

Секре-
тар
Ж
16.09.
1980
2700
3

14
Федоров Микола Сергійович
Черкаси, б-р Шевченко 19, 5
480091
Дирек-
тор
Ч
28.10.
1969
5500
3

9
Краснова Олена Валеріївна
Київ, Пушкінська 21, 44
735565
Бухгалтер
Ж
31.12.1964
4200
7

5
Петренко Оксана Вікторівна
Одеса, Левітана 4, 90
489657
Менед-
жер
Ж
03.04.1972
2950
3

41
Васильєва Ганна Семенівна
Одеса, Грецька 47, 15
228900
Бухгалтер
Ж
18.02.1968
4200
5


Select [Номер співробітника], ПІБ, Посада, ЗП
From Співробітники
Where ЗП > Any
(Select ЗП
From Співробітники
Where [Номер відділення]=3);

Хоча цей запит може бути записаний з використанням підзапиту, який визначає мінімальну заробітну плату співробітників компанії відділення з номером 3, після чого зовнішній підзапит зможе обрати відомості про всіх співробітників компанії, заробітна плата яких перевищує це значення, можливий ще й інший підхід, який використовує ключові слова Any або Some. В цьому випадку внутрішній підзапит створює набір числових значень, а зовнішній запит обирає відомості про тих співробітників компанії, заробітна плата яких більш ніж заробітна плата будь-якого з значень в цьому наборі.

Приклад. Використання ключового слова All
Знайти всіх співробітників компанії, заробітна плата яких більш ніж заробітна плата всіх співробітників відділення компанії з номером 3.
Для виконання цього запиту також скористуємося таблицею «Співробітники».
Select [Номер співробітника], ПІБ, Посада, ЗП
From Співробітники
Where ЗП > All
(Select ЗП
From Співробітники
Where [Номер відділення]= 3);

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


Тема 11 «Створення форм в СКБД Access»
Мета: навчитися будувати форми декількома способами.

План
Визначення та призначення форм.
Способи створення форм.
Приклад створення форм.

Література
Т. Конолі, К. Бегг, А. Строчан «Бази даних. Проектування, реалізація та супровід.» Теорія та практика. Москва, СПб., Київ. 2000 р.
Ч. Сигел «Access’97». Мінськ. 1997 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання:
Що таке «Форма»?
Чому краще переглядати дані в режимі форми?
Для чого призначені форми?
Що таке «Автоформа» та як її можна створити?
Які опції надає діалогове вікно «Нова форма»?
Як створити форму за допомогою «Майстру форм»?
Для чого призначений спосіб створення форми «Конструктор»?





Дані можна продивлятися безпосередньо в таблицях СКБД Access. Але це не завжди зручно, так як іноді неможливо вивести на екран всі поля одного запису одночасно.
Форми дозволяють змінити розташування даних на екрані з метою полегшення перегляду інформації на екрані. Можна вивести форми на друк – форми в першу чергу призначені для зображення даних на екрані.
Найбільш легким способом роботи є використання автоформи, яку можна створити натиском однієї кнопки. А майстри форм дозволяють створювати найбільш складні форми.
Для того, щоб створити автоформу, необхідно обрати таблицю або запит, на основі яких буде будуватися форма та скористатися відкриваючим переліком інструменту для створення нових об’єктів, обравши звідти інструмент «Автоформа». При першому зберіганні форми Access запитає її ім’я.

Приклад створення простої автоформи:
у випадку потреби необхідно відчинити вікно бази даних або натиснути на закладці «Таблиці». Обрати в переліку таблиць потрібну таблицю;
натиснути по кнопці «Автоформа» або скористатися переліком інструменту «Новий об’єкт» для обрання потрібної опції звідти, якщо це потрібно. Після невеликої паузи, необхідної Access для створення форми, на екрані з’явиться автоформа для цієї таблиці.
продивившись, треба закрити форму. Коли Access запитає підтвердження на запис форми, необхідно натиснути «Да» та зберегти її під іменем, яке встановлене за умовчуванням або надати нове ім’я.
Створення та робота з формами здійснюється за аналогом з іншими об’єктами Access. Першим треба в вікні бази даних натиснути на закладці «Формы» для того, щоб відобразити перелік форм, а потім використовувати кнопки вікна бази даних:
щоб створити нову форму, необхідно натиснути по кнопці «Создать» во вкладці «Формы» вікна бази даних;
для того, щоб скористатися вже існуючою формою, треба виділити її та натиснути по кнопці «Открыть»;
для зміни конструкції форми, необхідно виділити її та натиснути по кнопці «Конструктор».
При створенні нової форми Access відображає на екрані діалогове вікно «Новая форма», де спочатку необхідно за допомогою відкриваючого списку обрати таблицю або запит, які є основою для форми. Потім треба натиснути по закладці «Новая форма» («Blank Forms»), щоб створити пусту користувацьку форму або обрати опцію «Мастер форм» для того, щоб Access автоматично створив форму.
Як й при роботі з іншими об’єктами, створювати форму можна, обравши таблицю або запит в вікні бази даних та натиснувши по кнопці «Создать» (або обравши опцію «Форма» з меню «Вставка»). MS Access відображає на екрані діалогове вікно «Новая форма» з цією таблицею або запитом, які вже вміщені в відкриваючий список цього вікна.
Діалогове вікно «Новая форма» надає такі опції:
«Конструктор» – створення форми з нуля;
«Мастер форм» – створення форми за допомогою майстера;
«Автоформа в столбец» – створення форми з полями, які розташовані один над одним;
«Автоформа ленточная» – створення автоформи з полями записів, розташованими по вікну в вигляді таблиці. Ця форма дозволяє одночасно продивлятися декілька записів та має свою власну лінійку прокрутки, за допомогою якої можна прокручувати таблицю;
«Автоформа табличная» – створення автоформи, яка схожа на таблицю;
«Диаграмма» – створення графіку за допомогою «Майстру діаграм»;
«Сводная таблица» – створення зведеної таблиці.

Приклад створення форми за допомогою «Мастера форм»:
Щоб створити нову форму, необхідно обрати спосіб створення форми «Створення форми за допомогою Мастера форм» во вкладці «Формы» вікна бази даних, натиснути подвійним натиском миші.
Відобразиться діалогове вікно «Создание форм», де спочатку необхідно за допомогою відкриваючого списку обрати таблицю або запит, які є основою для форми, а потім – обрати поля, які будуть присутні на формі. Натиснути «Далее».

Рисунок 10.1 – Вікно «Создание форм»
Обрати зовнішній вигляд форми:
в один стовпець;
стрічковий;
табличний;
вирівняний;
зведена таблиця;
зведена діаграма.
Натиснути «Далее».
Обрати потрібний стиль форми, тобто на якому фоні буде відображатися форма та натиснути кнопку «Далее».
Задати ім’я нової форми та натиснути кнопку «Готово», після чого на екрані з’явиться створена форма.


Рисунок 10.2 – Форма «Клієнти»
Створення форм за допомогою режиму конструктора
Створення форм за допомогою конструктора дає змогу користувачу керувати всіма елементами форми. Тому найбільш важливі форми, а також форми, які містять багато елементів повинні створюватися в режимі конструктора.
Для того щоб відчинити вже існуючу форму в режимі конструтору треба обрати її та натиснути на кнопку з написом «Конструктор».
Для створення нової форми в режимі конструктора треба натиснути кнопку «Создать», потім обрати спосіб створення форми «Конструктор», а в нижньому рядку обрати таблицю, на даних якої буде створена форма та натиснути кнопку «Ok».
Після цього на екрані з’явиться вікно, в якому знаходиться область сірого кольору. Якщо відчинити форму в режимі конструктору, то в структурі форми можна виділити три розділи:
Роздел заголовка форми (містить назву форми, назву підзавдання або пункту меню, може містити логотип фірми, дату та ін.)
Область данных. Елементи керування, які містяться в області даних найчастіше є уявленням одного запису таблиці (або запиту). В цьому випадку кажуть про тип форми «в стовпець». Якщо треба відобразити одночасно декілька записів, то в такому випадку використовують стрічкову форму. Все, що міститься в області даних, є елементами керування. Фоновий малюнок, який знаходиться під елементами керування, показує розмір робочого поля форми.
Роздел примечания форми (може містити підсумкові відомості, пояснення до області даних, спеціальні кнопки навігації, ссилки на інші форми та ін.)
Розмір форми можна змінювати. Для цього треба піднести курсор миші до правої або нижньої межі, або до правого нижнього кута (як зображене на малюнку) та після того, як курсор змінить свій вигляд натиснути ліву кнопку миші та, не відпускаючи її, розтягнути форму до бажаних розмірів. Змінити розмір форми можна в будь-який час.

Рисунок 10.3 – Форма в режимі конструктора
Після визначення розмірів форми, треба розмістити на ній візуальні елементи. Елементи форми можуть бути пов’язаними та непов’язаними. Пов’язані – прив’язані до поля початкової таблиці або запиту. Непов’язані (або вільні) – відображають результат обчислень або є даними (текстами, малюнками та ін.), який залишається незмінним незалежно від того, який запис в цей момент переглядають в формі.
Поруч з сірою областю або в області панелей інструментів можна побачити «Панель элементов» з кнопками, які дозволяють перенести на форму різні візуальні компоненти. Для того, щоб елемент став частиною форми його треба перенести на форму. Для цього необхідно натиснути один раз по кнопці «Панели элементов», яка відповідає необхідному елементу (для того, щоб обрати його), а потім натиснути один раз на формі. В цьому випадку створюється вказаний компонент стандартного розміру. Задати необхідні ширину та висоту можна за допомогою маленьких чорних квадратів, які з’являються навколо активного компонента. Можна одразу ж створити компонент з необхідними розмірами. Для цього після обрання компонента треба не натискати на формі, а розтягнути на ній прямокутник з бажаними розмірами компонента.
Панель елементів форми має такі елементи керування:
- елемент «Надпись» служить для додавання написів, заголовків, інструкцій.
- елемент «Поле» використовується для створення полів введення та розрахункових полів.
- кнопка вимкнення програм-майстерів.
- елемент «Группа».
- выключатели особливо зручні при використанні в групах. В такій групі легко побачити, який з вимикачів натиснутий. Замість напису на вимикачі можна розташувати малюнок.
- переключатели звичайно використовуються в групі для відображення набору параметрів, з яких треба обрати один. З цими елементами можна зв’язати команди, наприклад, які виконують фільтрацію.
- елемент «Флажок». Використовується для введення значень в логічні поля. Якщо прапорець відмічений, то значення логічного поля = Істина (1, Так). В іншому випадку – Неправда (0, Ні). Прапорці також можна розташовувати в групі. Вони діють аналогічно перемикачам, але в відмінність від них, припускають множинне обрання.
- «Поле со списком»
- «Список»
Використовуються для організації введення даних, обираючи значення зі списку значень або таблиці значень. Ці елементи дуже корисні при введенні даних з пов’язаних таблиць. Поля зі списком займають менше місця на формі, а список їх значень виводиться на екран лише за вказівкою користувача. Списки займають більше місця, але в них завжди відображається декілька можливих для введення значень.
- елемент «Прямоугольник» служить для виділення підпису поля разом з полем або для виділення декількох елементів форми можна скористатися таким засобом оформлення, як прямокутник. Після обрання піктограми навколо обраних об’єктів малюється рамка. Для того, щоб прямокутник не перетинав елементи, які розташовані під ним, з меню треба обрати команду «Формат» - «На задній план». Після цього можна змінити розташування, колір, розмір прямокутника.
- «Командна кнопка» використовується для виконання операцій навігації, по керуванню даними та ін. (наприклад, перейти на новий запис, відчинити або зачинити форму, знищити запис).
- елемент «Свободная рамка объекта» не пов’язаний з жодним полем таблиць БД. Об’єкт, який знаходиться в ній, виконує роль ілюстрації та призначений для оформлення форми.
- елемент «Присоединённая рамка объекта». З такою рамкою пов’язане одне з полів таблиці. В ній відображається зміст цього поля. Цей зміст може змінюватися при переході від одного запису до іншого.
Наприклад, для того щоб малюнок помістився до рамки поля, треба виділити поле ОLЕ, натиснути праву кнопку миші та в контекстному меню обрати пункт «Свойства». В вікні властивостей обрати пункт «Установка размеров» та зі списку обрати значення «По размеру рамки». Зачинити форму та підтвердити зберігання змін.
- елемент «Вкладка» дозволяє розмістити багато інформації на обмеженій площині. На вкладках розташовують інші елементи керування.
Розпочинаємо створювати форму завжди з завдання заголовка або назви форми. Для цього натискаємо лівою кнопкою миші по кнопці, а потім на формі розтягуємо великий прямокутник у верхньому краю. Одразу ж після створення, елемент «Надпись» знаходиться в режимі редагування тексту, тобто треба тут же ввести текст. Завершується введення тексту натисканням клавіши Enter. Одразу ж після створення елемента його властивості мають значення, які задаються за умовчуванням та текст не схожий на заголовок форми, так як розмір шрифту, який використовується, дуже малий. Для того, щоб змінити розмір шрифту треба відредагувати властивості елемента «Надпись». В контекстному меню присутні засоби форматування, але лише їх обмежений набір.

Рисунок 10. 4 – Властивості форми
При виділенні будь-якого візуального елемента в Access в правому верхньому куті з’являється великий чорний квадрат. Використовуючи його можна перерозташовувати елемент по формі, а також за допомогою натискання правою кнопкою миші вивести контекстне меню для роботи з елементом. Для того щоб вивести вікно властивостей обраного в дану мить візуального елемента треба або обрати пункт «Свойства» в контекстному меню об’єкта, або натиснути кнопку .
Вікно властивостей має декілька сторінок:

Рисунок 10.5 – «Поле со списком» форми
Макет. На даній сторінці зібрані властивості, які відповідають за зовнішній вигляд елемента, такі як: відстань від лівого та верхнього краю контейнера, найменування, розмір, колір та дані шрифту, колір межі, колір фону та ін.
Данные. Якщо елемент може бути пов’язаний з полем бази даних, то на цій сторінці можна заповнити властивості, які відповідають за зв’язок з даними, а також умови введення.
События. На цій сторінці зображені різні події, на які може реагувати елемент. Деякі події обробляються самим візуальним елементом, але, як правило, розробник сам пише код, який визначає реакцію на ту або іншу подію. Код, який визначає реакцію на подію, називається обробником події. Найпоширеніші події, які виникають в Access: Вхід, Вихід, Внесені зміни, Отримання фокуса, Втрата фокуса, Натискання кнопки, Подвійне натискання кнопки та т. д.
Другие. На цій сторінці розташовані властивості, які не можна віднести до трьох попередніх категорій. Вони звичайно використовуються в програмуванні.
Все. На цій сторінці відображаються всі властивості, які є лише в елемента.


Тема 11 «Створення фільтрів в СКБД MS Access»
Мета: навчитися створювати фільтри.

План
Визначення фільтрів.
Відмінність фільтрів від запитів.
Типи фільтрів.
Збереження фільтру як запиту.
Використання запиту в якості фільтру.
Приклад створення фільтру.

Література
Ч. Сигел «Access’03». Мінськ. 2003 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання:
Що таке «Фільтр»?
Для чого призначені фільтри?
Чим відрізняється фільтр від запиту?
Для яких об’єктів СКБД MS Access створюються фільтри?
Що з’явиться на панелі інструментів після створення фільтру?
Які типи фільтрів Ви знаєте?
Для чого фільтр зберігають у вигляді запиту та як це зробити?
Як створити фільтр?



Як відомо, запити є незалежними об’єктами, які розташовуються в вікні бази даних разом з таблицями та іншими об’єктами.
Іноді краще вбудовувати властивості запиту в існуючий об’єкт замість того, щоб створювати запит як новий об’єкт, окремий від інших за допомогою фільтру можна вбудовувати властивості запиту в таблицю або форму без створення окремого об’єкту-запиту.
Фільтр – засіб, який призначений для зміни конструкції таблиці або форми, частиною якої він є.
Так як у фільтрів немає окремих імен, таблиця або форма можуть мати тільки один приєднаний до себе фільтр. Якщо створити новий фільтр, він замістить вже існуючий. Але можна зберегти фільтр для постійного використання, записавши його як запит. Також можна створити фільтр на основі існуючого запиту.
Після створення фільтру для таблиці або форми з’явиться кнопка «Применение фільтра». Натискаючи послідовно по цій кнопці, можна або застосувати фільтр, щоб відобразити на екрані тільки деякі рядки, або відмінити фільтрацію для відображення всіх записів.
Зауваження: якщо до здійснення пошуку даних був використаний фільтр, наступний пошук інформації Access буде здійснювати тільки серед відфільтрованих записів. якщо Access не може знайти запис, який введений, то причина міститься в попередній фільтрації даних.
Існує чотири типи фільтрів:
«Фильтр по выделенному фрагменту» - визначає, які записи будуть відображені на екрані шляхом виділення даних в таблиці в «Режиме таблицы»;
поле «Фільтр для» - дозволяє вносити умови відбору безпосередньо в контексному меню;
«Обычный фильтр» - визначає, які записи будуть відображені на екрані в режимі форми, яка є аналогом таблиці в «Режиме таблицы»;
«Розширенный фильтр» - вказує, які записи будуть відображені на екрані та визначає порядок, в якому вони з’являються на екрані за допомогою вікна «Розширенный фильтр»/ «Сортировка», яке є таким самим як й вікно запиту.

Зауваження: незалежно від типу створеного фільтру, його можна відобразити на екран двома способами: обрати з меню «Фильтр» опції «Фильтр для формы» або «Розширенный фильтр»/ «Сортировка». Умови відбору фільтру відобразяться в вікні «Фильтр для формы» або в вікні «Розширенный фильтр».

Фільтр по выделенному фрагменту
Для створення цього фільтру треба вивести на екран вікно таблиці або форми, на основі яких необхідно створити фільтр, та виділити значення, яке треба знайти в будь-якому з записів, де б не знаходилось це значення.
Потім необхідно обрати з меню «Записи» опцію «Фильтр» та з подменю «Фильтр» обрати «Фильтр по выделенному фрагменту» або натиснути по кнопці «Фильтр по выделенному» на стандартній панелі інструментів.
Короткий шлях: можна просто натиснути правою кнопкою миші по полю, щоб виділити весь його зміст та відобразити на екрані контекстне меню для цього поля, потім обрати в цьому контекстному меню опцію «Фильтр по выделенному».
2. Використання поля «Фильтр для»
Для того, щоб застосувати поле «Фильтр для», треба натиснути по стовпцю поля, для якого необхідно ввести умову відбору, та ввести умову відбору в його контекстне меню.
3. «Звичайний фільтр»
Для того, щоб створити звичайний фільтр, треба відобразити на екрані вікно таблиці або вікно форми, для яких необхідно створити фільтр. Потім обрати опцію «Фильтр» з меню «Записи», після чого з подменю – опцію «Изменить фильтр» або натиснути по кнопці «Изменить фильтр» на панелі інструментів.
MS Access відобразить вікно створення фільтру, яке містить один запис з таблиці, розташований також, як й в режимі таблиці.
Потім треба ввести значення, які необхідно знайти, в відповідні поля даного запису або для кожного поля треба скористатися відкриваючим списком для відбору значення зі списку всіх унікальних значень, які були введені в поле. MS Access автоматично додасть обмеження до введеного значення, так само як це відбувається при створенні запитів.
Якщо значення заносяться в декілька полів, то між ними буде встановлене логічне відношення типу «И». Для того, щоб встановити для умов відбору відношення «Или», необхідно натиснути по закладці «Или» в нижній частині цього вікна для того, щоб відобразити на екрані новий зразок запису, та заповнити для нього умови відбору. Після заповнення форми для повернення до таблиці треба з меню «Записи» обрати опцію «Применить фильтр», або натиснути по кнопці «Применение фильтра». При цьому на екрані з’являться лише записи, які відповідають встановленим умовам. Можна натиснути в вікні «Фильтр» правою кнопкою миші для відображення контекстного меню, з якого необхідно обрати опцію «Применить фильтр».
4. «Розширенный фільтр»
Фільтр може бути створений способами, якими користувалися для створення запитів. Для створення поширеного фільтру треба відобразити на екрані таблицю (або форму), до якої необхідно застосувати фільтр, обрати з меню «Записи» та з подменю «Фильтр» – опцію «Розширенный фильтр» для відображення на екрані вікна «Фиільтр».
Вікно «Фильтр» практично таке ж саме як й вікно запиту. Воно автоматично містить список полів таблиці або запиту.
На відміну від запиту, який фільтрує записи та поля, фільтр відображає на екрані всі поля таблиці та фільтрує лише записи. Він немає в бланку побудови рядка «Вывод на экран», так як виводить на екран всі поля. Користувач переміщує поля з таблиці в бланк побудови, для того щоб внести для них умови відбору під ними, але це жодним чином не вплине на кількість полів, які виводяться на екран.
Після створення фільтру, його треба застосувати, обравши з меню «Фильтр» команду «Применить фильтр» або натиснувши по кнопці «Применение фильтра». Можна також натиснути по області вікна «Фильтр» правої кнопкою миші для виведення на екран контекстного меню та з цього меню обрати опцію «Применить фильтр». Якщо закрити діалогове вікно «Фильтр», фільтр автоматично не буде застосований.


Збереження фільтру як запиту
Так як таблиця може мати тільки один фільтр, який втрачається при створенні нового фільтру, в MS Access є можливість зберегти фільтр для постійного використання у вигляді запиту. Для того щоб його зберегти, треба натиснути по області вікна «Фильтр» правою кнопкою миші для відображення контекстного меню. Обрати опцію «Сохранение в виде запроса» (або просто натиснути по кнопці «Сохранение в виде запроса»), яка при роботі з вікном «Фильтр» з’являється на панелі інструментів замість кнопки «Сохранение».
MS Access відображає діалогову панель «Сохранение в виде запроса», де треба внести ім’я для запиту. Новий запит з’явиться на екрані в вікні бази даних та може бути використаний так саме, як будь-який інший запит.

Використання запиту в якості фільтру
Можна скористатися в якості фільтру вже існуючим запитом. Запит повинен бути на відбір, який базується виключно на таблиці або запиті, до яких необхідно застосовувати запит в якості фільтру.
Натиснувши по області вікна «Фильтр» правою кнопкою миші, треба обрати «Загрузить с запроса» (або натиснути по кнопці «Загрузить с запроса», яка з’являється при роботі в вікні «Фильтр», на панелі інструментів замість кнопки «Открыть»). MS Access виводить на екран діалогове вікно «Фильтр, который применяется» («Applicable Filter»), де зображується список запитів, які можна використати до цього об’єкту в якості фільтрів. Після цього треба обрати запит з цього списку та натиснути «Ок». Вікно «Фильтр» автоматично заповнюється такими ж визначеннями, що й вікно запиту.






Тема 12 «Створення звітів в СКБД Access»
Мета: навчитися створювати звіти в СКБД Access

План
Визначення звітів.
Призначення звітів.
Способи створення звітів.

Література
Ч. Сигел «Access’03». Мінськ. 2003 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

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










Звітом називають будь-який набір даних, призначений для друку.
Так як звіт призначений спеціально для виведення на друк, MS Access у випадку необхідності виведе звіт на екран в вікні попереднього перегляду. Користувач немає можливості редагувати дані, які відображаються в звіті.
Після натискання по кнопці «Создать» MS Access відображає на екрані діалогове вікно «Новый отчёт». Як й при роботі з формами, треба використовувати відкриваючий список цього вікна для обрання таблиці або запиту, для яких створюється звіт.
Потім необхідно обрати одну з опцій:
«Конструктор» – створення користувацького звіту з нуля;
«Мастер отчётов» – використання «Майстру звітів» для створення звіту;
«Автоотчёт в столбец» – створення автозвіту (обраний за умовчуванням автозвіт містить списки імен полів та змісту цих полів, які розташовані один під одним. Таке розташування не зовсім є зручним для звітів), в якому поля розташовані один під одним;
«Автоотчёт ленточный» – створення автозвіту, в якому поля розташовані один за одним. Такий звіт корисний в тому випадку, якщо б він базувався на запиті, який містить лише декілька полів, та вони вміщуються на екрані та на сторінці при друку;
«Мастер диаграмм» – відображає на екрані «Майстер діаграм», який використовується для створення графіків;
«Почтовые наклейки» – виводить на екран вікно «Создание почтовых наклеек», за допомогою якого можна створювати наклейки або інші етикетки.







Тема 13 «Створення макросів в СКБД Access»
Мета: ознайомитися з поняттям та призначенням макросів. Навчитися створювати макроси.

План

Поняття та призначення макросів.
Способи створення макросів.
Макрокоманди, їх призначення та аргументи.

Література
Ч. Сигел «Access’03». Мінськ. 2003 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання лекції:
Що таке «макрос»?
Якими способами можна створить макрос?
Які існують макрокоманди та яке в них призначення?
Як зберегти макрос?
Як можна запустити макрос на виконання?
Як можна відредагувати макроси?







В Access макроси – це визначенна послідовність операцій. Вони зберігаються в вікні, яке нагадує таблицю, в такому порядку, в якому їх треба виконувати. Коли запускається макрос Access виконує ці дії. Макрос може істотньо полегшити використання Access. Однією з корисних особливостей макросів є можливість їх з’єднання з кнопками, які розміщуються на формі. Ці кнопки можуть виконувати операції, які часто повторюються (наприклад, відчиняти діалогові вікна для пошуку, змінювати порядок сортування даних або друкувати звіт). Використовуючи макроси, можна створювати додатки з користувацьким меню та діалоговими вікнами.
Для створення макроса необхідно відчинити вкладку «Макросы» в вікні БД та виконати натискання по кнопці «Создать». Цю ж дію можна виконати з використанням пунктів меню «Вставка» -> «Макрос». В діалоговому віні, яке відкриється, відображена інформація такого виду: вікно макросів складається з двох частин: верхньої та нижньої. В верхній частині знаходиться перелік макрокоманд, які треба виконати та необов’язкові пояснення до цих команд. В нижній частині вікна знаходяться аргументи макрокоманди.
При розробці макросу необхідно задати дії (ввести макрокоманди), які він повинен буде виконати (наприклад, відчинити форму, надрукувати звіт, виконати запит або експортувати зміст таблиці в файл електронної таблиці). В Access такі дії можна визначити двома способами:
обрати з переліку в стовпці «Макрокоманда» (або ввести їх власноруч),
перемістити об’єкти з вікна БД в стовпець «Макрокоманда» вікна макросів.
Розглянемо більш детально кожен з цих способів.
1-й спосіб:
В вікні макросів виконати натискання мишкою на першій порожній комірці в стовпці «Макрокоманда». Потім виконати натискання по кнопці відчинення переліку. При цьому відкриється перелік припустимих макрокоманд. Обрати з переліку команду, яку повинен виконати макрос або набрати цю команду власноруч.
Виконати натискання в нижній частині вікна або натиснути клавішу [F6] та вказати аргументи дії.
2-й спосіб:
Для створення макроса необхідно виконати такі дії:
Перемістити вікно макросів та змінити його розміри таким чином, щоб одночасно можна було б бачити вікно макросів та бази даних. Обрати вкладку об’єкту, який буде відчинятися макросом. Виконати натискання на потрібному об’єкті та перемістити його в порожній рядок стовпця «Макрокоманда» вікна макросів. Після цього в стовпці «Макрокоманда» з’явиться відповідна команда.
В розділі «Аргументы» макрокоманди з’являться аргументи. При необхідності їх можна змінювати.
Макрокоманди, їх призначення та аргументи:
возобновить -  відновлює розмір максимізованого або мінімізованого вікна. Аргументів немає.
Вивести в формате - виводить дані в файл іншого формату. Аргументи - Тип об’єкта; Ім’я об’єкта; Формат виведення; Ім’я файлу; Автозапуск; Файл шаблона.
Вивод на екран - визначає, повинна або ні СКБД Access оновлювати екран під час виконання макроса. Аргументи - Включити виведення; Текст рядка стану.
Обрати об’єкт - обрати вказаний об’єкт. Аргументи - Тип об’єкта; Ім’я об’єкта; В вікні бази даних.
Виконати команду - виконує команду меню. Аргументи – Команда.
Вихід - Ініціює вихід з Access. Аргументи – Параметри.
Додати меню - додає меню в рядок користувацького меню. Аргументи - Назва меню; Ім’я макроса; Текст рядка стану.
Задати значення - встановлює значення поля, елементу керування або властивості. Аргументи – Елемент; Вираз.
Зачинити - зачиняє вказаний об’єкт або активне вікно (при відсутності аргумента). Аргументи - Тип об’єкта; Ім’я об’єкта; Зберігання.
Запуск запиту SQL - виконує запит, використовуючи оператор SQL. Аргументи - Інструкція SQL; Використовувати транзакцію.
Запуск макроса - виконує інший макрос. Аргументи - Ім’я макроса; Кількість повторів; Умова повтору.
 Копіювати об’єкт - копіює об’єкт бази даних в іншу базу даних або в ту ж базу, але під іншим ім’ям. Аргументи - База даних; Нове ім’я; Тип об’єкта; Ім’я об’єкта.
До елемента керування - переміщує курсор в поле або в елемент керування активної форми, таблиці даних або динамічного набору запиту. Аргумент - Елемент керування.
На запис - переміщує курсор на вказаний запис. Аргументи - Тип об’єкта; Ім’я об’єкта; Запис; Зміщення.
Знайти запис - знаходить перший запис, який задовільняє умовам, визначеним дією «Знайти запис» або значеннями в діалоговому вікні «Знайти».
Зупинити макрос - зупиняє виконання поточного макроса. Аргументів немає.
 Відчинити запит - відчиняє обраний запит у вказанному режимі. Аргументи - Ім’я запита; Режим; Режим даних.
Відчинити форму - відчиняє форму у вказанному режимі (форми, конструктора, перегляду або таблиці). Аргументи - Ім’я форми; Режим; Ім’я фільтра; Умова відбору; Режим даних; Режим вікна.
Пісочні годинники - під час виконання макроса змінює форму вказателя миші на форму пісочних годинників. Аргументи – Ввімкнути.
Розвернути - максимізує активне вікно. Аргументів немає.
Звернути - мінімізує активне вікно. Аргументів немає.
Сигнал - видає звуковий сигнал. Аргументів немає.
Наступний запис - знаходить наступний запис, який задовільняє умовам, визначенним подією «Знайти запис» або значеннями в діалоговому вікні «Знайти». Аргументів немає.
Повідомлення - відображає вікно з повідомленням або попередженням. Аргументи – Повідомлення; Сигнал; Тип; Заголовок.
В стовпці «Примечание» можна вести будь-які коментарі, які допоможуть простежити яку дію виконує макрос.



Збереження макросів
Для збереження макроса треба виконати наступні дії: обрати команду «Файл» -> «Сохранить». Або виконати натискання по піктограмі «Сохранить» на панелі інструментів. Якщо макрос зберігається вперше, Access запитає для нього ім’я. Ввести ім’я створенного макроса, виконати натискання по кнопці «ОК» та закрити вікно макросів, натиснувши комбінацію клавиш [Ctrl]+[F4].
Виконання макроса
Після завершення розробки макроса можна перевірити його роботу, запустивши макрос на виконання. Самим простим засобом є наступний: відкрити вкладку «Макросы» в вікні БД, виділити макрос та натиснути по кнопці «Запуск» або виконати подвійне натискання на макросі в вікні БД.
Інший спосіб запуску наступний: Обрати команду «Сервис»-> «Макрос»-> «Запуск макроса». В діалоговому вікні «Запуск макроса», яке з’явиться, обрати або ввести ім’я макроса. Якщо макрос відчинений в режимі конструктора, його можна виконати, натиснувши по кнопці «Запуск» на панелі інструментів.
Крім того, макроси можна виконати за допомогою кнопок, які додаються до форми. Кнопки макросів можна створювати методом перетискання.
Відчинити потрібну форму в режимі конструктора, перемістити форму та встановити її розміри таким чином, щоб можна було б бачити й вікно БД.
Відчинити вкладку «Макросы» в вікні БД для відображення макросів.
Перетащити потрібний макрос в те місце форми, де необхідно розташувати кнопку. Створенна кнопка з’явиться в вікні форми.
Макрос можна настроїти таким чином, щоб він виконувався автоматично при запуску БД. Для цього достатньо при зберіганні створенного макроса присвоїти йому ім’я Autoexec. Макроси Autoexec звичайно використовуються для відчинення форм, з якими частіш усього працюють користувачі, або для розміщення на екрані декількох найвикористовуємих форм та/або звітів. Утримуючи клавішу [Shift] під час відчинення БД, можна відмінити запуск макроса Autoexec.



Редагування макросів
Структура таблиці в вікні макросів нагадує структуру звичайної таблиці БД. Команди редагування текста, які використовуються для знищення, переносу та копіювання змісту комірок, можуть застосовуватися в рамках таблиці макроса.
Редагування макроса здійснюється в режиме конструктора. Аргументи та краткий опис макрокоманди відображаються в вікні макросів лише при її маркіровці.
Наприклад, для вставки додаткової макрокоманди в існуючий макрос треба виконати наступні дії:
обрати вкладку «Макросы» в вікні БД;
обрати макрос для редагування, виконавши на ньому натискання мишкою;
відчинити макрос в режимі конструктора, обравши кнопку «Конструктор»;
обрати макрокоманду, перед якою треба виконати вставку нової, виконати натискання мишкою в одному з полів цієї макрокоманди або маркіровав весь рядок цілком;
обрати пункт меню «Вставка», підпункт «Строки». Перед маркірованим рядком буде доданий порожній рядок;
поместити до цього рядка нову макрокоманду;
зберігти макрос («Файл» -> «Сохранить»).
Копіювання макросів
Макроси можна копіювати з однієї БД в іншу або в одну й ту ж саме БД під різними іменами. Це економить час при створенні макросів, які виконують схожі задачі.
Існуючий макрос можна скопіювати, виконавши наступні дії:
в вікні БД обрати потрібний макрос;
обрати команду «Правка» -> «Копировать»;
для копіювання макроса в іншу БД зачинити поточну та відчинити ту, до якої буде копіюватися макрос. Обрати в вікні БД вкладку «Макросы».
обрати команду «Правка» -> «Вставить».
В діалоговому вікні, яке з’явиться, ввести ім’я макроса. Якщо макрос копіюється в ту ж БД, в якій знаходиться існуючий макрос, то макросу, якій копіюється, треба дати інше ім’я.
Тема 14 «Властивості та методи компонента TADOTable»
Мета: ознайомитися з властивостями та методами компонента TADOTable.

План
Властивості компонента TADOTable.
Методи компонента TADOTable.

Література
Т. Конолі, К. Бегг, А. Строчан «Бази даних. Проектування, реалізація та супровід.» Теорія та практика. Москва, СПб., Київ. 2000 р.
Малихіна М. П. «Бази даних: основи, проектування, використання». СПб. 2004р.
Г. Гарсіа Моліна. «Системи баз даних. Повний курс». Москва. 2003 р.
Карпов Т. «Бази даних. Моделі, розробка, реалізація». СПб. 2001 р.

Домашнє завдання: вивчити конспект, знати відповіді на такі питання лекції:
Що таке «Звіт»?









Компонент TADOTable має безліч корисних властивостей. Більшість з них прості у використанні, тому щоб не писати безліч прикладів на їх використання, в цій темі коротко будуть описані основні з них.
MasterSource - в цій властивості вказується головна, по відношенню до поточної таблиці. Більш детально ця властивість буде розглядатися на практиці, коли будуть розглядатися пов'язані таблиці.
ReadOnly - якщо ця властивість дорівнює true, то таблицю не можна редагувати. В цьому випадку дані тільки відображаються. Обов'язково треба встановлювати цю властивість для тих таблиць, де дані не повинні змінюватися і користувач не повинен вносити в них зміни.

TableDirect - ця властивість відображає, який відбуватиметься доступ до таблиці. Якщо цей параметр дорівнює true, то відбуватиметься прямий доступ до таблиці за ім’ям. Якщо false, то непомітне для користувача буде відбуватиметься спеціальний SQL-запит до бази даних. Не усі бази даних дозволяють працювати через прямий доступ, тому ця властивість за умовчанням дорівнює false.
TableName - ім'я таблиці, дані якої треба обробляти.
CacheSize - розмір кеш пам'яті. Якщо встановити число 50, то при першому підключенні до таблиці компонент вибере перші 50 рядків і помістить їх в локальній пам'яті, що прискорить доступ до них.
CanModify - властивість схожа на ReadOnly і вказує на можливість редагування даних таблиці.
CommandTimeout - час очікування виконання команди. Коли компонент направляє команду базі даних, то він запускає таймер очікування, по завершенню якого (якщо команда не виконалася) відбувається повідомлення про помилку.
Connection - тут вказується компонент TADOConnection, через який відбувається підключення.
ConnectionString – рядок підключення до бази даних.
CursorLocation – розташування курсору, який зчитує дані та вказує поточну позицію в таблиці. Курсор може знаходитися на сервері або на машині клієнта.
CursorType – тип курсора. Можливий один з наступних варіантів:
- ctUnspecified розташування курсору не вказане
- ctOpenForwardOnly – курсор може рухатися тільки вперед.
- ctKeyset при цьому курсорі зміни, які будуть занесені одним користувачем, не будуть видні іншим підключеним до цієї таблиці. Якщо з однією таблицею працюють одночасно декілька користувачів, то при такому курсорі для відображення змін інших користувачів треба відключитися від бази та підключитися до неї знов.
- ctDynamic динамічний курсор, при якому зміни одного користувача бачать всі інші.
- ctStatic статичний курсор. Зміни одного користувача не можуть бачити інші.
Увага!!! Якщо курсор розташований на клієнтові, то можна використовувати тільки статичний курсор. Не усі типи курсорів можуть працювати з певною базою даних. Одна база даних може підтримувати один тип, а інша може підтримувати все.
Filter – рядок фильтру.
Filtered – є або ні таблица фільтруємою. Якщо встановити false, то рядок фільтру (filter) ігнорується.
IndexFieldNames – ім’я індексованої колонки. Індекси використовуються для сортування даних або для зв’язка між таблицями.
RecNo - номер поточного обраного рядка.
RecordCount – кількість рядків в таблиці.
Sort - рядок, в якому вказується тип сортування (за збільшенням або зменшенням).
Active – якщо ця властивість дорівнює true, то таблиця відкрита.
AggFields – тут зберігаються всі агрегатні поля.
AutoCalcFields – якщо тут true, то треба автоматично перераховувати поля.
Bof – на цю властивість впливати неможна, але якщо воно дорівнює true, то ми знаходимося в початку файлу.
Bookmark - тут знаходиться поточна закладка.
Eof - на цю властивість впливати неможна, але якщо воно дорівнює true, то ми знаходимося в кінці файлу.
FieldCount – тут зберігається кількість полів в таблиці.
Fields – через це поле можна отримати доступ до значень полів.
FieldValues – за допомогою цієї властивості можна легко отримати доступ до будь-якого значення вказаного поля. Ім’я поля треба вказувати в квадратних дужках. Наприклад, Table1.FieldValues[Телефон’]:='3346598';
FilterOption – налаштування фільтру. Тут можна вказувати наступні параметри:
- foCaseInsensitive фільтр буде не чутливий до регістра.
- foNoPartialCompare якщо стоїть цей параметр, то порівняння відбуватимуться з точною копією вказаного значення у фільтрі. Якщо параметр не вказаний, то у фільтр потраплятимуть рядки, що містять значення у фільтрі, але що не є його точною копією. Наприклад, якщо у фільтрі вказано показувати слова «са», то у фільтр потраплять усі слова що починаються на «са» (самокат, .).
Modified – якщо ця властивість дорівнює true, то в таблицю були внесені зміни.

Методи компонента TADOTable
Властивостей дуже багато і більшість з них дуже корисні. Але методи не менш корисні.
BookmarkValid – цей метод перевіряє правильність закладки. В якості єдиного параметра треба вказати закладку типу TBookmark і якщо вона є дійсною, то результатом буде true.
CancelUpdates - відмінити оновлення, які збережені в кеш-пам’яті
CompareBookmarks - порівняння двох закладок. У метода два параметри типу TBookmark. Ці дві закладки порівнюються. Якщо закладки рівні, то результат дорівнює нулю. Якщо перша менше за другу, то результат буде - 1. Якщо перша більше за другу, то результат дорівнює одиниці.
DeleteRecords – видалити записи. У метода один параметр - які записи видаляти. Можна вказати наступні значення в якості параметра:
- arCurrent знищити лише поточний запис.
- arFiltered знищити записи, які задовільняють встановленому фільтру.
- arAll – всі записи.
- arAllChapters знищити записи у всіх розділах ADO.
Append – додати новий запис в кінець таблиці.
Cancel – відмінити зміни поточного рядка, якщо зміни ще не були збережені за допомогою методу Post.
Close – закрити таблицю.
Delete – знищити поточний рядок.
Edit – перейти в режим редагування. Після цього можна змінювати значення полів.
FieldByName – знайти поле за іменем. В якості єдиного параметра треба вказати ім'я поля у вигляді рядка і в результаті отримуємо посилання на поле у вигляді об'єкту TField.
First – перейти на перший рядок в таблиці.
Insert – додати новий рядок в таблицю.
IsEmpty – якщо метод поверне true, то в таблиці не має жодного запису.
Last - перейти на останній запис в таблиці.
Next – перейти на наступний запис.
Post – прийняти всі зміни.
Prior - рухатися на попередній запис в таблиці.
Refresh – оновити інформацію про дані.
UpdateRecord – оновити поточний запис.










Управление отображением данных
В предыдущем примере всё работает прекрасно, только вот поле Key1 пользователю видеть абсолютно не нужно. Это поле – счётчик и его значение увеличивается автоматически. А раз пользователь не может влиять на поле и оно не несёт в себе полезной для него информации, то и видеть это поле он не должен.
Чтобы прятать от пользователя не нужные поля и показывать только то, что мы хотим и в том виде, в котором хотим, нам необходимо научиться управлять отображением данных. Но прежде чем приступить к этому, давай создадим в нашей базе ещё два поля «Дата» и «Мобильник». Загрузи нашу базу данных в Access, щёлкни по ней правой кнопкой и в появившемся меню выбери «Конструктор».


Рисунок .1 Редактирование таблицы

1. Добавь поле с именем «Дата», тип «Дата/время».
2. Добавь поле с именем «Мобильник», и тип «Логический». Если в строке находиться мобильный телефон, то в этом поле будем ставить true, иначе «false».

Закрой таблицу. Теперь переходим в Delphi и попробуем отобразить изменения в
уже созданном примере.
Для начала давай перенесём компоненты доступа к базе данных в отдельное специальное окно. Выдели компоненты ADOConnection1, DataSource1 и BookName. Теперь выбери из меню Edit пункт Cut, чтобы эти компоненты скопировались в буфер обмена и сразу удалились с формы.
Теперь выбери из меню File->New->Data Module (рисунок 4.2). Этим ты заставишь Delphi создать специальное окно Data Module, которое удобно подходит для хранения компонентов доступа к базам данных.



Рис 4.2 Создание модуля Data Module

Теперь выбери из меню Edit пункт Paste, чтобы вставить в это окно вырезанные нами компоненты. Расположи теперь эти компоненты в окне так, как тебе будет удобно. Я сделал это так, как показано на рисунке 4.3.



Рис. 4.3 Окно Data Module

Теперь все компоненты, которые предназначены для доступа к базе данных будем располагать здесь, чтобы с ними удобно было работать. Сохрани новый модуль под именем DataModuleUnit.
Теперь открой менеджер проектів (в меню View надо выбрать Project Manager) и расположи это окно так, чтобы тебе было удобно в любой момент получить к нему доступ. Я всегда располагаю его в правом нижнем углу экрана.
Теперь, когда тебе надо перейти из главной формы в модуль данных DataModule или обратно, ты легко можешь сделать это с помощью менеджера проектов, дважды щёлкнув по нужной форме.


Рис. 4.4 Менеджер проектов

Если ты хоть раз уже открывал какую-то форму из менеджера проектов и не закрывал, то её можно найти на закладках в окне редактора кода:

Рис. 4.5 Закладки форм в редакторе кода

И ещё хочу напомнить, что переключаться между визуальной формой и её кодом
очень удобно простым нажатием клавиши F12.
На этом инструкции по работе с оболочкой заканчиваю и пора двигаться дальше.
Перейди в главную форму и ты сразу увидишь, что в нашей сетке DBGrid1 нет
данных. Почему? Да потому что она потеряла связь с компонентами доступа к данным. Выдели сетку и щёлкни по свойству DataSource, и ты увидишь, что в выпадающем списке ничего нет. Это потому что все нужные компоненты мы убрали в отдельную форму и главная форма пока об этом не знает.
Чтобы форма узнала о существовании компонентов, ей нужно указать в разделе uses наш модуль DataModuleUnit. Это можно сделать вручную или выбрать из меню File пункт Use Unit (в этот момент должно быть выделено окно кода главной формы, потому что мы подключаем новый модуль именно к ней. В появившемся окне (рисунок 4.6) нужно выбрать имя нашего нового модуля DataModuleUnit (пока оно одно в списке) и нажать ОК.
Проверь теперь в редакторе кода, чтобы после ключевого слова implementation
появилось «uses DataModuleUnit;»:
implementation
uses DataModuleUnit;
{$R *.dfm}


Рис. 4.6 Окно подключения нового модуля

Вот теперь можно выделять нашу сетку DBGrid1 и в свойстве DataSource указывать компонент DataSource, данные которого должны быть отображены в сетке (DataModule1.DataSource1).
Теперь переходим в модуль DataModule и попытаемся настроить отображение данных. Дважды щёлкни по компоненту BookTable и перед тобой появиться окно редактирования полей базы данных (рис. 4.7).


Рис. 4.7 Окно редактирования полей базы данных

Пока что оно пустое и сюда нужно добавить все поля базы данных. Для этого щёлкни в нём правой кнопкой мыши и в появившемся меню выбери пункт Add All Field (Добавить все поля). Окно автоматически заполниться именами полей (рис. 4.8).
Свойства можно переставлять местами двигая мышкой. При этом физическое расположение в базе данных не меняется, зато при отображении данных в сетке, они будут отображаться в том порядке, в котором они выстроены здесь. Так что ты в любой момент можешь изменить порядок отображения данных, не вмешиваясь в саму базу данных.
Ты можешь теперь выделять отдельные поля и в объектном инспекторе редактировать его свойства. Свойства у полей могут быть разные, в зависимости от типа поля. Я сейчас не буду их расписывать, уж лучше мы постепенно познакомимся с ними на практике и увидим их действие.


Рис. 4.8 Заполненное окно редактирования полей базы данных

Первое, что мы должны сделать – убрать из видимости счётчик (поле Key1). Мы уже договорились, что пользователю оно не нужно и он не должен его видеть. Выдели это свойство и в объектном инспекторе установи в свойстве Visible значение false (это свойство есть у всех полей). Сразу же можешь перейти в главную форму или запустить программу, чтобы убедиться в том, что поле Key1 больше не отображается.
Теперь отредактируем длину отображения колонок. Для этого выдели свойство
«Фамилия». В базе данных мы выделили под это поле 50 символов (на всякий случай). В сетке ширина колонки будет отображаться по умолчанию на всю длину. Но чаще всего фамилии не превышают 15 символов, поэтому нет смысла отображать всю длину. На много удобней отображать только 15 символов, а если что-то не поместиться, то пользователь программы в любой момент сможет раздвинуть колонку и увидеть недостающие символы.
За ширину колонки отвечает свойство DisplayWidth (это свойство есть у всех полей). По умолчанию в нём стоит значение физической ширины поля, но мы укажем там 15.
Опять же, на саму базу данных это не влияет и поле всё ещё имеет размер 50, но ширина отображаемой колонки в сетке будет 15. Точно так же сократи ширину поля «Имя».
Ещё несколько интересных свойств:
DefaultExpression – здесь можно указать значение по умолчанию. В дальнейшем, когда будут создаваться новые строки, то в поля будут сразу заноситься указанные здесь значения.

MaxValue – максимально допустимое значение. Если это числовое поле и оно должно изменяться в определённых рамках (например, от 0 до 100), то желательно указать эти ограничения здесь, чтобы сократить вероятность опечатки пользователем. Все люди склонны к ошибкам, так пускай программа автоматически сокращает вероятность таких ошибок.
MinValue – минимально допустимое значение.
ReadOnly – поле только для чтения. Если какое-то поле не должно изменяться, то установи у него в свойстве ReadOnly значение true. В этом случае ты обезопасишь программу от случайного изменения данного поля пользователем.
Required – если здесь true, то поле является обязательным и обязательно должно иметь какое-то значение. Если пользователь ничего не укажет, то программа сообщит об этом. Допустим, что какое-то поле у тебя участвует в расчётах. Если в этом поле не
окажется данных, то программа может зависнуть. Есть два пути – при расчёте проверять наличие в поле данных или требовать, чтобы пользователь обязательно что-то ввёл. Второй путь предпочтительней, если это поле действительно важное. Представь запись в телефонном справочнике без телефона. Спрашивается, зачем тогда нужна эта запись если не указан телефон. Так что поле для номера телефона можно делать обязательным.
Tag – просто числовое значение, которое можно использовать по своему усмотрению.
Теперь в нашем окне помещается практически вся необходимая информация и не надо лишний раз использовать полосы прокрутки (рис. 4.9).

Рис. 4.9 Улучшенное окно программы

Запусти программу и заполни поле «Дата» у всех записей любыми значениями. При заполнении будь внимателен и указывай реальные даты. Если ты введёшь недопустимое значение, то программа высветит ошибку.
При вводе данных учитывай разделитель чисел. В большинстве русскоязычных ОС Windows в качестве разделителя используется точка или знак косой черты «/». К тому же первым идёт число, потом месяц и потом год (в англоязычной версии первым может идти месяц). Пробелы не допустимы. Этот порядок и разделитель настраиваются в настройках ОС. Войди в «Панель управления» и запусти окно «Язык и стандарты» (рисунок 4.10). Здесь ты можешь изменить все настройки ввода даты, времени и чисел.

Рис. 4.10 Настройка формата ввода и отображения даты

Вернёмся к Delphi. Выдели поле «Дата». Первое, что мы должны сделать – уточнить, какую именно дату здесь надо вводить. Так как это телефонный справочник, то я собираюсь здесь указывать дату рождения владельца телефона. Поэтому, вполне разумно будет в заголовке сетке отображать не просто «Дата», а «Дата рождения». Тут можно поступить двумя способами – отредактировать имя поля в базе данных (не совсем разумно) или просто заставить Delphi отображать в заголовке поля нужный текст.
За текст отображаемый в заголовке отвечает свойство DisplayLabel (это свойство есть у всех полей). Давай в нём введём текст «Дата рождения». Можешь проверить, что теперь в заголовке отображается нужный текст.
Теперь отредактируем формат отображения даты. За это отвечает свойство DisplayFormat. Тут можно указывать текстовый формат, в котором нужно отображать дату. Как отображать? Вспомни функцию FormatDateTime и её первый параметр (см главу «Преобразование данных»). Вот именно это здесь и можно указывать. Лично я люблю использовать для отображения полный формат – «dddddd».
Ну и наконец нужно указать маску ввода для даты. Её нужно указывать в свойстве EditMask и так же, как мы это делали у компонента TMaskEdit. Для даты я всегда указываю маску ввода «99/99/9999».
Если ты теперь запустишь наш пример, то в поле «Дата рождения» все даты будут отображаться в полном формате (рис. 4.11). Если щёлкнуть дважды по этому полю в любой строке (войти в режим редактирования строки), то дата сразу перейдёт в режим редактирования (см рис.4.11 вторая строка).

Рис. 4.11 Улучшенный вид поля «Дата рождения»

Последнее, что нам надо отредактировать – поле «Мобильник». Пока что здесь отображаются значения true или false. Но мы русские люди и для нас будет удобнее видеть родные Да или Нет. Выдели это поле и в объектном инспекторе найди свойство DisplayValues. Для булевых полей здесь нужно указать два значения в формате «True;False», т. е. сначала указываем положительное значение и после точки с запятой отрицательное (кавычки указывать не надо). Итак, я указал Да;Нет.
Теперь в поле «Мобильник» будут отображаться понятные слова, да и при редактировании теперь нужно вводить не true или false, а родные Да или Нет.


Методи доступу до файлів
Організація файлу - фізичний розподіл даних файлу по записам та сторінкам на вторинному пристрої зберігання.
Існують наступні головні типи організації файлів.
Непідпорядкована організація файлу передбачає довільне непідпорядковане розміщення записів на диску.
Підпорядкована (послідовна) організація передбачає розміщення записів в відповідності зі значеннями вказаного поля.
В хешированому файлі записи зберігаються у відповідності до значення деякої хеш-функції.
Для кожного типу організації файлів використовується відповідний набір методів доступу.
Метод доступу - дії, які виконуються при зберіганні або вилученні записів з файлу.
Оскільки деякі методи доступу можуть застосовуватися лише до файлів з визначеним типом організації (наприклад, неможна застосовувати індексний метод доступу до файлу, який немає індексу), терміни організація файлу та метод доступу часто розглядаються як еквівалентні.

Непідпорядковані файли
Непідпорядкований файл (який іноді називають купою) має найпростішу структуру. Записи розташовуються в файлі в тому порядку, в якому вони в нього вставляються. Кожен новий запис помещается на останню сторінку файлу, а якщо на останній сторінці для неї не вистачає місця, то в файл додається нова сторінка. Це дозволяє дуже ефективно виконувати операції додавання. Але оскільки файл подібного типу не володіє жодним підпорядкуванням по відношенню до значень полів, для доступу до його записів вимагається виконувати лінійний пошук. При лінійному пошуку всі сторінки файлу послідовно зчитуються до тих пір, доки не буде знайдений потрібний запис. Тому операції вилучення даних з непідпорядкованих файлів, які мають декілька сторінок, виконуються відносно повільно, за виключенням тих випадків, коли записи, які вилучаються, складають значну частину всіх записів файлу.
Для знищення запису спочатку треба вилучити потрібну сторінки, потім знищити потрібний запис, а після цього знов зберегти сторінку на диску. Оскільки простір знищених записів повторно не використовується, производительность роботи по мірі знищення записів зменьшується. Це означає, что непідпорядковані файли вимагають періодичної реорганізації, яка повинна виконуватися адміністратором бази даних (АБД) з метою звільнення невикористовуємого простору, який створився на місці знищених записів.
Непідпорядковані файли краще всіх інших типів файлів подходять для виконання масового завантаження даних в таблиці, оскільки записи завжди додаються в кінець файлу, що вилучає будь-які додаткові дії по обчисленню адреси сторінки, в яку треба розмістити той або інший запис.
Підпорядковані файли
Записи в файлі можна відсортувати за значенням одного або декілька полів та таким чином створити набір даних, підпорядкований за деяким ключем. Поле (або набір полів), за яким відсортовується файл, називається полем підпорядкування. Якщо поле підпорядкування є також ключом доступу до файлу та тому гарантується наявність в каждому записі унікального значення цього поля, воно називається ключом підпорядкування для даного файлу.
В загальному випадку бінарний пошук ефективніший за лінійний, однак цей метод найчастіше застосовується для пошуку даних в первинній (оперативній), а не в вторинній пам’яті (зовнішній).
Операції додавання та знищення записів в відсортованому файлі ускладнюються у зв’язку з необхідністю підтримувати встановлений порядок записів. Для додавання нового запису треба визначити його розташування у вказаному порядку, а потім знайти вільне місце для вставки. Якщо на необхідній сторінці достатньо місця для розміщення нового запису, то треба буде перепідпорядкувати записи лише на цій сторінці, після чого вивести його на диск. Якщо ж вільного місця недостатньо, то треба буде перемістити один або декілька записів на наступну сторінку. На наступній сторінці також може не оказаться достатньо вільного місця, та з неї треба буде перемістити деякі записи на наступну сторінку та т. д.
Таким чином, додавання запису в початок великого файлу може оказаться дуже довгою процедурою. Для вирішення цієї проблеми часто використовується тимчасовий невідсортований файл, який називається файлом переповнення (overflow file) або файлом транзакції (transaction file). При цьому всі операції додавання виконуються в файлі переповнення, вміст якого періодично об’єднюється з головним відсортованим файлом. Тобто, операції додавання виконуються більш ефективно, але виконання операції вилучення даних немного замедляется. Якщо запис не знайдений під час бінарного пошуку в відсортованому файлі, то приходиться виконувати лінійний пошук в файлі переповнення. Та навпаки, при знищенні запису необхідно реорганізовувати файл, щоб знищити місця, які пустують.
Підпорядковані файлі рідко використовуються для зберігання інформації баз даних, за виключенням тих випадків, коли для файлу організується первинний індекс.

1.1.1. Гранульовані синхронізаційні захоплення
Схожі рассуждения призвели до розробки апарату гранульованих синхронізаційних захоплень. При застосуванні цього підходу синхронізаційні захоплення можуть запрашиваться за відношенням до об’єктів різного рівня: файлам, відношенням та кортежам. Вимагаємий рівень об’єкту визначається тим, яка операція виконується (наприклад, для виконання операції знищення відношення об’єктом синхронізаційного захоплення повинні бути всі відношення, а для виконання операції знищення кортежу - цей кортеж). Об’єкт будь-якого рівня може бути захоплений в режимі S або X.
Зараз найважливіша отличие, на якій, тримається відповідність захоплень різного рівня. Вводяться спеціальні протокол гранульованих захоплень та нові типи захоплень: перед захопленням об’єкту в режиму S або X відповідний об’єкт найвищого рівня повинен бути захоплений в режимі IS, IX або SIX. Що ж з себе представляють ці режими захоплень?
IS (Intented for Shared lock) по відношенню до деякого складеного об’єкту O означає намір захопити деякий входящий в O об’єкт в сумісному режимі. Наприклад, при намірі читати кортежі з відношення R це відношення повинне бути захоплене в режимі IS (а до цього в таком ж режимі повинен бути захоплений файл).
IX (Intented for eXclusive lock) по відношенню до деякого складеного об’єкту O означає намір захопити деякий входящий в O об’єкт в монопольному режимі. Наприклад, при намірі знищувати кортежі з відношення R це відношення повинне бути захоплене в режимі IX (а до цього в таком ж режимі повинен бути захоплений файл).
SIX (Shared, Intented for eXclusive lock) по відношенню до деякого складеного об’єкту O означає спільне захоплення всього цього об’єкту з наміром впоследствии захоплювати будь-які входящие в нього об’єкти в монопольному режимі. Наприклад, якщо виконується довга операція перегляду відношення з можливістю знищення деяких переглядаємих кортежів, то економніше всього захопити це відношення в режимі SIX (а до цього захопити файл в режимі IS).
Важко описати словами всі можливі ситуації. Ми обмежимося наведенням повної таблиці сумісності захоплень, аналізуючи яку можно виявити всі випадки:

X
S
IX
IS
SIX

-
так
так
так
так
так

X
ні
ні
ні
ні
ні

S
ні
так
ні
так
ні

IX
ні
ні
так
так
ні

IS
ні
так
так
так
так

SIX
ні
ні
ні
так
ні


1.1.2 Предикатні синхронізаційні захоплення
Недивлячись на привабливість методу гранульованих синхронізаційних захоплень, треба відмітити що він не вирішує проблему фантомів (якщо, звичайно, не обмежитися використанням захоплень відношень в режимах S та X). Давно відомо, що для вирішення цієї проблеми необхідно перейти від захоплень індивідуальних об’єктів бази даних, до захоплення умов (предикатів), яким задовільняють ці об’єкти. Проблема фантомів не виникає при використанні для синхронізації рівня відношень саме тому, що відношення як логічний об’єкт представляє собою неявну умову для входящих в нього кортежів. Захоплення відношення - це простий та частний випадок предикатного захоплення.
Оскільки будь-яка операція над реляційною базою даних задається деякою умовою (тобто в ній вказується не конкретний набір об’єктів бази даних, над якими треба виконувати операцію, а умова, якій повинні задовільняти об’єкти цього набору), ідеальним обранням було б вимагати синхронізаційне захоплення в режимі S або X саме цієї умови. Але якщо подивитися на загальний вигляд умов, припустимих, наприклад, в мові SQL, то стає абсолютно незрозуміло, як визначити сумісність двох предикатних захоплень. Ясно, що без цього використовувати предикатні захоплення для синхронізації транзакцій неможливо, а в загальній формі проблема невирішальна.
Ця проблема порівняно легко вирішується для випадку простих умов. Будемо називати простою умовою кон’юнкцію простих предикатів, які мають вигляд
ім’я-атрибуту { = > < } значення
В типічних СКБД, які підтримують двохрівневу організацію (мовний рівень та рівень керування зовнішній памя’ті), в інтерфейсі підсистем керування памят’ю (яка звичайно завідує й серіалізацією транзакцій) припускаються лише прості умови. Підсистема мовного рівня робить компіляцію ісходного оператору зі складною умовою в послідовність звертань до ядра СКБД, в кожному з яких містяться лише прості умови. Тобто, в випадку типової організації реляційної СКБД прості умови можно використовувати як основу предикатних захоплень.
Для простих умов сумісність предикатних захоплень легко визначається на основі наступної геометричної інтерпретації. Нехай R відношення з атрибутами a1, a2, ..., an, а m1, m2, ..., mn - множина припустимих значень a1, a2, ..., an відповідно (всі ці множини - кінцеві). Тоді можно співставити R кінцевий n-мірний простір можливих значень кортежів R. Будь-яка проста умова "вирізає" m-мірний прямокутник в цьому просторі (m <= n).
Тоді S-X, X-S, X-X предикатні захоплення від різних транзакцій сумісні, якщо відповідні прямокутники не перетинаються.
Це ілюстрирується наступним прикладом, який показує, що в яких би режимах не вимагала транзакція 1 захоплення умови (1<=a<=4) & (b=5), а транзакція 2 - умови (1<=a<=5) & (1<=b<=3), ці захоплення завжди сумісні.
Приклад: (n = 2)

Відмітимо, що предикатні захоплення простих умов описуються таблицями, які трохи відрізняються від таблиць традиціоних синхронізаторів.
1.1.3. Тупіки, распознавание та разрушение
Одним з найчуттєвіших недоліків методу серіалізації транзакцій на основі синхронізаційних захоплень є можливість виникнення тупіків (deadlocks) поміж транзакціями. Тупіки можливі при застосуванні будь-якого з варіантів, які розглянуті раніше.
Ось простий приклад виникнення тупіку поміж транзакціями T1 та T2:
транзакції T1 та T2 встановили монопольні захоплення об’єктів r1 та r2 відповідно;
після цього T1 вимагається сумісне захоплення r2, а T2 - сумісне захоплення r1;
жодна з транзакцій не може продовжуватися, следовательно, монопольні захоплення будуть зняті, а сумісні - не будуть задовільнені.
Оскільки тупіки можливі, та жодного естественного виходу з тупікової ситуації не існує, то ці ситуації необхідно обнаруживать та штучно устранять.
Основою обнаружения тупікових ситуацій є побудова (або постійне підтримання) графа очікування транзакцій. Граф очікування транзакцій - це орієнтований дводольний граф, в якому існує два типа вершин - вершини, які відповідають транзакціям, та вершини, які відповідають об’єктам захоплення. В цьому графі існує дуга, яка веде з вершини-транзакції до вершини-об’єкту, якщо для цієї транзакції існує удовлетворенный захоплення об’єкту. В графі існує дуга з вершини-об’єкту до вершини-транзакції, якщо транзакція очікує удовлетворения захоплення об’єкту.
Легко показати, що в системі існує ситуація тупіку, якщо в графі очікування транзакцій є хоча б один цикл.
Для распознавания тупіку періодично відбувається побудова графу очікування транзакцій, та в цьому графі здійснюється пошук циклів. Традиційною техникою (для якої існує множина різновидів) віднаходження циклів в орієнтованому графі є редукція графу.
Редукція міститься в тому, що перш за все з графу очікування знищуються всі дуги, які ісходять з вершин-транзакцій, в які не входять дуги з вершин-об’єктів. (Це як би відповідає тій ситуації, що транзакції, які не очікують удовлетворения захоплень, вдало завершилися та звільнили захоплення). Для тих вершин-об’єктів, для яких не залишилось входящих дуг, але існують дуги, які ісходять, орієнтація дуг, які ісходять, змінюється на протилежну (це моделює удовлетворение захоплення). Після цього знову спрацьовує перший крок та так до тих пір, доки на першому кроці не припиниться знищення дуг. Якщо в графі залишились дуги, то вони обов’язково утворюють цикл.
Передбачимо, що нам вдалось знайти цикл в графі очікування транзакцій. Що робити зараз? Треба яким-небудь чином забезпечити можливість продовження роботи хоча б для частини транзакцій, потрапивши в тупік. Разрушение тупіку починається з вибору в циклі транзакцій так званої транзакції-жертви, тобто транзакції, якою вирішено пожертвовати, щоб забезпечити можливість продовження роботи інших транзакцій.
Грубо кажучи, критерієм вибору є вартість транзакції; жертвою обирається найдешевша транзакція. Вартість транзакції визначається на основі багатофакторної оцінки, в яку з різними весами входять час виконання, число накопичених захоплень, пріоритет.
Після вибору транзакції-жертви виконується відкат цієї транзакції, який може носити повний або частковий характер. При цьому, звільняються захоплення та може бути продовжено виконання інших транзакцій.
Таке насильственное устранение тупікових ситуацій є порушенням принципу ізольованності користувачів, якого неможливо запобігти.
Відмітимо, що в централізованих системах вартість побудови графу очікування порівняно невелика, але вона стає занадто великою в розподілених СКБД, в яких транзакції можуть виконуватися в різних вузлах мережі. Тому в таких системах звичайно використовуються інші методи серіалізації транзакцій.

Тема «Кластеризація»
Кластеризація використовує принцип близького розміщення в зовнішній пам’яті логічно пов’язаних даних. Цим забезпечуються швидкий пошук та вилучення необхідної інформації.
Фізично кластеризація досягається розміщенням логічно пов’язаних записів на одній сторінці (якщо зробити це дозволяють розміри сторінок та записів) або на сторінках, розташованих поруч. Якщо з таблиці Сведения о поставках товаров в магазин часто вилучаються відомості для товарів з однаковими назвами, а на кожній сторінці в зовнішній пам’яті розташовуються два записи, структура зберігання може мати вигляд (табл. 1):
Таблица 1 Сведения о поставках товаров в магазин
Номер накладной
Название
товара
Артикул
Количество
Дата
поставки
Номер страницы

37
Костюм
500
50
10.12.05
1

60
Костюм
500
35
11.12.05
1

28
Костюм
300
20
12.12.05
2

74
Костюм
400
50
12.12.05
2

54
Сапоги
200
75
10.12.05
5

18
Туфли
100
120
11.12.05
9

80
Туфли
100
100
12.12.05
9

В підсумку з множини сторінок формуються блоки, які називаються кластерами, в кожному з яких зберігаються записи з однаковими назвами товарів.
Новий запис, який додається до бази даних, повинен бути розташована в конкретному кластері. Цей процес може бути виконаний на вже існуючій сторінці (в прикладі, який розглядається, якщо товар має назву Сапоги, на сторінці з номером 5) або за відсутністю на ній вільного місця, на сторінці физично найближчої (товар Костюм – на сторінці з номером 3).
Для кластеризованих таблиць можна створювати неплотні індекси з вказівниками на перші записи, які входять в кожен кластер (блок).
Спосіб кластеризації, який розглядається, реалізується для одного логічного об’єкту (файлу) бази даних. Така кластеризація називається внутрифайловою. Іноді застосовується міжфайлова кластеризація, коли на одній сторінці в зовнішній пам’яті розташовуються записи з декількох логічних об’єктів (файлів) бази даних. Наприклад, на сторінках, де містяться відомості про поставки товарів в магазин з конкретними назвами та артикулами, може зберігатися інформація про такі характеристики цих товарів, як виробник, постачальник, ціна, колір виробу та т. д. з іншого логічного об’єкту. Такий принцип зберігання даних може істотньо прискорити виконання запитів, які містять критерії відбору для характеристик, зберігаємих сумісно, але він уповільнює пошук інформації для всіх інших запитів. Тому кластеризація є оправданной, якщо до бази даних найчастіше виконуються запити одного типу. При цьому треба мати на увазі, що одночасно можно реалізовувати лише один варіант кластеризації бази даних, так як мова йде про фізичне зберігання інформації.
Режими роботи з базою даних
В залежності від характеру вирішуємих задач робота з базами даних може бути організована різними способами (рис. 1):













Рис. 1 Режими роботи з базами даних
Якщо з базою даних, яка розташована на автономному комп’ютері або комп’ютері, який входить до складу локальної обчислювальної мережі, впродовж одного або декількох сеансів працює лише одна людина, такий режим називається однокористувацьким (монопольним).
В межах послідовного багатокористувацького режиму до бази даних мають доступ декілька человік, які змінюють одне одного в процесі роботи. Паралельні режими роботи з базою даних передбачають, що з однією й тією ж базою даних одночасно працюють декілька користувачів.
Для забезпечення надійної та якісної роботи з базою даних в монопольному та послідовному багатокористувацькому режимах звичайно не вимагаються складні спеціальні методи та технології. Необхідний результат може бути досягнутий за допомогою регламентації дій та обмежень повноважень окремих користувачів, впровадження детально розроблених інструкцій про характер та послідовність виконуємим дії та т. д.
Монопольний та послідовний багатокористувацький режими в основному застосовуються для роботи з невеликими, локальними БД (облік вступу товарів в окремий магазин). Якщо БД призначена для забезпечення діяльності навіть невеликих організацій, фірм з високим ступенем ймовірності можна очікувати, що вона буде експлуатуватися в паралельному режимі.



Тема «Типы данных в InterBase»
Большинство SQL-серверов имеют схожие типы данных, хотя имеются и различия. После того обилия типов, к которому мы привыкли в базах данных Paradox или MS Access, может показаться, что SQL-серверы имеют очень ограниченный набор типов данных. Связано это в первую очередь, с ограничениями стандартов языка запросов SQL.
Например, InterBase не имеет:
Тип автоинкремент (автоматически увеличивающееся числовое поле). Нехватку такого важного типа можно компенсировать специальными числовыми генераторами.
Тип Boolean. Вместо него предлагается использовать символьный тип данных Char(1).
Тип Currency. Денежные типы данных придется хранить в обычных столбцах с вещественным типом данных.

InterBase поддерживает два типа целых чисел:
SMALLINT - Короткое целое число (2 байта) со знаком. Диапазон значений от -32768 до 32767.
INTEGER (INT) - Длинное целое число (4 байта) со знаком. Диапазон значений от - 2147483648 до 2147483647.
Здесь рекомендации обычные: экономить на дисковом пространстве для чисел не стоит, поэтому используйте SMALLINT только в тех полях, которые никогда не будут содержать больших чисел. Во всех остальных случаях рекомендуется использовать длинное целое INTEGER, которое также можно обозначать сокращенным синтаксисом INT. Заметим здесь же, что длинное целое INTEGER также используется для ключевых автоинкрементных полей, идентифицирующих запись, а роль счетчика при этом играют генераторы.

К вещественным типам относятся:
FLOAT - Число с плавающей точкой одинарной точности (4 байта). Диапазон от 3,4*10-38 до 3,4*10+38. Значащих цифр 7.
DOUBLE PRECISION - Число с плавающей точкой двойной точности (8 байт). Диапазон от 1,7*10-308 до 1,7*10+308. Значащих цифр 15.

Типа данных REAL в InterBase не существует, однако попытка создать поле такого типа не приведет к ошибке, вместо этого InterBase создаст поле типа FLOAT. Попытки создать поле других вещественных типов, которые имеются в Delphi, приведут к ошибке.
Тип FLOAT не рекомендуется использовать там, где нужна точность расчетов дробных значений, особенно в денежных полях. Вместо привычного типа CURRENCY, которого нет в InterBase, лучше подойдет тип DOUBLE PRECISION. Пример:
CREATE TABLE Table_Vesh(
Kol_Float FLOAT,
Kol_Double DOUBLE PRECISION)
Здесь первое поле может содержать вещественные числа, имеющие не более 4 знаков после запятой. При попытке сохранить число "1,234567" реально будет записано число "1,2345". Второе поле обеспечивает большую точность сохраняемых данных.
В вещественных полях нельзя управлять количеством цифр после запятой, поэтому если потребуется, выводить только две цифры, в программе придется использовать маску ввода, например "#,###.##".

Числа с фиксированной точкой
Таких типов два: DECIMAL и NUMERIC, оба типа данных практически равнозначны. Не самые удобные в использовании типы. Они призваны задавать фиксированное количество чисел после запятой. Как известно, вещественные числа определяются двумя значениями:
Размер - общее количество цифр.
Точность - количество цифр после запятой.

DECIMAL / NUMERIC (Размер, точность) - Числа с плавающей точкой переменной точности. Оба типа равнозначны и могут использоваться с одинаковым результатом. Размер (от 1 до 15) указывает число значащих цифр. Точность (от 0 до 15) указывает число знаков после запятой. Точность должна быть меньше или равна размеру. Например, поскольку специальных типов DECIMAL и NUMERIC на самом деле не существует, вместо них используются другие типы столбцов. Правила таковы:
При указании размера числа от 1 до 4 будет использован столбец SMALLINT.
При указании размера числа от 5 до 9 будет использован столбец INTEGER.
При указании размера числа от 10 до 15 будет использован столбец DOUBLE PRECISION.
InterBase поддерживает три типа данных, работающие с датой и временем, причем применение этих типов напрямую зависит от используемого в базе данных диалекта SQL.
TIMESTAMP - тип данных, совместимый с типом TTimeStamp в Delphi. Содержит одновременно и дату, и время в виде двух целых 32-битовых чисел. Первое число содержит порядковый номер дня, прошедший с 01.01.0001. Второе число указывает количество миллисекунд, прошедших с полуночи.
DATE - тип данных для хранения значений только дат. Диапазон от 1 января 0001 г. до 31 декабря 9999 г. Поддерживается только в базах данных, использующих третий диалект SQL. Попытка создать поле типа DATE в базах данных с первым диалектом ошибки не вызовет, однако реально будет создано поле типа TIMESTAMP.
TIME - тип данных для хранения значений только времени. Диапазон времени от 00:00 до 23:59:59:9999. Поддерживается только в базах данных, использующих третий диалект SQL. Попытка создать поле типа TIME в базах данных с первым диалектом приведет к ошибке.

Существует два текстовых типа данных: CHARACTER(n)(в сокращенном варианте CHAR(n)) и CHARACTER VARYING(n) (в сокращенном варианте VARCHAR(n)).
n - указывает количество символов в поле. В обоих типах n может быть от 1 до 32767 символов (32 Кбайт). Если n не указать, по умолчанию будет присвоено число 1. Пример создания полей:
CREATE TABLE Table_Text(
Kol_Char CHAR,
Kol_Varchar VARCHAR(255))

В первом случае будет создано поле размером 1 символ, во втором случае в поле можно сохранить текст размером до 255 символов. Между этими типами данных есть отличия. Тип CHAR предназначен для хранения текста фиксированной длины. Другими словами, если мы определим поле в 10 символов, а запишем только 5, то текст будет дополнен завершающими пробелами до полной длины. Тип VARCHAR хранит текст переменной длины, и возвращает сохраненный текст без завершающих пробелов. Тем самым, использование типа VARCHAR в большинстве случаев является предпочтительным.
BLOB (Binary Large Object - Большой двоичный объект) - поле неограниченного размера, может содержать любой тип двоичных данных, например, файл с фотографией, мелодией или цифровой книгой, или просто большой текст (аналог MEMO).
В InterBase не поддерживаются типы Boolean. Вместо этого предлагается использовать тип CHAR(1), который создает односимвольный столбец, и вводить значения типа T/F, Y/N, Д/Н, 1/0, +/- и т.п. Проверка логики и правильности ввода значения возлагается на клиентское приложение.










Тема «Зберігаємі процедури в InterBase»
Мета: знати призначення зберігаємих процедур та синтаксис їх створення.

Література

«Введение в InterBase» - А. Я. Скляр, 2002 р.
«Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/Firebird/Yaffil (2-е издание)» - А. Н. Ковязин, С. М. Востриков, 2003р.
«Організація баз даних та знань» - Пасічник В. В., Резніченко В. А., Київ, 2006 р.

План
Поняття зберігаємих процедур. Типи зберігаємих процедур.
Синтаксис створення зберігаємих процедур.
Блок кода зберігаємих процедур.

Домашнє завдання: вивчити матеріал лекції, знати відповіді на такі питання лекції:
Що таке «зберігаєма процедура» та для чого вона призначена?
Яких типів можуть бути зберігаємі процедури?
Яку мову містять в своїй основі зберігаємі процедури?
За допомогою якого оператора створюються зберігаємі процедури?
Що розуміється під поняттям «термінатори»?
Які елементи з синтаксису оператора CREATE PROCEDURE є обов’язковими, а які – необов’язковими?
Яке призначення мають слова DECLARE та VARIABLE при роботі зі зберігаємими процедурами?
В якому випадку перед іменами локальних змінних слід ставити двокрапку?
Для чого призначений оператор SUSPEND?

Зберігаємі процедури, як і тригери, типові лише для клієнт-серверних баз даних. Ті та інші використовують спеціальну алгоритмічну мову.
Кожна зберігаєма процедура, є самостійною програмою, скомпільованою у внутрішню двоїчну мову InterBase, і є частиною метаданих (дані про дані) бази даних. Іншими словами, зберігаємі процедури є частиною бази даних і зберігаються разом з таблицями, індексами і іншими об'єктами БД. Зберігаєму процедуру можна викликати з клієнтського додатка, з іншої зберігаємої процедури, або тригера.
Зберігаємі процедури можуть бути двох типів:
процедури, які виконуються. Вони або взагалі не повертають результатів, а лише виконують якісь дії, або повертають лише один набір вихідних параметрів. Такі процедури викликаються командою EXECUTE PROCEDURE.
процедури вибірки, які призначені для створення багаторядкових вихідних даних. Такі процедури викликаються командою SELECT і використовуються, як віртуальні таблиці.

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

SET TERM <новий_термінатор><старий_термінатор>
CREATE PROCEDURE Ім’я_процедури
[(<вхідний_параметр> <тип_даних>
[,<вхідний_параметр> <тип_даних> []])]
[RETURNS
(<вихідний_параметр> <тип_даних>
[,<вихідний_параметр> <тип_даних> []])]
AS
<тіло_процедури>

<тіло_процедури> =
[DECLARE [VARIABLE] <змінна><тип_даних>; []]
BEGIN
<складений оператор>
END<термінатор>
SET TERM <старий_термінатор><новий_термінатор>

Термінаторами називаються символи закінчення SQL оператора. Установка термінаторов не відноситься безпосередньо до синтаксису зберігаємих процедур або тригерів, проте спроба створення процедури без перевизначення термінатора, швидше за все, приведе до помилки. Річ у тому, що всередині процедури, яка створюється, неодноразово може зустрічатися символ « ; », який за умовчанням є символом кінця оператора в мові SQL. В цьому випадку утиліта IBConsole вирішить, що оператор закінчений, і спробує його виконати. Але процедура ще не буде прочитана до кінця, що і приведе до помилки. Вихід: перевизначити термінатор. Робиться це просто:
SET TERM <новий_термінатор> <старий_термінатор>.

Як новий символ закінчення можна використовувати будь-який рідкий символ, наприклад « ^ » або « & ». Потім в телі процедури може скільки завгодно раз зустрічатися символ « ; », SQL при цьому не сприйме його як закінчення оператора. END, який завершує процедури, слід закрити встановленим вами термінатором, в цьому випадку процедура буде прочитана IBConsole до кінця і виконана без помилок. А насам кінець треба знов перевизначити термінатор, встановлюючи стандартний символ « ; ». Наприклад:
SET TERM ^;
CREATE PROCEDURE ^
SET TERM ;^

Заголовок
Заголовок процедури складається з наступних розділів:
Ім'я процедури – обов'язковий елемент. Ім'я має бути унікальним у всій
базі даних. Приклад:
CREATE PROCEDURE Proc1
Вхідні параметри -

Вхідні параметри - необов'язковий елемент. Вхідні параметри, як і в
процедурах Delphi, служать для передачі в процедуру якихось значень із зовнішнього додатка, іншої процедури або тригера. При цьому типи даних цих параметрів можуть бути будь-якими, визначеними в SQL, окрім масивів. Параметри оголошуються у вигляді списку «параметр тип», декілька параметрів розділяються комі. Імена вхідних параметрів процедури не зобов'язані відповідати іменам параметрів додатка, який їх викликав, але типи даних повинні збігатися. Приклад:

CREATE PROCEDURE Proc2
(perem1 Integer, perem2 Float, perem3 Date)

Вихідні параметри - необов'язковий елемент. Вихідні параметри служать
для повернення в додаток, який їх викликав, списку результуючих значень. Оголошення вихідних параметрів (якщо вони є), починається ключовим словом RETURNS, після якого в дужках параметри перераховуються у вигляді списку «параметр тип». Приклад:
CREATE PROCEDURE Proc3
(vhod_param1 Integer)
RETURNS (vihod_param1 Double, vihod_param2 Varchar(10))

Ключове слово AS - обов'язковий елемент, який вказує на завершення
заголовка процедури. Приклад:
CREATE PROCEDURE Proc4
RETURNS (param char(50))
AS

Тіло процедури
Зберігаємі процедури, як і процедури в Delphi, можуть мати локальні змінні, або не мати їх. Якщо локальних змінних немає, тіло процедури є лише складеним оператором, ув'язнений в дужки BEGIN ... END. Причому ці дужки обов'язкові, навіть якщо в процедурі всього лише один оператор.
Якщо ж локальні змінні є, то спочатку їх потрібно оголосити після ключових слів DECLARE VARIABLE, після чого йде складений оператор. При цьому слід пам'ятати, що оголошення кожної змінної є окремим оператором і повинне завершуватися крапкою з комою. Приклад:

SET TERM ^;
CREATE PROCEDURE MyProc (param1 Integer)
RETURNS (param2 Varchar(20), param3 Double Precision)
AS
DECLARE VARIABLE perem1 Varchar(10);
DECLARE VARIABLE perem2 Date;
DECLARE VARIABLE perem3 Integer;
BEGIN

END^
SET TERM ;^
В наведеному прикладі спочатку перевизначається термінатор, після чого здійснюється опис процедури. У процедурі є один вхідний і два вихідних параметри, а також оголошені три локальні змінні. Відмітимо, що ключове слово DECLARE обов'язкове, а слово VARIABLE можна опустити. Якщо є бажання, щоб база даних була сумісна з ранніми версіями InterBase, то VARIABLE краще вказувати. Завершується процедура новим термінатором « ^ », після чого він перевизначається на стандартний символ « ; ».

Блок кода процедури
Блок кода процедури починається ключовим словом BEGIN, та завершується ключовим словом END. Блок кода може складатися з одного або декількох операторів, а також містити вкладені блоки коди BEGIN ... END.

У блоці кода процедури можуть зустрічатися:
оператори привласнення, які привласнюють значення локальним змінним, вхідним або вихідним параметрам (на відміну від оператора «:=» в Delphi, в SQL це просто знак рівне «=»);
оператори SELECT для вибірки даних з таблиць. Результати вибірки можуть привласнюватися змінним або параметрам;
цикли, такі як FOR і WHILE;
керуючі структури IF;
оператори EXECUTE PROCEDURE для виклику іншої зберігаємої процедури;
коментарі, ув’язнені в дужки /* . */ ;
символи порівняння >= >, <= <, <> =, !< (не менше), !> (не більше), != (не рівно);
команди модифікації таблиць, такі як INSERT, UPDATE або DELETE;

Важливо знати! Якщо в блоці кода локальні змінні використовуються всередині SQL-оператора (наприклад, SELECT), перед їх іменами слід ставити двокрапку. У інших операторах цього робити не потрібно.

Оператор привласнення
Оператор привласнення має вигляд
<змінна/вихідний параметр> = <вираз>
і служить для привласнення локальній змінній або вихідному параметру якого-небудь значення. Тут є декілька правил. По-перше, змінна або вихідний параметр повинні мати сумісний тип даних з виразом. По-друге, перед ім'ям змінної або вихідного параметра двокрапка не ставиться. По-третє, в InterBase вираз може бути або рядковим, або арифметичним. У першому випадку вираз може містити оператор конкатенації (об'єднання) рядків « || », в другому випадку - чотири арифметичних оператори +, - * і /. Окрім цього, вираз може містити значення однотипних стовпців таблиць, або результат роботи іншої процедури.

Умовний оператор IF THEN ELSE
На відміну від Delphi, в InterBase умовний вираз оператора IF обов'язково потрібно поміщати в колові дужки, крім того, перед ELSE крапка з комою не опускається:
IF (<умовний_вираз>) THEN <оператор_1>; [ELSE <оператор_2>]
Як завжди, якщо <умовний_вираз> повертає істину, то виконується <оператор_1>, інакше виконується <оператор_2>. Приклад:

IF (KOLVO>5 AND KOLVO<10) THEN ;

Треба відмітити, що пріоритет операцій порівняння вищий, ніж логічних операцій AND, OR і NOT, тому при використанні більш ніж однієї умови немає необхідності брати кожне з них в окремі дужки. Альтернативний варіант ELSE не є обов'язковим і може бути опущений.

Оператор SELECT
Зберігаєма процедура може містити оператор SELECT для виведення одного або декількох значень і привласнення цих значень локальним змінним або вихідним параметрам. Приклад:

CREATE TABLE TOVAR (
ID INTEGER NOT NULL,
NAZVANIE VARCHAR(20) NOT NULL COLLATE PXW_CYRL,
STOIMOST DOUBLE PRECISION NOT NULL);
COMMIT;

CREATE VIEW TOVARY20(NAZ, KOL, CENA) AS
SELECT NAZVANIE, KOLVO, STOIMOST
FROM TOVAR, SKLAD
WHERE (SKLAD.ID_TOVAR = TOVAR.ID)
AND (TOVAR.STOIMOST <= 20);
Дане представлення створює три стовпці: назва товару, кількість цього товару на складі і його вартість. Причому виводяться лише ті товари, вартість яких не перевищує 20. Параметр [WITH CHECK OPTION] тут не вказується, оскільки дане представлення за визначенням є «лише для читання». Після створення кожної таблиці вказується оператор COMMIT, який, підтверджує і завершує попередню транзакцію.
SELECT * FROM TABLE_FIRMA
INTO :fam, :imya, :otch

Таблиця TABLE_FIRMA містить три текстові поля, що містять прізвище, ім'я і по-батькові співробітника. У прикладі береться перший запис таблиці, і значення його полів привласнюються локальним змінним (або вихідним параметрам) fam, imya і otch. Проте типовішим є вживання цього оператора з умовою вибірки, що повертає лише одне значення:
CREATE TABLE SKLAD (
ID INTEGER NOT NULL,
ID_TOVAR INTEGER NOT NULL,
KOLVO INTEGER NOT NULL);
COMMIT;

SELECT MAX(KOLVO) FROM SKLAD
INTO :p_kolvo

Цикл FOR SELECT та SUSPEND
Часто буває недостатньо здобуття даних лише одного запису. Щоб отримати безліч значень (віртуальну таблицю), використовується оператор FOR, що має наступний синтаксис:
FOR SELECT <умова_відбору>
INTO <список_змінних/параметрів> DO <оператор>

Тут <умова_відбору> - будь-яка умова оператора SELECT.
<список_змінних/параметрів> - список локальних змінних або вихідних параметрів, тип даних яких відповідає типу даних, отриманих командою SELECT.
<оператор> - оператор циклу, що виконується. Зазвичай цим оператором буває оператор SUSPEND, який поміщає отриманий запис в буфер (кеш), і вимагає отримання наступного запису, і так до тих пір, поки не завершиться цикл. Така конструкція дозволяє отримувати не один запис, а набір записів, який повертається у вигляді віртуальної таблиці. Такі процедури називаються процедурами вибірки, і викликаються як звичайні таблиці.
Оператор SUSPEND застосовується лише в зберігаємих процедурах вибірки, в тригерах він неприпустимий. У процедурах, які виконуються, користуватися цим оператором синтаксично не заборонено, проте робити цього не варто - всі подальші після SUSPEND оператори не будуть виконані. Замість цього у процедурах, які виконуються, зазвичай застосовують явну команду дострокового виходу EXIT. Приклад:
CREATE TABLE Sdelki (
ID INTEGER,
TOVAR VARCHAR(20),
ED_IZM VARCHAR(7),
STOIMOST DOUBLE PRECISION,
KOLVO SMALLINT,
SUMMA COMPUTED BY (STOIMOST * KOLVO))

FOR SELECT TOVAR, KOLVO FROM TABLE SDELKI
INTO :param_st, :param_int
DO SUSPEND;

У даному прикладі вихідним параметрам param_st і param_int привласнюються значення полів Tovar і Kolvo першого запису, після чого викликається оператор SUSPEND і процедура призупиняється. Дані передаються в програму, яка їх викликала, після чого процедура так само обробляє другий запис. І так до кінця таблиці. Для програми, яка викликала їх, все виглядає так, ніби викликалася таблиця, а не зберігаєма процедура. Проте часто процедури вибірки виконуються набагато швидше, ніж такий же запит з клієнтського додатка, адже процедура - це скомпільована підпрограма, яка виконується на стороні сервера.
Слід зазначити, що вживання цього циклу не обмежується лише оператором SUSPEND. Можна встановити там будь-якого оператора, або декілька операторів, помістивши їх в дужки BEGIN ... END. Наприклад, в тілі циклу можна перевіряти значення полів на будь-яку умову, і якщо умова не вірна, виправити запис.

Цикл WHILE DO
Цей цикл є аналогічним тому, що використовується в Delphi:
WHILE (<умова_цикла>) DO
<оператор>

Умова циклу має бути поміщене в колові дужки. Оператор може бути складеним, поміщеним між BEGIN і END. Крім того, в тілі оператора може зустрічатися команда EXIT, яка служить для примусового завершення роботи процедури. У тригері оператор EXIT не застосовується.

























13 PAGE \* MERGEFORMAT 148215




 (*¤єМО
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ѕь
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Т
·Т
·
·
·
·
·
·
·
·
·
·
·Т
·Т
·
·
·
·
·
·
·
·
·
·  0>DV`p†ґ¶
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Рисунок 7Рисунок 11Рисунок 12Рисунок 13Рисунок 14Рисунок 15Рисунок 17Рисунок 20Рисунок 21Рисунок 22Рисунок 19Рисунок 20Рисунок 23Рисунок 24Рисунок 28Рисунок 29 Заголовок 2 Заголовок 3 Заголовок 4 Заголовок 515