|
Программирование >> Хронологические базы данных
em операции манипулирования данными в представлениях, пользователи и пользовательские программы действительно окажутся логически независимыми от подобной реструктуризации базы данных. Следует отметить, что замена исходной переменной-отношения S, содержащей данные о поставщиках, двумя проекциями этой переменной-отношения, SNC и ST, в обшем случае является вовсе нетривиальной задачей. В частности, следует учитывать, что некоторых дополнительных действий потребует переменная-отношение SP, содержащая сведения о поставках, поскольку в ней используется внешний ключ, ссылаюшийся на исходную переменную-отношение поставшиков S (см. упр. 9.13). Но возвратимся к главной теме обсуждения. Из примера с переменными-отношениями SNC и ST, конечно, не следует, что логическая независимость данных может быть достигнута при любой возможной реструктуризации. Ключевой вопрос здесь состоит в том, возможно ли однозначное отображение между версией базы данных после реструктуризации и ее исходной версией (т.е. обратима ли выполненная реструктуризация базы данных). Другими словами, вопрос заключается в том, являются ли эти две версии базы данных информационно-эквивалентными. Если нет, то совершенно очевидно, что логическая независимость данных будет недостижима. Два важных принципа В результате проведенного выше обсуждения логической независимости данных возникает еще один вопрос. Фактически представления имеют два совершенно разных назначения. Пользователь, который реально определяет некоторое представление V, безусловно, знаком с соответствующим выражением X, определяющим это представление. Он может использовать имя V везде, где применимо выражение X, причем, в сущности, как мы уже убедились, это просто сокращенная запись данного выражения. Пользователь, которому просто известно, что представление V сушествует и его можно применять, чаше всего не знаком с выражением X, определяюшим это представление. Для него представление V должно выглядеть и вести себя точно так, как базовая переменная-отношение. Из сказанного можно сделать вывод, что вопрос, какой является данная переменная-отношение, базовой или производной (т.е. представлением), в известной мере является спорным! Рассмотрим случай переменных-отношений S, SNC и ST, использовавшихся в Это в принципе! К сожалению, современные продукты (и сам стандарт языка SQL) в целом некорректно поддерживают операции обработки данных представлений и, следовательно, эти программные продукты не обеспечивают в должной мере логической независимости от показанных в npimepe изменений. Говоря конкретнее, большинство программных продуктов (но не все) в настоящее врё.мя корректно поддер.живает только операции выборки данных через представления и, насколько известно автору, ни один из продуктов не поддерживает операций обновления данных в представлениях корректно на все 100%. Поэтому такие продукты обеспечивают логическую независгшость от структуры базы данных для операций выборки данных, но не для операций обновления данных. обсуждении вопросов реструктуризации в предыдущем разделе. Очевидно, что можно либо определить S как базовую переменную-отношение, а SNC и ST - как представления проекции этой базовой переменной-отношения, либо определить SNC и ST как базовые переменные-отношения, а S - как представление соединения этих двух базовых пере-менных-отношений. Отсюда следует, что не должно быть никаких предпочтений и никаких ненужных различий между базовыми и производными переменными-отношениями. Мы называем это утверждение принципом взаимозаменяемости базовых и производных переменных-отношений. Заметим в частности, что из этого принципа следует, что должна существовать возможность обновления представлений. Иначе говоря, возможности обновления базы данных не должны зависеть от произвольного по существу решения, каким переменным-отношениям быть базовыми, а каким - производными. Обсуждение этого вопроса будет продолжено в разделе 9.4. Условимся пока называть множество всех базовых переменных-отношений реальной базой данных. Но типичный пользователь взаимодействует (в общем случае) не с реальной базой данных самой по себе, а с тем, что можно назвать представительной базой данных, состоящей (опять-таки, в общем случае) из некоторой смеси базовых переменных-отношений и представлений. Теперь предположим, что ни одна из переменных-отношений в такой представительной базе данных не может быть производной от остальных (в противном случае такая переменная-отношение могла бы быть удалена без потери данных). Поэтому, с точки зрения пользователя, все эти переменные-отношения являются базовыми переменными-отношениями по определению, поскольку они, безусловно, не зависят одна от другой (т.е. все они автономны в соответствии с терминологией главы 3). То же самое относится и к самой базе данных, т.е. выбор, какая база данных является реальной , может быть сделан произвольно, поскольку все возможные варианты информационно равносильны. Последний вывод мы будем называть принципом относительности базы данных. 9.3. Выборка данных из представлений в предыдущих разделах кратко описывалась процедура преобразования операций выборки из представлений в эквивалентные операции выборки из одной или нескольких базовых переменных-отношений. В данном разделе приводится более формальное описание этого преобразования. Прежде всего, следует отметить, что любое заданное реляционное выражение можно рассматривать как функцию на множестве отношений. Иными словами, текущие значения различных переменных-отнощений, упоминаемых в выражении, представляют собой аргументы данного вызова этой функции, а результатом ее вычисления является другое отношение. Пусть D - это база данных (которая будет представлена в данном случае как множество переменных отношений), а V - это представление, определенное на множестве D, т.е. представление, определение которого является функцией X на множестве D. V = X ( D ) См. обсуждение декомпозиции без потерь в разделе 11.2 главы И. Здесь игнорируются любые представления, определенные пользователем, которые, как мы уже убедились, являются просто сокращенной записью некоторого выражения Пусть R - операция выборки из представления V. Тогда очевидно, что R также является функцией на множестве отношений, а результат выборки будет иметь следующий вид. R(V)=R(X(D)) Таким образом, результат операции выборки по определению совпадает с результатом вычисления функции X на множестве D, т.е. овеществления копии отношения, являющегося текущим значением представления V, с последующим применением операции R к этой овеществленной копии. Однако на практике эффективнее использовать описанную выше процедуру подстановки (см. раздел 9.1). Эта процедура равносильна формированию функции С, являющейся композицией R(X) функций X и R (именно в этом порядке), и вычислению результата применения функции С к множеству D. Но как бы то ни было, все-таки удобнее, по крайней мере концептуально, дать определение семантики операции выборки из представлений в терминах овеществления, а не подстановки. Другими словами, подстановка допустима потому, что она гарантирует получение того же результата, который мог быть получен при использовании овеществления (и это, безусловно, гарантируется). Все изложенное в предыдущем разделе должно быть, в основном, уже знакомо читателю. Тем не менее мы сочли необходимым еще раз привести этот материал здесь и вот по каким причинам. Во-первых, он дает основу для аналогичного (но более глубокого) обсуждения операций обновления в разделе 9.4. Во-вторых, становится очевидным, что овеществление представляет собой совершенно законный способ реализации представлений, по крайней мере в случае операций выборки (хотя, возможно, довольно неэффективный). Однако этот способ, конечно же, не может быть использован при операции обновления, поскольку смысл обновления представления заключается в применении указанной операции обновления именно к лежащим в основе представления базовым переменным-отношениям, а не просто к некоторой материализованной копии их данных (раздел 9.4). В-третьих, хотя, в принципе, процедура выполнения подстановки определений представления вполне понятна и теоретически отлично работает в ста процентах случаев, весьма огорчает тот факт, что в некоторых программных SQL-продуктах (на время написания книги) этот процесс не реализован. Иначе говоря, в подобных продуктах выборка данных из представлений может совершенно неожиданно завершиться ошибкой. Процедура подстановки не реализована в версиях стандарта SQL, выпущенных до 1992 года. Причиной, по которой в приложениях и стандартах языка SQL не работают операции выборки из представлений, является неполная поддержка ими свойства реляционной замкнутости (см. упр. 9.14). 9.4. Обновление данных в представлениях Проблема обновления данных в представлениях может быть сформулирована следующим образом. Пусть дана определенная операция обновления в заданном представлении. Какие обновления и в какие исходные базовые переменные-отношения нужно внести, чтобы реализовать исходное обновление представления? Формальное описание
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |