Главная » SQL, Базы данных » БАЗОВЫЕ ПЕРЕМЕННЫЕ ОТНОШЕНИЯ И ПРЕДСТАВЛЕНИЯ

0

Мы  уже  видели,  что  на  основе  реляционных  значений,  присвоенных  некоторому множеству переменных отношения, подобных DEPT и ЕМР, реляционные выражения позволяют получить множество других значений  отношений, например, в результате соединения двух переменных отношения. Теперь необходимо ввести еще несколько новых терминов. Исходные (заданные) переменные отношения называются базовыми переменными  отношения,  а  присвоенные  им  значения  называются  базовыми  отношениями. Отношение,  которое получено или может быть получено из базового отношения в результате выполнения каких-либо реляционных выражений, называется производным отношением.

Примечание. В [3.3] базовые переменные отношения называются реальными переменными отношения.

Реляционные системы, очевидно, должны предоставлять средства для  создания, в первую очередь, базовых переменных отношения. В языке SQL, например, эта функция обеспечивается оператором CREATE TABLE (здесь слово  TABLE используется в узком

смысле, как базовая переменная отношения). Базовые переменные отношения, конечно же, должны быть именованными, как, например, показано ниже.

CREATE TABLE EMP … ;

Однако реляционные системы обычно поддерживают еще один вид именованных переменных отношения, называемых представлениями. В любой  конкретный момент их значение является производным отношением (и поэтому упрощенно можно считать, что представление — это производная переменная отношения). Значение данного представления в данное время является результатом вычисления определенного реляционного выражения в данный момент, а упомянутое реляционное выражение определяется в момент создания этого представления. Например, для определения представления ТОРЕМР можно использовать следующий оператор.

