4. 1. Реляционный подход

В соответствии с реляционным подходом основными задачами при составлении прикладной программы должны быть: анализ значимых сущностей и отношений в предметной области, выбор обозначений для представления всех этих сущностей и отношений, а затем — определение каждого отношения при помощи фраз языка Пролог. В гл. 1 рассматривалась классификация отношений, по видам ограничений, обеспечивающих их целостность (многие-к-многим, один-к-многим, многие-к-одному и один-к-одному), и по свойствам отношений (симметричность/асимметричность, рефлексивность/нерефлексивность, транзитивность/нетранзитивность). После того, как отношение будет точно определено с учетом всех его свойств и ограничения, обеспечивающего его целостность, это отношение можно использовать как независимый модуль при определении других отношений. Хороший пример такого подхода можно найти в разд. 3. 3. Для базы данных "возраст" определяется промежуточная процедура "мо_возраст", накладывающая ограничение вида многие-к-одному, обеспечивающее целостность, а затем через процедуру "мо_возраст" задается правило "регистрация". Процедуры "мо_возраст" и "регистрация" не зависят друг от друга, так как внутри правила "регистрация" не требуется размещать дополнительный программный текст, который был бы призван компенсировать неэффективность или побочные эффекты управления процедуры "мо_возраст".

Изображение отношений

При анализе бинарных отношений часто оказывается полезным изобразить их графически, когда каждое отношение представляется в виде дуги, а каждый терм — в виде узла. Такие рисунки показывают связи между всеми термами. Симметричное отношение между двумя термами изображается двунаправленной стрелкой (рис. 4. 1). Асимметричное отношение изображается однонаправленной стрелкой (см. рис. 4. 2). Соответственно асимметричное транзитивное отношение с косвенными связями через несколько уровней будет выглядеть как дерево, "растущее" вниз (рис. 4. 3). Отношение, являющееся одновременно и симметричным, и транзитивным, например, отношение "путешествие", будет изображаться так, как показано на рис. 4. 4.

Ограничения, обеспечивающие целостность, которые накладываются при записи отношений в программу

Ограничение, обеспечивающее целостность отношения, может быть наложено либо при записи отношения в программу, либо при выборке этого отношения.

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

отец (билл, даниэль). % (1)

то отношение "отец" неявно регулируется ограничением вида один-к-одному. Для любого запроса к отношению "отец", в котором первым аргументом будет константа "билл", существует только одно возможное значение второго аргумента. То же самое справедливо и для любого запроса, вторым аргументом которого является константа "даниэль". Но если добавить еще один факт о другом ребенке Билла:

отец (билл, кеннет). % (2)

то отношение "отец" неявно станет отношением вида один-к-многим. Это обусловлено принятым предположением о замкнутости мира. Если в текущую программу по невнимательности программиста попадет еще одно отношение "отец"» вторым аргументом которого является "даниэль":

отец (вильям, даниэль). % (3)

то отношение "отец" неявно станет отношением вида многие-к-многим. Если программа должна зависеть от предположения о замкнутости мира для ограничений, обеспечивающих целостность отношений, то каждое ограничение следует вводить в действие в момент добавления новых фраз в программу.

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие