Лекція № 8. ПРОГРАМА СУБД ЯК КОМПОНЕНТ МІС. ОСНОВИ РОБОТИ З РЕЛЯТИВІСТСЬКИМИ БД.

Проблема обробки великих обсягів інформації вже давно є однією з найболючіших проблем організації системи охорони здоров’я України. У структурі майже кожного лікувального за­кладу існує низка центрів, куди надходить інформація, яку слід зберігати та обробляти. Для прикладу розглянемо звичайний лі­кувальний заклад районного рівня. Тут питання обробки та збері­гання великого обсягу інформації виникають, наприклад, при:

— проведенні загальної реєстрації пацієнтів;

— веденні історії хвороби пацієнтів кожним лікарем;

— веденні архіву лікувального закладу.

Тривалий час вважалося, що подібні питання складно ме­ханізувати. Як носій інформації використовували папір, як обробник інформації — великий інтелектуальний потенціал працівників лікувальних закладів. Реєстратура з величезними стелажами та картотеками стала одним із символів лікувально­го закладу. Та ось на початку 90-х років XX ст. у лікувальних закладах України з’явилися перші ПК. Одне з перших завдань, над яким вони працювали, — це оптимізація роботи реєстрату­ри. Для його реалізації використовували системи управління базами даних (СУБД). Не можна сказати, що на сьогодні за­вдання організації реєстратури, як і довільне інше завдання баз даних у структурі лікувального закладу, розв’язане остаточно. Тому знання теорії баз даних та відповідні навички розробки реляційної моделі баз даних майбутнього лікаря спрямовані на вирішення актуальних проблем вибору оптимальних способів зберігання та обробки великих обсягів даних у роботі лікуваль­ного закладу.

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

Серед існуючих типів моделей даних (ієрархічна, мережева і ре- ляційна) розглянемо лише реляційну структуру організації даних. Реляційна модель даних припускає презентацію даних лише в один спосіб, а саме у вигляді таблиць. Кожний рядок таблиці містить ін­формацію, що стосується деякого конкретного об’єкта. Ця інфор­мація є набором фактів, при цьому в стовпчику (його називають та­кож атрибутом або полем) міститься конкретний факт. Стовпчики мають заголовки (імена). Оскільки порядок стовпчиків вважається невизначеним, то їх імена є єдиним засобом доступу до відповідно­го факту. Наприклад, таблиця Співробітники може мати колонки з іменами ПІБ співробітника і Телефон, що припускає наявність у цих колонках інформації про прізвище і телефон співробітника від­повідно. Зазвичай СУБД не в змозі відстежувати порушення сенсу інформації. Єдине, що може перевірити система при введенні інфор­мації, — це тип даних, які вводяться, оскільки для кожного стовп­чика тип даних визначається при створенні таблиці. При спробі ввести інформацію, тип якої не сумісний з типом даних стовпчика, буде отримано повідомлення про помилку перетворення типу.

Технологію організації, ведення та обробки медичних даних засобами реляційної бази даних MS Access розглянемо на кон­кретному прикладі.

Демонстраційний приклад

Створимо базу даних «Облік пацієнтів» медичного центру «Надія».

База даних має забезпечити виконання таких завдань:

— уведення і редагування інформації про пацієнтів, які звер­таються за медичною допомогою;

— оформлення медичних карток пацієнтів;

— реєстрація надання медичних послуг пацієнтам (із зазна­ченням виду послуги, дати, вартості (якщо послуга платна) та лікарів, які супроводжують пацієнтів);

— друк звітів про надання послуг та отриманий прибуток, прайсів тощо;

— візуалізація результатів діяльності медичного центру у вигляді діаграм і графіків;

— автоматизація звітних операцій (наприклад, формування звітів про прийом і надання послуг пацієнтам за певний пе­ріод, категорії хворих, обстеження тощо);

— забезпечення захисту від уведення неправильних даних (зокрема, дат у різних форматах), випадкових помилок.

Спочатку створимо нову базу даних «Облік пацієнтів» (див. додаток 5).

При створенні бази даних на екрані з’являється головне її вік­но (рис. 13). Головне вікно бази даних має низку вкладок, кожна з яких містить відповідні об’єкти бази даних (форми, звіти, запити тощо) і стандартні кнопки Открыть, Конструктор, Создать. Крім цих кнопок безпосередньо у вікні наявні кілька гіперпоси- лань для швидшого вибору команди створення об’єкта. Як пра­вило, це створення об’єкта за допомогою майстра та режиму конструктора. На рис. 13 у вікні бази даних відкрита вкладка Таблицы, тому після натискання на одну з цих кнопок або гіпер- посилання виконуватиметься відповідна операція для таблиці.

Для створення таблиці бази даних у вікні бази даних пере­йдемо до вкладки Таблицы, виберемо гіперпосилання Создание таблицы в режиме конструктора.

Вікно конструктора таблиць зображене на рис. 14. Це вікно розбите на дві частини. У верхній частині вікна в стовпчику Имя поля вводимо імена полів (до 64 символів з урахуванням пропус­ків), у сусідньому стовпчику зі списку вибираємо тип даних. У стовпчику Описание можна ввести пояснювальний текст.

У нижній частині вікна конструктора таблиць можна задати (або змінити) властивості полів. Пояснимо призначення деяких з них.

Маска ввода дає змогу обмежити допустимі значення даних, що вводяться в це поле. Наприклад, якщо поле призначене для зберігання індексу населеного пункту, то за допомогою маски можна заборонити введення нецифрової інформації і простежити за тим, щоб було введено лише шість цифр. Крім того, маска при­скорює введення за рахунок незначущих символів (роздільники дати, номери телефонів та ін.). Докладну інформацію про спеціальні символи маски можна отримати з довідки, натиснувши кла­вішу F1, коли курсор міститься в полі властивості Маска ввода. Для прикладу наведемо маску для індексу населеного пункту:

0. Символ «0» означає обов’язкову цифру, а отже, допусти­мими символами є цифри від 0 до 9, причому їхня кількість має дорівнювати шести.

Подпись — текст, уведений у це поле, використовуватиметься як заголовок стовпчика в режимі Таблица.

Значение по умолчанию — значення, уведене в це поле, авто­матично підставлятиметься в дані поля таблиці при додаванні но­вого запису.

Условие на значение — Microsoft Access автоматично накла­дає умови на значення, які визначаються типом даних поля; на­приклад, не допускається введення нечислових символів у число­ві поля. Ця властивість дає можливість вказати логічний вираз, який перевірятиметься при редагуванні або введенні нової інфор­мації в дане поле таблиці. У разі порушення цієї умови (якщо зна­чення логічного виразу помилкове) з’явиться повідомлення про помилку. Зберегти запис не вдається доти, доки значення не буде приведено у відповідність до вказаної умови.

Сообщение об ошибке — повідомлення, яке з’являтиметься в разі порушення умови на значення (див. вище) при введенні ін­формації в поле таблиці. Якщо не ввести текст повідомлення, то повідомлення про помилку матиме стандартну форму. Рекомен­дується використовувати цю властивість, щоб інформувати ко­ристувача про характер допущеної ним помилки при введенні даних у таблицю.

Обязательное поле. Ця властивість може мати одне з двох значень —Да/Нет. Якщо поле визначити обов’язковим, то не можна буде зберегти запис з незаповненим значенням у цьому полі. Уведіть значення Да в це поле, якщо наявність даних в полі таблиці необхідна для правильного функціонування додат­ку. Наприклад, обов’язковими можна вважати поля, що містять дані про ім’я пацієнта, дату його прийому, ціну послуги тощо. Незаповненому полю запису відповідає спеціальний маркер, який називається NULL-значенням і відповідає відсутності ін­формації або непридатності властивості об’єкта, описуваного значенням цього поля.

Индексированное поле. Ця властивість має одне з трьох зна­чень: Нет; Да (допускається збіг) і Да (збіг не допускається). Ін­дексовані поля в таблиці прискорюють пошук і сортування в полі, але уповільнюють збереження інформації. Детальніший опис призначення індексованих полів подано у додатку 5.

На вкладці Подстановка у властивостях поля можна вибрати той елемент управління, який застосовуватиметься для введення або редагування інформації в режимі таблиці або на формі при ви­користанні майстра створення форм. Цими елементами, напри­клад, можуть бути поле, поле зі списком, список.

Крім властивостей полів можна також задати властивості, що стосуються до таблиці в цілому. Для цього потрібно в контекстно­му меню або в меню Вид вибрати команду Свойства ( рис. 15).

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

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

Властивість Порядок сортировки визначає порядок сортуван­ня записів у таблиці. Значення цієї властивості задається за допо­могою рядкового виразу, що містить імена полів, за якими прово­диться сортування записів. Якщо вказано декілька імен, потрібно розділяти їх комою (,). Якщо в значенні властивості задані імена одного або декількох полів, буде виконано сортування за зростан­ням. Для сортування записів за спаданням після імені відповід­ного поля слід ввести ключове слово DESC.

Визначення ключових полів

Завершимо знайомство з конструктором таблиць визначен­ням ключових полів. Щоб створити поле первинного ключа, по­трібно виділити рядок (або декілька рядків) з ім’ям цього поля в режимі конструктора таблиць і виконати команду Правка/ Ключевое поле. Щоб анулювати первинний ключ, виконайте цю команду ще раз. Ключове поле завжди індексоване, причому по­втори не допускаються.

MS Access допомагає формально виконати нормалізацію таб­лиць. Після створення таблиці можна скористатися однією із сервісних програм, так званими майстрами (в оригіналі — Wizard). Для цього потрібно виконати команду Сервис І Анализ І Таблица. Майстер розбиває таблицю, створену з порушенням умов нормальності, на ряд таблиць, зв’язаних за допомогою зов­нішніх ключів.

Поле зовнішнього (або вторинного) ключа утворюється при зв’язуванні полів двох таблиць. Поля, за якими виконується зв’язування таблиць, мають бути такими ж. Не можна, напри­клад, встановити зв’язок між числовим і текстовим полем. Якщо при встановленні зв’язку використовується поле з типом даних Счетчик, то пов’язуване з ним поле має бути числовим, для якого властивість Размер матиме значення довге ціле. З двох таблиць, які зв’язуються, одна є головною, а інша — підлеглою. Поле зо­внішнього ключа міститься в підлеглій таблиці і слугує тут пред­ставником поля головної таблиці, яке в останній має бути або пер­винним ключем, або мати унікальний індекс. Ця вимога підтвер­джує принципову неможливість створення зв’язку типу «багато до багатьох» між двома таблицями в реляційній моделі.

Щоб встановити зв’язки між таблицями, потрібно виконати команду Сервис/Схема данных. Потім за допомогою контекстного меню або меню Связи/Добавить таблицу додаємо до макета схе­ми даних усі необхідні таблиці. Вказівником миші перетягуємо поле з головної таблиці на відповідне йому поле підлеглої табли­ці- У діалоговому вікні, що з’явилося (рис. 16), слід відзначити, чи потрібно забезпечити цілісність даних. Якщо так, то зазначи­ти характер цілісності даних, після чого натиснути на ОК.

Тип відношення «один до багатьох» означає, що кожному за­пису, який визначається первинним ключем, відповідає довільна кількість записів зв’язаної таблиці (зокрема, і жодного). Напри­клад, на рис. 16 подано зв’язок між таблицями Співробітники і Пацієнти, що означає наявність для одного співробітника до­вільної кількості записів, які фіксують у базі даних інформацію про пацієнтів цього співробітника.

Тип відношення «один до одного» означає, що одному запису з основної таблиці відповідає один запис або жодного в підлеглій таблиці.

Забезпечення цілісності даних забороняє зберігати в підлеглій таблиці додані або редаговані записи, для яких відсутнє відповід­не значення в ключовому полі головної таблиці. Нагадаємо, що така цілісність називається посилальною.

Якщо встановлено підтримку цілісності даних (прапорець Обес- печение целостности данньїх; див. рис. 16), користувач має мож­ливість вказати, чи слід автоматично виконувати для зв’язаних за­писів операції каскадного оновлення і каскадного видалення. Якщо встановити відповідні прапорці, стануть можливими операції ви­далення і оновлення, які інакше будуть заборонені умовами ціліс­ності даних. Тут йдеться про видалення запису з головної таблиці (каскадне видалення) або зміну значення поля, що бере участь у зв’язку, в основній таблиці (каскадне оновлення).

Залежно від установки прапорців каскадних операцій реалізу­ються два способи підтримки посилальної цілісності при модифіка­ції даних в основній таблиці. Якщо встановлено прапорець каскад­ного видалення, то при видаленні запису з головної таблиці будуть також видалені всі зв’язані записи з підлеглої таблиці. Наприклад, при видаленні магазину автоматично буде видалено всю інформа­цію про продажі в цьому магазині. При каскадному оновленні змі­на значення поля зв’язку в головній таблиці приводить до відповід­ної зміни значення зовнішнього ключа в підлеглій таблиці.

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