Отношения и переменные-отношения
Очень может быть, что все, о чем я рассказывал в этой главе до сих пор, вам уже знакомо; я даже искренне надеюсь, что это так, хотя не в меньшей степени надеюсь, что вы не сочли текст скучным. Но так или иначе, сейчас я подхожу к теме, которая вам, возможно, незнакома. Дело в том, что исторически возникла серьезная путаница, связанная еще с одним логическим различием: между отношениями и переменными- отношениями.
Давайте на минутку забудем о базах данных и отношениях и рассмотрим пример простого языка программирования. Предположим, что я написал на некотором языке такое предложение:
Здесь N – не целое число, а переменная, которая может принимать целые числа в качестве значений – разных в разные моменты времени. Все мы это прекрасно понимаем. Точно так же, когда в SQL я пишу:
T не является таблицей; это табличная переменная, или (как я предпочитаю говорить, игнорируя такие особенности SQL, как null-значения и строки-дубликаты) переменная-от ношение, значениями которой являются отношения (разные в разные моменты времени).
Взгляните еще раз на рис. 1.3, где изображена база данных о поставщиках и деталях. На этом рисунке мы видим три отношения-значения, а именно те, которые имели место в базе данных в какой-то момент времени. Но, взглянув на ту же базу данных в другой момент, мы, возможно, увидели бы другие три отношения-значения. Иными словами, S, P и SP в этой базе данных действительно являются переменными – точнее, переменными-отношениями. Например, предположим, что переменная-от ношение S в настоящий момент времени имеет значение – от- ношение-значение, – показанное на рис. 1.3, и мы удаляем кортежи (на самом деле, только один кортеж) для поставщиков в Афинах:
Концептуально старое значение S было целиком заменено новым. Конечно, старое значение (с пятью кортежами) и новое (с четырьмя кортежами) в некотором смысле очень похожи, но все-таки это разные значения. Фактически показанная выше операция DELETE логически эквивалентна и по существу является сокращенной записью следующего реляционного присваивания:
Как и при любом присваивании, здесь выполняются два действия: (а)
вычисляется выражение в правой части и (б) результат вычисления присваивается переменной в левой части. А что получается в результате, я уже объяснил.
Отступление
Я не могу записать показанное выше присваивание на языке SQL, потому что SQL не поддерживает реляционное присваивание. Вместо этого я записал его (равно как и исходное предложение DELETE) на специальном языке Tutorial D, синтаксис которого более-менее очевиден. Язык Tutorial D придумал Хью Дарвен (Hugh Darwen), я использовал его для иллюстрации реляционных идей в нашей совместной книге «Databases, Types, and the Relational Model: The Third Manifesto» (см. приложение D) и буду использовать также в этой книге, когда понадобится объяснить какие-то реляционные концепции. Но поскольку предполагаемая аудитория на этот раз состоит из практических пользователей SQL, то я в большинстве случаев буду приводить эквивалентные конструкции на SQL. Всем известные предложения INSERT и UPDATE также по существу являются сокращенной записью реляционного присваивания. Поэтому, как я уже отмечал в разделе «Обзор оригинальной модели», реляционное присваивание – это фундаментальный оператор обновления в реляционной модели; логически это вообще единственный оператор обновления, который нам нужен.
Таким образом, существует логическое различие между отношениями- значениями и переменными-отношениями. Беда в том, что в литера- туре по базам данных исторически применялся один и тот же термин, отношение, для обозначения обоих понятий, и такая практика, конечно же, привела к путанице1. Но, начиная с этого момента, я буду скрупулезно различать эти смыслы, четко обозначая, что имеется в виду: отношение-значение или переменная-отношение. Однако выражение отношение-значение я как правило буду сокращать до просто «отношение» (точно так же, как вместо целочисленное значение мы обычно говорим целое число).
В качестве упражнения можете еще раз прочитать текст настоящей главы и отметить те места, где я использовал термин отношение, когда должен был бы написать переменная-отношение.
Дата добавления: 2017-01-17; просмотров: 1170;