Cтраница 1
Даплекс, и Адаплекс используют понятие подтипа, введенное в гл. Здесь подразумевается, что некоторые объекты могут играть роли других объектов, и в этом случае для таких объектов определяются дополнительные функции. Например, все личности имеют имя и адрес, так как они являются личностями. Некоторые личности, которые являются студентами, имеют кураторов и изучают дисциплины. [1]
Даплекс разрешает совпадение имен различных переменных в различных областях действия, поэтому транслятор должен уметь выяснять, ссылается имя на множество или на элемент, и каковы значения его аргументов. [2]
В Даплексе семантика базы данных выражается в терминах типов сущностей и взаимосвязей между ними. Инвариантные свойства базы данных могут быть заданы посредством либо явной декларации ограничений целостности, либо описания специальных обновляющих процедур. Взаимные помехи от параллельной работы программ предотвращаются явной декларацией атомарных сегментов программ. [3]
Эти средства Даплекса были встроены в Аду таким образом, что ее пользователи получили возможность работы с базами данных при сохранении синтаксиса и всех возможностей самой Ады. База данных представляется в виде самостоятельного модуля, являющегося наряду с пакетом основной единицей компиляции. Модуль может содержать определения типов сущностей ( описание схемы базы данных), определения объектов ( идентификаторы наборов данных), определения подпрограмм и объявления целостности. Возможные взаимные помехи между программами, использующими один и тот же модуль, устраняются автоматически посредством атомарных сегментов программ. [4]
В реализации Даплекса, предпринятой Аткинсоном и Кулкарни, определения функций и объектов также можно добавлять и уничтожать. Такие возможности на удивление редки в обычных СУБД, хотя они, несомненно, нужны. В настоящее время для этого используются специально написанные ( ad hoc) средства переструктуризации или же создается и заполняется информацией новая база данных. Для надлежащей переструктуризации схемы она сама должна храниться в базе данных и быть доступна для обновления. [5]
Описанный в [40] диалект Даплекса имеет больше возможностей для осуществляющих обновление транзакций. Однако отсутствуют возможности для определения представлений, а из ограничений можно использовать только UNIQUE и OVERLAP. Кроме этого, применяются другие ключевые слова. [6]
Затем рассмотрим отображение кодасиловской схемы на эквивалентную схему системы Даплекс и на эквивалентную реляционную схему. Мы укажем несколько способов построения отображений на реляционную схему, после чего покажем, как операция соединения ( вместе с прочими операциями реляционной алгебры) транслируется в эффективную программу доступа к кодасиловской базе данных. Последняя часть главы посвящена не затронутым ранее проблемам, возникающим в связи с операциями обновления и выполнением ограничений целостности. В заключение мы поговорим о направлении исследований в нерешенных задачах. [7]
Некоторые из операций Даплекса выдают ссылку на объект; два разных объекта с совпадающими значениями компонент можно различить, если ссылки на эти объекты не совпадают. Важно, что выражение может обозначать уникальный непоименованный объект, существующий независимо от составляющих его компонент, причем этот объект можно отличить от других объектов. В реляционной модели такой возможности нет, и поэтому в более новых реляционных моделях, таких, как RM / T [28], было введено понятие суррогата, или уникального идентификатора кортежей. [8]
Здесь интересно отметить, что тело функции содержит предикаты соединения, сопоставляющие атрибуты студ отношений студент и изучает, как это делается в реляционном языке типа QUEL. В действительности Шипман показывает этапы перевода запроса с Даплекса на QUEL с использованием этой схемы. [9]
При реализации композиции многозначных функций, т.е. выражений вида for each x in f ( g ( z)), возникают трудности, так как в системе Даплекс требуется, чтобы конструкция f ( g ( z)) обозначала множество объектов без дубликатов. В случае двойного цикла переменная внешнего цикла имеет при этом разные значения. В случае же композиции функций все значения f ( g ( x)) образуют множество, и любое заданное значение появится единственный раз в цикле по этой сложной функции. [10]
Мы уже рассматривали функциональный язык запросов FQL, разработанный Бунеманом. Этот язык основан на применении ( аппликации) функций к потокам объектов. Как и FQL, функциональная модель данных оперирует с понятием объекта и функции из объектов в объекты, но она использует теоретико-множественную терминологию, а не терминологию потоков. Запросы записываются на языке Даплекс ( Daplex), в стиле исчисления предикатов, а не аппликативного программирования. Тем не менее этот язык использует композицию функций, результатом которой являются множества, что очень похоже на композицию функций в языке FQL. Существенное преимущество функциональной модели данных состоит в том, что она объединяет вычислительную способность аппликативного программирования с возможностями определения и абстракции данных, которые обеспечиваются стандартными языками для работы с базами данных. [11]
Как было показано выше, эти две операции почти эквивалентны, в особенности если используются бинарные отношения. Однако если используются n - арные отношения, то имеется тонкое различие в формулировании запросов. Большинство примеров запросов на Даплексе выдает множества значений одного атомарного типа, например, множества имен или возрастов, поскольку это удобно получаемый результат композиции функций. Большинство реляционных запросов выдает множества кортежей с многими компонентами, получаемыми из различных отношений, поскольку это легко получаемый результат соединений n - арных отношений. Часто такой результат на Даплексе можно получить, применяя функции к переменный на различных уровнях вложенности циклов. Однако иногда может оказаться необходимым использовать операцию compound of ( составляющая), что похоже на [,] в FQL и действует так же, как создание кортежа в реляционной алгебре. [12]
В этой книге мы хотели показать, что имеется нечто вроде двойственности между функциональными и основанными на логике методами построения программ, а это имеет фундаментальное значение для нашего понимания программирования. Мы использовали языки запросов к базам данных для иллюстрации достоинств и недостатков каждого из этих методов, а также для того, чтобы показать важность возможности работы с множествами в обоих этих стилях программирования. Мы видели, как это делается в функциональных языках ( Даплекс), где используются предикаты и кванторы. Как утверждает Ковальский в своей работе [64] логическое программирование - расширение функционального программирования. Даже если это и так, функциональное программирование настолько важно, что заслуживает изучения само по себе. [13]
Как было показано выше, эти две операции почти эквивалентны, в особенности если используются бинарные отношения. Однако если используются n - арные отношения, то имеется тонкое различие в формулировании запросов. Большинство примеров запросов на Даплексе выдает множества значений одного атомарного типа, например, множества имен или возрастов, поскольку это удобно получаемый результат композиции функций. Большинство реляционных запросов выдает множества кортежей с многими компонентами, получаемыми из различных отношений, поскольку это легко получаемый результат соединений n - арных отношений. Часто такой результат на Даплексе можно получить, применяя функции к переменный на различных уровнях вложенности циклов. Однако иногда может оказаться необходимым использовать операцию compound of ( составляющая), что похоже на [,] в FQL и действует так же, как создание кортежа в реляционной алгебре. [14]