Початкова сторінка

Микола Жарких (Київ)

Персональний сайт

?

Пілотна реалізація бази даних “Археометрика”

М.І.Жарких, Ю.Б.Кабаков

Для реалізації викладеного вище проекту нами обрано СУБД Microsoft Access 2.0, яка працює в середовищі Windows.

Простір баз даних

Кожен об'єкт в БД має первісний ключ у вигляді цілого числа. Для забезпечення глобальної унікальності записів в просторі баз даних весь інтервал значень первісного ключа розбито на однакові зони, кожна з яких призначена для роботи одного примірника БД. Ід запису формується з номеру зони (який призначається під час створення нового примірника БД; це створення мусить бути організоване в такий спосіб, щоб забезпечити унікальність номера зони) і номера запису всередині зони (який призначається кожним примірником БД незалежно).

Ми сподівались, що для первісного ключа можна буде використати арифметику 8-байтових цілих чисел (в Access цей тип даних зветься currency), але вона реалізована в Access з помилками, тому нам довелось обмежитись 4-байтовими цілими числами для первісного ключа. Інтервал значень розбито на 8192 зони, в кожній зоні можна створити по 524288 об'єктів. Отже, простір БД складається з 8 тисяч примірників, які можуть функціонувати незалежно і при цьому коректно обмінюватись даними.

Структура зберігання

Структура зберігання, спрощена за рахунок дрібних технічних деталей, показана на наступному малюнку.

Декларації класів зберігаються у таблиці “ДЕКЛАРАЦІЇ”. Таблиця “АТРИБУТИ” зберігає список власних атрибутів кожного класу. Таблиця “СЛОВНИК” містить словникові дані для атрибутів, які є переліками та множинами. Ці таблиці є основними в системі декларування класів об'єктів.

Структура таблиць БД “Археометрика”

Малюнок 3. Структура таблиць БД “Археометрика”.

Таблиця “ОБ'ЄКТИ” зберігає технічну інформацію про екземпляри інформаційних об'єктів : їхні ід-и, належність до класу, дату останньої модифікації та номер версії. Екземпляри атрибутів зберігаються в кількох таблицях, загальна структура яких показана в таблиці “ЕКЗ_АТР”. Кожен запис знає, якому об'єкту він належить, значення якого атрибуту містить; числове поле “дискримінатор” необхідне для того, щоб один об'єкт міг володіти кількома екземплярами одного атрибуту (багатозначні атрибути). Таблиць такого типу є шість : “ТЕКСТИ”, “МЕМО”, “ЦІЛІ ЧИСЛА”, “ДІЙСНІ ЧИСЛА”, “ІСТОРИЧНІ ДАТИ”, “ЗОБРАЖЕННЯ”. Таблиця “ТЕКСТИ” містить значення атрибутів, які є короткими текстами та вказівниками (таке об'єднання обумовлене тим, що практично кожен вказівник вимагає при собі якогось текстового пояснення, яке доцільно зберігати разом із самим вказівником). Таблиця “ЦІЛІ ЧИСЛА” зберігає значення атрибутів, які є цілими числами, переліками та множинами. Інші таблиці зберігають значення атрибутів, типи яких відповідають назвам таблиць.

Таким чином, зберігання об'єкту будь-якої природи здійснюється у фіксованій системі таблиць, яка не вимагає перепроектування.

Декларатор

Декларатор – формуляр, призначений для створення, перегляду і редагування декларацій об'єктів. За його допомогою можна :

– створити нову пусту декларацію класу;

– приєднати даний клас до суперкласу;

– створити список власних атрибутів даного класу;

– створити словник значень для атрибутів, які є переліками або множинами;

– продивитись список власних атрибутів класу, успадкованих атрибутів класу та об'єднаний список атрибутів;

– продивитись список підкласів, успадкованих від даного класу;

– здійснювати пересування по дереву класів за допомогою кнопок “До кореня”, “До господаря”, “До лівого сусіда”, “До правого сусіда”, “До нащадка”;

– знищувати непотрібну декларацію класу.

Після закінчення роботи з декларатором здійснюється, в разі потреби, компіляція декларацій (її можна виконати також примусово за допомогою кнопки “Компілювати декларації”). Декларатор здійснює певні запобіжні заходи, які спрямовані на підтримання цілісності БД. Він зокрема забороняє :

– знищувати декларацію класу, коли в ньому разом з підкласами є екземпляри;

– змінювати суперклас для класу, коли в ньому разом з підкласами є екземпляри;

– якщо в БД є екземпляри атрибута, то для нього заборонено знищення, зміна типу значення або кількісних обмежень (для вказівника – також зміна класу об'єкта-цілі).

Діаграма класів

Для наочного представлення декларацій класів та ієрархічних відношень між ними створено спеціальний формуляр “Діаграма класів”. Він змальовує класи у вигляді прямокутників з іменами класів, а зв'язок між класом та суперкласом – у вигляді прямої лінії. Формуляр дозволяє переміщати класи, щоб розмістити їх у найбільш зручний спосіб; це розташування запам'ятовується і використовується при наступному відкритті формуляру.

Треба відзначити, що Access не дає зручного апарату для здійснення таких функцій. Не можна не пошкодувати, що з Access Basic-а ми не маємо доступу до програмних об'єктів, які забезпечують дуже зручне та наочне представлення зв'язків між таблицями (вікно Relationships).

Універсальний редактор об'єктів

Для створення і редагування екземплярів об'єктів слугує формуляр “Універсальний редактор об'єктів”. Робота з ним починається з вибору класу об'єктів, з яким ми будемо працювати, за допомогою списку вибору, який містить всі задекларовані класи. Після того як клас визначено, формуляр показує наявні об'єкти даного класу (але не його підкласів), пересування між якими здійснюється стандартним для Access способом. Окрім того, стає доступною кнопка створення нових об'єктів даного класу.

Всі атрибути об'єкту розділено між 10 підформулярами, кожен з яких надає доступ до атрибутів певного типу : коротких текстів, довгих текстів, цілих чисел, дійсних чисел, переліків, множин, вказівників, графічних образів та історичних дат. В окремому підформулярі перелічено об'єкти, які посилаються на даний об'єкт.

Створення нового екземпляру атрибута в кожному з підформулярів починається з вибору атрибута зі списку вибору (адже об'єкт може мати кілька різних атрибутів типу, скажімо, “короткий текст”). Подальший сценарій залежить від типу атрибута : короткі тексти, довгі тексти, цілі числа, дійсні числа вводяться і редагуються безпосередньо в тому віконці, де ми їх бачимо, стандартними засобами Access. Щоб надати значення атрибуту-вказівнику, ми розкриваємо список екземплярів об'єктів того класу, на який може вказувати даний вказівник. В цьому списку представлено множину екземплярів класу разом з підкласами у вигляді логічних імен екземплярів. Вибравши з цього списку об'єкт-ціль, ми додаємо текст вказівника як звичайний короткий текст.

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

Для введення та зміни графічних образів треба вибрати з меню “Редагування” команди “Вставити об'єкт” або “Зв'язки”. Обидві команди викликають стандартні діалоги роботи з OLE-об'єктами, на яких ми не зупиняємося.

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

Підформуляри коротких текстів, довгих текстів та вказівників забезпечують користувачеві можливість вибору шрифтової системи, якою записано текст. Наразі підтримуються дві системи – кирилична та європейська. Вони розрізняються виглядом літер з кодами 128..255. В кириличній системі там основне місце займають літери кирилиці, в європейській системі – літери європейських алфавітів з діакритичними знаками. Використання кириличної системи дозволяє коректно писати українською, російською, білоруською, болгарською мовами (для сербської мови та для кириличної графіки тюркських мов представлено не всі літери). Європейська система дозволяє правильно писати польською, чеською, німецькою, шведською, французькою, іспанською, румунською, турецькою мовами (англійська, італійська, латинська мови не вживають діакритичних символів і виглядають однаково в обох системах). Ми вважаємо цю можливість важливою для майбутніх користувачів-науковців, які працюють з літературою європейськими мовами. Як не дивно для програм в системі Windows, ця можливість не є простою і не реалізована в стандартному Access-і.

Закладки

Переглядаючи об'єкти в універсальному редакторі, користувач може вручну відзначити деякі об'єкти, що становлять для нього спеціальний інтерес, для того, щоб пізніше продовжити роботу з ними. Факт відзначення об'єкту ми називаємо закладкою (об'єкт відзначено закладкою). Об'єкт із закладкою візуально виділяється зміною кольору фону для заголовка універсального редактора. Робота з закладками здійснюється через меню “Закладки”. За допомогою команд цього меню користувач може встановити або зняти закладку з даного запису, перемістити фокус до наступного або попереднього об'єкту даного класу з закладкою, примусити редактор показувати тільки записи, відмічені закладками (або навпаки – всі записи класу), анулювати всі раніше встановлені закладки.

Закладки спроектовано у такий спосіб, що в локальній мережі кожен користувач БД бачить тільки ті закладки, які встановлені ним особисто; його дії не зачіпають закладок, встановлених іншими користувачами. Кожен об'єкт може бути позначений закладками кількох користувачів – вони не заважають одна одній (окрім випадку, коли два користувача намагаються одночасно редагувати один запис – в цьому випадку працює стандартний механізм Access для блокування записів).

Універсальний пошук об'єктів

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

У ньому користувач перш за все задає клас об'єктів, для яких буде виконуватись пошук. Далі можна встановити, чи буде пошук поширюватись на екземпляри підкласів. Додатково можна обмежити область пошуку тільки відкладеними об'єктами. Віконце “Число об'єктів” показує, скільки об'єктів належить до встановленої області й буде переглянуто під час пошуку.

У підформулярі “Умови” користувач може задати одночасно кілька умов на атрибути. Вони з'єднуються між собою логічною операцією “ТА” : відібрано буде об'єкт, атрибути якого одночасно задовольняють всім поставленим умовам. Для формулювання умов користувач має список атрибутів класу, з якого треба вибрати необхідний атрибут, і поле умови. Редагування умови здійснюється в окремому формулярі “Редактор умов”, який відкривається, коли користувач натискає клавішу в полі умови або двічи клацає по ньому мишкою. Редактор умов пропонує користувачеві вибрати операцію порівняння та задати для неї аргументи (або два аргументи для операцій типу “значення атрибуту X лежить між А та В”). Список операцій включає стандартні операції порівняння, операції, специфічні для текстових значень (“Х починається з А”, “Х містить А”). Він також буде містити операції, специфічні для історичних дат (вони поки що не реалізовані).

Задавши всі потрібні умови, користувач натискає кнопку “Виконати відбір”. Рядок стану Access демонструє при цьому хід виконання операції. Після закінчення відбору логічні імена відібраних об'єктів з'являються в окремому підформулярі “Відібрані об'єкти”. Тепер стають активними кнопки “Спочатку” (нею зроблений відбір анулюється) та “Відкладені + відібрані” (ця кнопка помічає закладками відібрані записи).

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

Універсальні звіти

В базу даних включено три універсальних звіти. Звіти “Число об'єктів в базі даних” призначено для відстежування ходу наповнення бази. Він містить перелік класів об'єктів і для кожного класу дає число власних об'єктів, число об'єктів у підкласах та загальне число об'єктів. Звіт також підраховує загальне число всіх об'єктів у всіх класах.

Звіт “Декларації об'єктів” призначено для документування архітектури класів. Він для кожного класу подає установки, зроблені в деклараторі, в тому числі перелік власних атрибутів (ім'я, тип даних, обмеження кількості). Подає також перелік підкласів, які утворено безпосередньо на основі даного класу.

Звіт “Універсальний друк об'єктів” дозволяє користувачеві вказати, які саме об'єкти треба надрукувати (об'єкти, відмічені закладками; всі об'єкти певного класу чи всі об'єкти БД), до деякої міри управляти сортуванням об'єктів (по умовчанню об'єкти відсортовано за іменем класу, а всередині класу – за логічним іменем екземпляру). Окремий вимикач дозволяє відключити друкування графічних атрибутів, якщо вони непотрібні (це економить час). Для кожного об'єкту в універсальному друці виводиться логічне ім'я, а після нього – список пар “атрибут – текстове значення атрибуту” для всіх атрибутів об'єкта. Для графічних атрибутів замість текстового значення виводиться зображення.

Чого немає в даній версії

БД “Археометрика” версії 1 не містить ніяких установок, які були б прив'язані до конкретної архітектури об'єктів, за одним винятком. Логічні імена екземплярів формуються функцією ObjLogName, яка одержує ід класу та ід екземпляру і повертає текст логічного імені. Тіло цієї функції треба запрограмувати для конкретних класів, що будуть створені. В термінології об'єктного програмування дана функція є віртуальним методом (тобто методом, що присутній в усіх класах, але зміст якого визначається в кожному конкретному класі окремо). Access не дає нам майже ніякого інструментарію для підтримки таких властивостей (використання функції Eval для даної цілі є занадто громіздким і непрозорим). Тому тіло цієї функції треба доповнювати після створення нового класу.

Не реалізовано в даній версії ніякі операції над історичними датами, окрім введення, редагування та текстового форматування. Не реалізовано можливість об'єднання інформації з різних примірників БД. Немає апарату управління примірниками БД, необхідного для адміністрування простором баз даних.

Універсальний редактор об'єктів є громіздким і не дуже зручним у користуванні. Ми не розглядаємо його як засіб для повсякденного наповнення й редагування об'єктів – для цього для кожної спеціальної архітектури об'єктів треба створювати спеціалізовані формуляри, які зможуть врахувати особливості візуального представлення інформації, звичні для фахівців у певній галузі знань. Універсальний редактор потрібний для того, щоб створити кілька перших об'єктів нового класу, на яких можна переконатись у коректності декларації класу. Ці перші кілька об'єктів можна використати для відлагодження спеціалізованих формулярів. Повна незалежність структури зберігання інформації від її зовнішнього представлення є основною перевагою БД “Археометрика”.