|
Программирование >> Хронологические базы данных
Ответ. Интересный вопрос! Очевидно, что необходим более ограничивающий предикат по сравнению с общей интерпретацией данного кортежа с тремя атрибутами, а именно: С поставщиком с номером Sx был подписан договор, действительный каждый день с даты s по дату е, но не в день, непосредственно предшествующий S, и не в день, непосредственно следующий за е . Эта более ограничивающая интерпретация в общем виде предоставляет мотивировку и основу для многих операторов, которые будут описаны в этой главе, в частности в разделах 22.8 и 22.10. 22.3. Основная проблема хронологических баз данных в последующих примерах этой главы в качестве основы по-прежнему будет использоваться база данных поставщиков и деталей, но, чтобы она лучше подходила для наших целей, необходимо внести в нее несколько изменений. Прежде всего, для упрощения примеров удалим переменную-отношение Р. Во-вторых, откорректируем состав атрибутов переменной-отношения поставок SP, отбросив атрибут QTY и оставив лишь атрибуты Si и Р. Измененную таким образом переменную-отношение SP можно интерпретировать так: Поставщик с номе-, ром SI в настоящее время может поставить деталь с номером Р . Иначе говоря, вместо того чтобы показывать действительные поставки деталей поставщиками, переменная-отношение SP теперь показывает лишь потенциально возможные поставки, т.е. возможности поставщиков поставлять детали. На рис. 22.1 представлена исправленная версия рис. 3.8 из главы 3. Здесь отображено множество данных, содержащихся в измененной базе данных. Обратите внимание, что эта база данных по-прежнему имеет тип моментального снимка, поскольку еще не включает никаких хронологических сведений. Теперь приступим к обсуждению некоторых простых ограничений и запросов для этой базы данных. Позднее рассмотрим, что случится с ограничениями и запросами, если база данных будет расширена различными хронологическими функциями. Ограничения (для текущей версии базы данных типа моментального снимка). Единственные Офаничения, которые будут рассмотрены, - это Офаничения для ключа. Напомним, что {SI} и {Sl,Pl} - первичные ключи переменных-отношений S и SP соответственно, а {Si} - внешний ключ переменной-отношения SP, который ссылается на первичный ключ переменной-отношения S (безусловно, внешний ключ {Р} не учитывается). Запросы (для текущей версии базы данных типа моментального снимка). Запросы, которые мы будем обсуждать, очень просты, и их всего два. Запрос 1.1. Определить номера поставщиков, которые в настоящее время могут поставить некоторую деталь. SP { Si } Везде в этой главе неуточненный термин предикат используется для обозначения внешнего предиката, который понятен пользователям (см. главу 8), а не внутреннего, понятного системе (последний является, конечно, предикато.м переменной-отношения/ Кроме того, мы не затрагиваем здесь аспекты внешнего предиката, которые или очевидны , или не имеют отношения к теме нашего обсуждения. Запрос 1.2. Определить номера поставщиков, которые в настоящее время не могут поставлять никаких деталей. S { SI } MINUS SP { SI }
Puc. 22.1. База данных поставщиков и деталей (значения для примера): текущая версия типа мо.чентального снимка Отметим, что запрос 1.1 включает простую операцию проекции, а запрос 1.2 - операцию разности между двумя подобными проекциями. Позднее, при рассмотрении хронологических вариантов этих двух запросов, мы убедимся, что они включают хронологические аналоги этих двух операторов (см. раздел 22.8). Замечание. Возможно, читателя не удивит тот факт, что могут быть определены хронологические аналоги и других реляционных операторов (см. упр. 22.8). Полуограниченные во времени поставщики и поставки Чтобы изменения вносились постепенно, на следующем этапе мы введем в переменные-отнощения S и SP только полухронологичность (если можно так выразиться). Для этого к каждой из них добавим атрибут временной отметки SINCE (Начиная с), а затем соответственно переименуем эти переменные-отношения так, как показано на рис. 22.2. Для упрощения представления информации на рис. 22.2 показаны не реальные временные отметки, а условные обозначения вида dOl, d02 и т.д., где d может для удобства произноситься как день . Указанного соглашения мы будем придерживаться до конца этой главы. (Таким образом, во всех примерах будут использоваться временные отметки, которые являются днями.) Далее подразумевается, что день 1 непосредственно предшествует дню 2, день 2 непосредственно предшествует дню 3 и т.д. Кроме того, незначащие ведущие нули в таких выражениях, как день 1, отбрасываются. Предикат для переменной-отношения S SINCE формулируется так: Поставщик с номером Sine именем SNAME имеет статус STATUS, находится в городе CITY, и договор с ним заключен с дня SINCE . Предикат для переменной-отношения SP SINCE формулируется так: Поставщик с номером Sl может поставлять деталь с номером Р начиная с дня SINCE . S SINCE SP SINCE
Puc. 22.2. База данных поставщиков и деталей (значения для примера): полухронологическая версия Ограничения ( полухронологическая база данных). Первичные и внешние ключи для новой полухронологической базы данных те же, что и раньше. Однако требуется ввести дополнительное ограничение, которое могло бы рассматриваться как расширенное ограничение внешнего ключа в переменной-отношении SP SINCE для переменной-отношения S SINCE. Оно необходимо для отражения того факта, что ни один поставшик не может поставить ни одной детали прежде, чем с ним будет заключен договор. Иными словами, если кортеж sp в переменной-отношении SP SINCE ссылается на кортеж s в переменной-отношении S SINCE, то значение SINCE в кортеже sp не должно быть меньше, чем значение SINCE в кортеже s. CONSTRAINT AUG SP T0 S FK IS EMPTY ( ( ( S SINCE RENAME SINCE AS SS ) JOIN ( SP SINCE RENAME SINCE AS SPS ) ) WHERE SPS < SS ) ; С этого примера мы и начнем рассмотрение основной проблемы хронологических баз данных. Для полухронологической базы данных, аналогичной показанной на рис. 22.2, по-видимому, потребуется установить много расширенных ограничений внешнего ключа , подобных приведенному выше. Поэтому нам, скорее всего, потребуются некоторые подходяшие случаю способы их сокрашенной записи. Запросы ( полухронологическая база данных). Рассмотрим полухронологические версии запросов 1.1 и 1.2. Запрос 2.1. Определить номера поставшиков, которые в настояшее время могут поставить некоторую деталь, показав в каждом случае дату, начиная с которой они способны выполнить эту поставку. Если поставшик с номером Sx в настояшее время может поставить несколько деталей, он может поставить некоторую деталь начиная с наименьшей даты SINCE, которая есть среди значений дат для поставщика с номером Sx в переменной-отношении SP SINCE (например, если в качестве значения номера Sx взять S1, наименьшей датой в столбце SINCE для него будет дата d04). Значит, получаем следующее.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |