Приклад : королі та графи
М.І.Жарких, Ю.Б.Кабаков
Розглянемо процес проектування та реалізації БД реляційними засобами та засобами БД “Археометрика” на простому прикладі.
Припустимо, нам треба створити базу даних з феодальної ієрархії. Вона повинна містити дані про королів, які характеризуються іменами, та герцогів і графів, кожен з яких має ім'я, титул та є васалом певного короля.
Малюнок 1. Перший варіант структури таблиць.
З реляційною СУБД ми створюємо дві таблиці :
таблиця КОРОЛІ
Ід : лічильник;
Ім'я : рядок[100 знаків];
кінець таблиці {КОРОЛІ}
таблиця ГРАФИ
Ід : лічильник;
Сюзерен : довге ціле;
Ім'я : рядок[100 знаків];
Є_Графом : логічне {ТАК – для графа; НІ – для герцога}
кінець таблиці {ГРАФИ}
і встановлюємо між цими таблицями ієрархічне відношення “один до багатьох”, так що для кожного графа поле “сюзерен” містить ід короля :
Згідно з цією структурою кожен граф мусить мати сюзерена-короля, і при цьому тільки одного. Така структура повністю відповідає первісній задачі.
З використанням “Археометрики” треба задекларувати один клас :
клас ФЕОДАЛ {не має суперкласу}
Ім'я : короткий текст;
Сюзерен : вказівник на ФЕОДАЛа {для короля, що не має сюзерена – порожнє значення};
Титул : перелік (Король, Герцог, Граф) {в дужках перелічено елементи}
кінець класу {ФЕОДАЛ}
Ця структура також забезпечує кожного графа сюзереном.
Нехай тепер ми хочемо розширити первісну БД : по-перше, з'ясувалось, що васалами королів можуть бути ще й маркграфи; по-друге, необхідно описувати баронів, які є васалами графів.
З реляційною БД нам треба зробити принаймні дві речі : по-перше, змінити тип даних для поля “Є_Графом” з таблиці “ГРАФИ”, оскільки титулів тепер є не два, а більше. Цей тип можна змінити на “ціле число” (щоб кодувати титул числом) або на “рядок” (щоб зберігати титул у текстовому вигляді) – в обох випадках треба здійснювати перетворення вже введеної інформації, що далеко не просто.
По-друге, треба додати таблицю “БАРОНИ” (структура її подібна до таблиці “ГРАФИ”) і встановити ієрархічне відношення :
А як цю зміну здійснити в “Археометриці” ? Може здаватися неймовірним, але для цього достатньо додати два рядки в словник переліку для атрибуту “Титул”. Додаємо рядки “Маркграф” та “Барон” і продовжуємо наповнювати БД без будь-яко? трансформації даних, що вже введені.
А якщо далі з'ясується, що непогано було б додати роки правління кожного феодала, причому про короля Гороха відомо, що він правив десь у другій чверті 9 ст., а про герцога Капусту – що він народився не раніше кінця 920-х років і не пізніше 13 липня 934 року – то одразу стане ясно, що без типу даних “історична дата”, який пропонує “Археометрика”, не обійтись.