Классика баз данных - статьи

       

Завершая обсуждение подъязыка Alpha


Data Sublanguage Alpha

C.J. Date

()

В предыдущей заметке мы обратились к подъязыку данных Кодда Alpha и привели обзор основных средств определения данных и операций манипулирования данными. Как и раньше, я использую в качестве основного первоисточника [5] (статью, которая ниже именуется "статьей про Alpha" или иногда просто "статьей Кодда"). Ссылки на [3] присутствуют только в тех случаях, когда этот материал имеет отношение к [5].

Неявные переменные с областью определения: В языке Alpha поддерживается очевидная сокращенная форма, допускающая использование имен отношений вместо явных имен переменных в тех случаях, когда это не приводит к двусмысленности. Используемое таким образом имя отношения обозначает неявную переменную с областью определения, значениями которой являются кортежи данного отношения. Таким образом, можно выразить запрос из заметки предыдущего месяца ("выдать имена поставщиков и названия их городов для поставщиков, поставляющих все детали") следующим образом:

GET W1 (S.SNAME, S.CITY) : ALL P SOME SP ( SP.S# = S.S# AND SP.P# = P.P# )

Но важно понимать, что здесь имя "S" не представляет отношение поставщиков S; это имя означает переменную S, определенную на отношении с тем же именем (то же касается имен P и SP). Такая сокращенная форма используется и в QUEL, и в SQL.

Дуальный подход: В [2] Кодд явно говорит о том, что теперь называется принципом дуального подхода. Любая операция над базой данных, которую можно выполнить в интерактивном режиме, может быть также вызвана из прикладной программы. "Язык [Alpha] направлен на то, чтобы быть подъязыком … языков, используемых всеми конечными пользователями" - пишет Кодд. "Этот язык ориентирован также на то, чтобы служить подъязыком таких основных языков программирования как PL/1, COBOL и FORTRAN". И это снова в первый раз, по моему мнению.

Каталог: В статье про Alpha явно демонстрируется признание Коддом понятия каталога. Утверждается, что сам каталог должен быть структуризован как набор отношений: "Каталог … может быть сам частью баз данных и должен состоять из … отношений".
И дальше: "Вся информация, относящаяся к новому отношению -- имя отношения, имена атрибутов и доменов, спецификация первичного ключа и т.д. -- должна быть связана с отношениями, каталогизирующими отношения базы данных" (слегка перефразировано). И: "Ограничения авторизованного доступа должны составлять те отношения, которые описывают эти ограничения … Для новых отношений должно быть выбрано представление хранения (включающее решение о том, какие атрибуты следует индексировать), и эта описательная информация должна храниться в соответствующих отношениях".

Косвенные ссылки: Язык Alpha включает операцию "разыменования" (dereference), называемую PER, в соответствии с которой (например) операция

GET W2 PER (W1.X)

Выбирает в рабочее пространство W2 отношение, имя которого задается компонентом рабочего пространства W1. В языке QUEL имеется в чем-то похожее свойство; в SQL такой возможности не было до появления "динамического SQL".

Миграция доменов: В [3] имеются некоторые замечания, касающиеся того, что называется миграцией доменов. (Лучше было бы называть это миграцией атрибутов.) Основная идея состоит в том, что некоторый атрибут, говоря нестрого, может "мигрировать" из одного базового отношения в другое, и мы хотели бы иметь возможность корректного продолжения использования запросов и приложений при таких изменениях.

Другими словами. Кодд говорит об одном аспекте того, что теперь называется логической независимостью данных. Общее решение состоит в том, чтобы обеспечить представления, делающие новые отношения похожими на старые, пока к ним применимы эти запросы и приложения. И решение заключается в том, что предлагает Кодд (хотя он вообще не использует термин "представление"). В [5] он касается этих идей косвенным образом, не вдаваясь в детали.

Трехзначная логика: В статье про Alpha -- очень неудачно, по моему мнению -- допускается операция выборки с уточнением MAYBE_TOO, относящимся к тем кортежам, для которых условие выборки вырабатывает значение uknown (это истинностное значение в статье называется maybe), а также к тем кортежам, для которых значением условия является true.Другими словами, Кодд полагал, что система должна основываться на трехзначной логике и должна поддерживать некоторый род неопределенных значений (в статье они называются "отсутствующими значениями"). Он не развивает эту идею, кроме a) простого примера вставки кортежей с неспецифицируемыми компонентами ("сама система [внесет] отсутствующее значение [этих неспецифицированных компонентов]") и b) замечания относительно того, что "более подробная разработка [этого подхода] не является уместной".

Думаю, что это наблюдение правильно. Постоянные читатели этой серии знают, что мы с Коддом абсолютно не согласны с подходом неопределенных значений и трехзначной логики, и я сожалею о том, что он просто упомянул об этой возможности в 1971 г. Он ничего не делал по этому поводу до 1979 г. [7]; другими словами, реляционная модель прекрасно работала без неопределенных значений в течение десяти лет.


Содержание раздела