Лекція № 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), користувач має можливість вказати, чи слід автоматично виконувати для зв’язаних записів операції каскадного оновлення і каскадного видалення. Якщо встановити відповідні прапорці, стануть можливими операції видалення і оновлення, які інакше будуть заборонені умовами цілісності даних. Тут йдеться про видалення запису з головної таблиці (каскадне видалення) або зміну значення поля, що бере участь у зв’язку, в основній таблиці (каскадне оновлення).
Залежно від установки прапорців каскадних операцій реалізуються два способи підтримки посилальної цілісності при модифікації даних в основній таблиці. Якщо встановлено прапорець каскадного видалення, то при видаленні запису з головної таблиці будуть також видалені всі зв’язані записи з підлеглої таблиці. Наприклад, при видаленні магазину автоматично буде видалено всю інформацію про продажі в цьому магазині. При каскадному оновленні зміна значення поля зв’язку в головній таблиці приводить до відповідної зміни значення зовнішнього ключа в підлеглій таблиці.
Другий спосіб підтримки посилальної цілісності полягає в забороні каскадних операцій (відповідні прапорці не встановлено). Не можна видалити запис з головної таблиці, якщо в підлеглій таблиці є пов’язані з ним записи. Аналогічно не можна буде змінити значення ключового поля в головній таблиці. Для того щоб все ж таки видалити запис із головної таблиці, потрібно спочатку видалити з підлеглої таблиці пов’язані з нею записи, а потім видалити запис із головної таблиці.