Раздел 3
Пример содержательной постановки задачи на создание реляционной базы данных и обработку хранящейся в ней информации
Реляционная база данных (РБД) описывает состояние объектов предметной области и связи между ними. Каждый объект характеризуется набором свойств. Любое свойство задается на множестве его допустимых значений, называемом доменом. Объекты, имеющие одинаковые свойства, объединяются в отношение (relation). ОтношениеRстепениnможно определить как подмножество декартова произведенияnдоменов, при условии чтоi-ый домен задает множество допустимых значенийi–го атрибута объекта.
Отношение можно также представить как прямоугольную таблицу, в которой строки перечисляются в произвольном порядке, а в каждом столбце задаются значения определенного свойства для объектов.
Рассмотрим достаточно простой пример описания результатов аэрофотосъемки. Каждый объект в нашем случае будет определяться набором значений его свойств: шифр снимка, экспозиция, тип леса, водоток, крутизна склона. Для удобства рассмотрения примера будем использовать русские буквы в названии атрибутов и их значений. Если при написании программы на определенном диалекте ЛИСПа такой возможности не будет, придется заменить русские буквы на их транскрипцию в латинском алфавите.
Сведем значения атрибутов четырех объектов в таблицу, в заголовках столбцов которой стоят имена атрибутов (тоже записанные в русском алфавите).
Табл. 3.1
Шифр |
Экспозиция |
Тип_леса |
Водоток |
Крутизна_склона |
С20-1 |
Север |
Брусничник |
Нет |
(2 5) |
С20-2 |
Северо-запад |
Брусничник |
Есть |
(3 5) |
С20-3 |
Восток |
Щирокотравный |
Нет |
(0 0) |
С20-4 |
Юг |
Черничник |
Нет |
(7 9) |
3.1. Описание реляционной базы данных с помощью списка свойств символов (Common lisp)
Для того, чтобы запомнить данные табл. 3.1 в виде списков свойств определенных объектов, необходимо дать им имена.
Пусть имена объектов задаются на ЛИСПе в виде списка.
(SETQ PRED ‘(PR1 PR2 PR3 PR4))
Каждый объект соответствует определенной строке таблицы 3.1, в которой записаны значения его свойств. Сопоставим к-ому объекту к-ую строку таблицы для к = 1, 2, 3, 4. Например, для объекта PR4 в четвертой строке таблицы:
Шифр = С20-4
Экспозиция = Юг
Тип_леса = Черничник
Водоток = Нет
Крутизна_склона = (7 9)
Отметим, что значением свойства Крутизна_склона является список, задающий пределы изменения этого параметра.
Теперь произведем обращения к функциям CommonLispдля запоминания списков свойств четырех объектов.
(SETF (GET PR1 ‘шифр) ‘С20-1)
(SETF(GETPR1 ‘экспозиция) ‘север)
(SETF(GETPR1 ‘тип_леса) ‘брусничник)
(SETF(GETPR1 ‘водоток) ‘нет)
(SETF (GET PR1 ‘крутизна_склона) ‘(2 5))
(SETF (GET PR2 ‘шифр) ‘С20-2)
(SETF(GETPR2 ‘экспозиция) ‘северо-запад)
(SETF(GETPR2 ‘тип_леса) ‘брусничник)
(SETF(GETPR2 ‘водоток) ‘есть)
(SETF(GETPR2 ‘крутизна_склона) ‘(3 5))
(SETF (GET PR3 ‘шифр) ‘С20-3)
(SETF(GETPR3 ‘экспозиция) ‘восток)
(SETF(GETPR3 ‘тип_леса) ‘широкотравный)
(SETF(GETPR3 ‘водоток) ‘нет)
(SETF(GETPR3 ‘крутизна_склона) ‘(0 0))
(SETF (GET PR4 ‘шифр) ‘С20-4)
(SETF(GETPR4 ‘экспозиция) ‘юг)
(SETF(GETPR4 ‘тип_леса) ‘черничник)
(SETF(GETPR4 ‘водоток) ‘нет)
(SETF(GETPR4 ‘крутизна_склона) ‘(7 10))
После запоминания начального состояния РБД в виде списков свойств 4 объектов мы можем вывести любой список целиком, обратившись к функции SYMBOL-PLIST. Например,
(SYMBOL-PLISTPR4)
(крутизна_склона (7 10) водоток нет тип_леса черничник экспозиция юг шифр ‘С20-1)