Базовые и производные отношения
Выше я уже объяснял, что операторы реляционной алгебры позволяют, начав с некоторого набора исходных отношений, – скажем, изображенных на рис. 1.3, – получить новые отношения (например, с помощью запросов). Исходные отношения называются базовыми, остальные – производными. Следовательно, чтобы было от чего отталкиваться, реляционная система должна предоставлять средства для определения базовых отношений. В SQL эта задача решается предложением CREATE TABLE (в SQL базовому отношению, естественно, соответствует базовая таблица). Очевидно, что базовые отношения должны быть поименованы, например:
Но некоторым производным отношениям, в частности так называемым
представлениям, также присваиваются имена. Представлением (или виртуальным отношением) называется именованное отношение, значением которого в каждый момент времени t является результат вычисления некоторого реляционного выражения в этот момент. Вот как это может выглядеть на языке SQL:
В принципе, представлениями можно оперировать так же, как базовыми отношениями1, но в действительности они таковыми не являются. Альтернативно можно считать представление «материализованным», то есть мысленно воображать, что в тот момент, когда производится ссылка на представление, создается базовое отношение, значением которого является результат вычисления заданного реляционного выражения. Однако я должен подчеркнуть, что идея о подобной материализации представлений в момент ссылки является чисто концептуальной; ничего подобного в реальности не происходит, и для операций обновления это в любом случае не сработало бы. Как на самом деле задумывалось функционирование представлений, мы рассмотрим в главе 9. Попутно хочу сделать важное замечание. Часто приходится слышать такое описание различий между базовыми отношениями и представлениями:
- Базовые отношения реально существуют, то есть физически хранятся в базе данных.
- Напротив, представления «реально не существуют» – это лишь альтернативный способ взглянуть на базовое отношение.
Но реляционная модель ничего не говорит о том, что именно физически хранится! В частности, нигде не утверждается, что базовые отношения физически хранятся. Требуется лишь, чтобы существовало некоторое отображение между тем, что физически хранится, и базовыми отношениями, так чтобы базовое отношение можно было каким-то образом по- лучить, когда в нем возникнет необходимость (по крайней мере, концептуально). Если таким образом можно получить базовое отношение, то можно получить и все остальное. Например, мы могли бы физически хранить соединение поставщиков и поставок, но не хранить их по от- дельности; тогда базовые отношения S и SP концептуально можно было бы получить с помощью подходящих проекций этого соединения. Скажем по-другому: с точки зрения реляционной модели, базовые отношения не более (но и не менее!) «физические», чем представления.
Реляционная модель вполне сознательно ничего не говорит о физическом хранении. Идея заключалась в том, чтобы оставить разработчикам максимум свободы в реализации модели любым удобным для них способом – в частности, наиболее подходящим для обеспечения высокой производительности, – не жертвуя принципом физической независимости от данных. Печально, однако, что поставщики SQL-систем по большей части, похоже, недопоняли этот аспект; они напрямую отображают базовые таблицы на физические хранимые объекты1, и потому (как уже отмечалось выше) созданные ими продукты демонстрируют гораздо меньшую физическую независимость от данных, чем заложено в реляционной модели. Более того, такое положение вещей отражено и в самом стандарте SQL (а также в большинстве других относящихся к SQL документов), где обычно – и на самом деле, в очень многих местах – употребляются выражения типа «таблицы и представления». Очевидно, что человек, который так говорит, полагает, что таблицы
и представления – вещи разные, и, возможно, находится под впечатлением, будто таблицы – физические объекты, а представления – нет. Но весь смысл представления в том, что это такая же таблица (хотя я пред- почел бы сказать – отношение), поэтому к представлениям примени- мы те же операции, что к обычным отношениям (по крайней мере, в реляционной модели), так как представления и есть «обычные отношения». В этой книге я буду употреблять термин отношение для обозначения любого отношения (базового, представления, результата запроса и т. д.); если же мне понадобится (например) уточнить, что речь идет о базовом отношении, я так и напишу «базовое отношение». Рекомендация: настоятельно рекомендую и вам придерживаться такой же дисциплины. Не делайте распространенную ошибку, мысленно применяя термин отношение только к базовым от ношениям, или – если говорить в терминах SQL – называя таблицами только базовые таблицы.
Дата добавления: 2017-01-17; просмотров: 1309;