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

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

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

?

Приклад : королі та графи

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

Розглянемо процес проектування та реалізації БД реляційними засобами та засобами БД “Археометрика” на простому прикладі.

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

Перший варіант структури таблиць

Малюнок 1. Перший варіант структури таблиць.

З реляційною СУБД ми створюємо дві таблиці :

таблиця КОРОЛІ

Ід : лічильник;

Ім'я : рядок[100 знаків];

кінець таблиці {КОРОЛІ}

таблиця ГРАФИ

Ід : лічильник;

Сюзерен : довге ціле;

Ім'я : рядок[100 знаків];

Є_Графом : логічне {ТАК – для графа; НІ – для герцога}

кінець таблиці {ГРАФИ}

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

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

З використанням “Археометрики” треба задекларувати один клас :

клас ФЕОДАЛ {не має суперкласу}

Ім'я : короткий текст;

Сюзерен : вказівник на ФЕОДАЛа {для короля, що не має сюзерена – порожнє значення};

Титул : перелік (Король, Герцог, Граф) {в дужках перелічено елементи}

кінець класу {ФЕОДАЛ}

Ця структура також забезпечує кожного графа сюзереном.

Другий варіант структури таблиць

Малюнок 2. Другий варіант структури таблиць.

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

З реляційною БД нам треба зробити принаймні дві речі : по-перше, змінити тип даних для поля “Є_Графом” з таблиці “ГРАФИ”, оскільки титулів тепер є не два, а більше. Цей тип можна змінити на “ціле число” (щоб кодувати титул числом) або на “рядок” (щоб зберігати титул у текстовому вигляді) – в обох випадках треба здійснювати перетворення вже введеної інформації, що далеко не просто.

По-друге, треба додати таблицю “БАРОНИ” (структура її подібна до таблиці “ГРАФИ”) і встановити ієрархічне відношення :

А як цю зміну здійснити в “Археометриці” ? Може здаватися неймовірним, але для цього достатньо додати два рядки в словник переліку для атрибуту “Титул”. Додаємо рядки “Маркграф” та “Барон” і продовжуємо наповнювати БД без будь-яко? трансформації даних, що вже введені.

А якщо далі з'ясується, що непогано було б додати роки правління кожного феодала, причому про короля Гороха відомо, що він правив десь у другій чверті 9 ст., а про герцога Капусту – що він народився не раніше кінця 920-х років і не пізніше 13 липня 934 року – то одразу стане ясно, що без типу даних “історична дата”, який пропонує “Археометрика”, не обійтись.