CREATE VIEW ТОРЕМР AS

) { EMP#, ENAME, SALARY } ;

( EMP WHERE SALARY > 3 3K

Примечание. Поскольку в данный момент это несущественно, в примере для удобства используется смешанная нотация языков SQL и Tutorial D.

При выполнении этого оператора выражение, следующее за ключевым словом AS и

фактически определяющее представление, не вычисляется, а просто запоминается системой (обычно посредством сохранения в каталоге под указанным именем ТОРЕМР). Однако с точки зрения пользователя все выглядит так, как будто в базе данных появилась вполне

реальная переменная отношения с именем ТОРЕМР, имеющая текущее значение, которое показано на рис. 3.7 только в незатененных участках. И пользователь должен иметь возможность оперировать этим представлением точно так, как если бы оно являлось обычной базовой переменной отношения.

Рис. 3.7. Виртуальная переменная отношения ТОРЕМР (незатененные участки)

как представление базовой переменной отношения ЕМР

Примечание. Выше уже было сказано, что если такие переменные отношения, как DEPT и ЕМР, можно считать реальными, то переменную отношения ТОРЕМР следует рассматривать как виртуальную переменную отношения, иначе говоря, как переменную отношения, которая внешне существует как таковая, но на самом деле ее нет (значение этой переменной отношения в любой данный момент зависит от значений некоторых

других  переменных  отношения).  И  действительно,  в  [3.3]  представления  называются

виртуальными переменными отношения.

Однако будьте внимательны: отмечая, что значение переменной отношения ТОРЕМР является  отношением,  которое  было  бы  результатом,  если  бы  определяющее  данное представление выражение было на самом деле вычислено, мы вовсе не хотим сказать, что существует отдельная копия этих данных. Иначе говоря, мы вовсе не имеем в виду, что выражение, определяющее представление,  действительно вычисляется. Наоборот, представление — это по сути просто окно, через которое можно видеть часть значения базовой переменной отношения ЕМР. Отсюда следует, что любые изменения в базовой переменной отношения будут автоматически и немедленно поступать в подобное окно (конечно, если эти изменения относятся к незатененной части реальной переменной отношения). Аналогично, изменения, внесенные в переменную отношения ТОРЕМР, будут автоматически и немедленно применены к реальной переменной отношения ЕМР и, следовательно, станут видны через это окно (примеры будут приведены позднее).

Ниже показан пример запроса, использующего представление TОРЕМР.

( ТОРЕМР WHERE SALARY < 42К ) { ЕМР#, SALARY }

Если в качестве исходных используются данные на рис. 3.7, то результат будет иметь вид, показанный на рис. 3.8.

Рис. 3.8. Результат использования представления ТОРЕМР

С концептуальной точки зрения операции с представлениями, подобные рассмотренной выше, аналогичны операциям поиска, которые фактически реализуются посредством замены ссылки на имя представления выражением, которое определяет представление (т.е. выражением, сохраненным в каталоге). Поэтому в рассмотренном примере исходное выражение

( ТОРЕМР WHERE SALARY < 42К ) { ЕМР#, SALARY }

модифицируется системой следующим образом.

( ( ( ЕМР WHERE SALARY > ЗЗК ) { ЕМР#, ENAME, SALARY } ) WHERE SALARY < 42К ) { ЕМР#, SALARY }

Здесь курсивом выделено имя представления в исходном выражении и  заменяющий текст в модифицированной версии. После определенного количества перегруппировок это выражение может быть упрощено (глава 18) и представлено в следующем виде.

( ЕМР WHERE SALARY > ЗЗК AND SALARY < 42К ) { ЕМР#, SALARY }

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

полученная эквивалентная операция выполняется обычным образом (точнее, оптимизируется и выполняется обычным образом).

В качестве другого примера рассмотрим операцию удаления DELETE.

DELETE TOPEMP WHERE SALARY < 42K ;

На самом деле будет выполнена следующая операция.

DELETE EMP WHERE SALARY > ЗЗК AND SALARY < 42К ;

Рассматриваемое здесь представление ТОРЕМР является очень простым,  состоящим (выражаясь неформально) из подмножества строк и столбцов единственной базовой переменной отношения. Однако, в принципе,  определение  представления  может иметь произвольную сложность (оно может даже ссылаться на другие представления). Например, далее приведено представление, определение которого включает соединение двух базовых переменных отношения.

CREATE VIEW JOINEX AS

( ( EMP JOIN DEPT ) WHERE BUDGET > 7M ) { EMP#, DEPT# } ;

К вопросу определения и обработки представлений мы еще вернемся в главе 10. Между прочим, сейчас уже можно объяснить смысл приведенного в конце раздела 2.2 замечания, касающегося  того,  что  термин  представление  (view)  в  реляционном  контексте  имеет довольно специфическое значение, не совпадающее со значением, приписанным ему в архитектуре  ANSI/SPARC.  На  внешнем  уровне  этой  архитектуры  база  данных  воспринимается как внешнее представление, определяемое внешней схемой (и разные пользователи могут иметь разные внешние представления). В реляционных системах, наоборот, представление, как пояснялось выше, является специально именованной производной виртуальной переменной отношения. Поэтому реляционным аналогом внешнего представления ANSI/SPARC обычно служит множество из нескольких  переменных отношения, каждая из которых является представлением в  реляционном смысле. Внешняя схема состоит из определений таких представлений. (Из этого следует, что в реляционной модели представления являются одним из способов обеспечения логической независимости от данных,  хотя еще раз следует отметить, что современные коммерческие продукты имеют серьезные недостатки в этой части. Подробности приведены в главе 10.)

Архитектура ANSI/SPARC является достаточно общей и допускает  произвольные преобразования между внешним и концептуальным уровнями. В принципе, даже типы структур  данных,  поддерживаемые  на этих  двух  уровнях,  могут быть различными: например, концептуальный уровень может быть реляционным, тогда как конкретному пользователю может быть передано внешнее представление иерархического типа5. Однако на практике в большинстве систем в качестве базовых на обоих уровнях используются одинаковые типы структур. Реляционные продукты не являются исключением из этого общего правила — представление по-прежнему остается переменной отношения, как и базовые переменные отношения. А поскольку на обоих уровнях поддерживаются одинаковые типы объектов, на этих уровнях применяется один и тот же подъязык  данных (обычно это язык SQL). Действительно, тот факт, что представление — это переменная

5 Пример осуществления такой возможности приведен в главе 27.

отношения, так же важен для реляционных систем, как для математики важно  то,  что подмножество является множеством.

Примечание. Однако, по-видимому, в документации к реальным продуктам SQL и в самом стандарте языка SQL этот нюанс часто игнорируется (глава 4), поскольку нередко можно встретить упоминания о "таблицах и представлениях" (т.е. при этом подразумева ется, что представление не является таблицей). Советуем не делать этой распространен ной ошибки и использовать термин таблицы (или переменные отношения) лишь для обо значения базовых таблиц (или базовых переменных отношения).

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

■    Базовые переменные отношения "реально существуют" в том смысле, что они во площают в себе данные, которые действительно хранятся в базе данных.

■    Представления, наоборот, "реально не существуют", а просто предоставляют раз личные способы просмотра "реальных" данных.

Однако такая характеристика, хотя и полезна в неформальном смысле, неточно отражает истинное положение дел. Действительно, пользователи могут рассматривать базовые переменные отношения как физически хранимые,  поскольку фактически главная цель создания реляционных систем состоит в том, чтобы дать возможность пользователю работать с базовыми переменными отношения как с физически существующими, не заботясь о том, как эти переменные отношения физически представлены в памяти. Но (и это весьма существенное "но"!) подобные взгляды пользователей на то, как происходит обработка данных, нельзя толковать так, будто базовая переменная отношения — это непосредственно физически хранимая переменная отношения (например, как  единственный хранимый файл). Как пояснялось в разделе 3.2, базовые  переменные отношения лучше всего представлять как абстракцию для некоторого набора хранимых данных — абстракцию, скрывающую все детали уровня хранения данных. В принципе, базовая переменная отношения и ее хранимый эквивалент6 могут различаться в произвольной степени.

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

6  Следующая цитата из одной недавно вышедшей книги демонстрирует некоторые  недоразумения, обсуждаемые здесь, а также недоразумения, которые обсуждались в разделе 3.3:  "Важно различать хранимые отношения, которые являются таблицами, и виртуальные  отношения, которые являются представлениями… [Мы] будем использовать термин отношение только в тех случаях, когда вместо него можно использовать термин «таблица» или  «представление».  Если необходимо будет подчеркнуть, что данное отношение является хранимым отношением, а не представлением, то в этом случае мы будем использовать термин базовое отношение или базовая таблица." Подобные цитаты, к сожалению, — не редкость.

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии