Введение в системы БД (542480), страница 231
Текст из файла (страница 231)
2ХЯ. 878 Часть )'. Дополнительные аспекты Напомним, что в исходной версии этого запроса (запрос 1.2) использовалась операция получения реляционной разности. Поэтому вы не ошибетесь, если предположите, что в данном случае нам потребуется новая операция, которая будет называться "хронологическая разность". Также можно рассчитывать на то, что как "хронологическая проекция" требует "реляционного свертывания", так "хронологическая разность*' потребует "реляционно~о развертывания". Операция получения "хронологической разности", как и обычная операция вычитания, включает два операнда типа отношений. Сначала рассмотрим левый операнд. Если мы развернем результат обычной проекции Я 00Е1МО (Я(),ООЕ106) по атрибуту ООЕ1Е6, то получим отношение (скажем, Т1), которое будет выглядеть следующим образом.
При использовании данных, представленных на рис. 22.4, отношение Т1 будет содержать всего 23 кортежа. (Упражнение. Проверьте достоверность этого утверждения.) Если определить версию "унарного отношения" лля оператора ОЕРОЬО по аналогии с версией "унарного отношения" для оператора СОЫЕЯСЕ, то отношение Т1 можно будет получить таким образом. ( ЕХТЕЕО ( Б ООЕ1Ы6 ( Я(), ООЕ1ЫО ) 6ЕООР ( 00Е1МО ) АБ Х ) А00 ОЕРОЫ ( Х ) АБ 1 ( ЫЬ ВОТ Х ) ОИОЕООР 1 Однако, как уже указывалось, это выражение можно упростить, если ввести оператор "реляционного развертывания" со следующим синтаксисом. К ОИРОЕО А Теперь можно записать следующее. Е1ТЕ ( Я ООЕ106 ( Б(, 00Е1ЕО ) БЕРОЕВО ООЕ106 ) АЯ Т1 г Правый операнд "хронологической разности" мы представляем следующим образом.
И1ТН ( ЯР 002106 ( Я(), ООЕ1ЕО ) ПЕРОВО 00Е1Е6 ) АЯ Т2 879 (лава 22. Хронологические базы данных Воспользуемся обычной операцией реляционного вычитания. И1ТН ( Т1 ИХИНЯ Т2 ) йЯ Т3 Отношение Т3 выглядит так. И наконец, чтобы получить требуемый результат, свернем отношение Т3 по атрибуту 00Н1И6. 1)()К1Х0 62 ЯЗ Яб (сЕО 74(0 7) [аОЗл(07) долл(10 Теперь сформулируем запрос 4.2 в виде одного вложенного выражения. ( ( Я 00Й1М6 ( Я(), 0021И6 ) НИРОЬН 00Н1И6 ) И1ИОЯ ( БР 00Н1И6 ( Я(), 0011И6 ) ОИГОЬО 0021И6 ) ) СОАЬЕБСЕ 0021И6 ЗО Обратите внимание, что для операции времекиоб проекции явного аокращеяия мы не определяли.
880 Часть р'. дополнительные аспекты Как уже отмечалось, всю операцию, обозначаемую этим выражением, часто называют хронологической разностью (точнее, "хронологической разностью" между проекциямн Я РНН1И6 и ЯР 0021И6 по атрибутам Я() и 00Н1М6). Замечание. Как и хронологическая проекция, хронологическая разность не является, строго говоря, разностью как таковой, а представляет собой "хронологический аналог" обычной разности. Однако это еше не все. Выражения, подобные приведенному выше и использующие "хронологическую разность*'„настолько часто встречаются на практике, что, пожалуй, стоит определить еше одно дополнительное сокрашенне'о.
А именно, целесообразно представить в виде единой операции приведенную ниже последовательность действий: а) развернуть оба операнда; б) получить разность; в) свернуть полученный результат. Кроме того, подобное сокращение имеет дополнительное преимущество — появляется возможность повышения производительности. Если используются длинные интервалы с мелкой зернистостью, то результат развертывания отношения может быть очень большим по сравнению с ее операндом. Если система будет реально материализовать оба развертывания, вычислять разность и затем путем свертывания получать результат, то такой запрос может выполняться "вечно'* или же приводить к переполнению доступного дискового пространства. Выражение хронологической разности в виде одной операции может помочь оптимизатору "понять", что именно требуется, н, возможно, избежать реального выполнения каких-либо развертываний.
Ниже предлагается такое дополнительное сокращение. К1 1 81808 К2 ОН А Здесь К1 и Н2 — реляционные выражения, обозначающие отношения г1 и г2 одного и того же типа, а А — атрибут некоторого интервального типа, общего для обоих отношений (префикс 1, конечно же, указывает на "интервал").
Из сказанного выше должно быть более или менее ясно, что определяемое выражение будет семантически равносильно следующему выражению. ( ( НХ ОНГОПП А ) М1808 ( 82 ПНЕОЬП А ) ) СОАПЕБСЕ А Дальнейшее обсуждение операторов вида "1 ", подобных оператору 1 М1808, будет продолжено в упр. 22.2. 22.9.
Ограничения, включающие интервалы Очевидно, что пара атрибутов (8(,008186) является потенциальным ключом для переменной-отношения Я 008186. На рис. 22.4 для данного ключа использовалось подчеркивание двойной линией, указывающее, что это первичный ключ. Отметим, что атрибут (Я() сам по себе не является потенциальным ключом, поскольку после завершения действия договора с некоторым поставщиком может быть заключен новый договор, как, например, в случае поставщика с номером '82' в базе данных, представленной на рис.
22.4. Таким образом, переменную-отношение Я ПОК1Н6 можно определить так. ЧАК Я ПОК186 ЕАЯЕ КЕЬАТТОН ( 8( 8$, БНАМЕ НАНЕ, БТАТОЯ 1НТЕОЕК, С1ТХ СМАК, ПОК186 1НТЕКЧА1 ( ПАТЕ ) ) КЕХ ( 8(, ПОК186 ) ; /* Предупрекденне: этого недостаточно! */ Однако определение ключа, как оно здесь представлено, не полностью отвечает необходимым требованиям, несмотря на то что оно логически корректно.
А именно, согласно этому определению в переменной-отношении Я ПОК1Н6 допустимы, например, два таких кортежа. 82 допев 10 Раг1в (д02.г)ОВ) 82 допев 10 Раг1в 407,с(10 Как видите, в этих кортежах имеется определенная избыточность, поскольку данные о наличии договора с поставщиком с номером '82' в дни 7 и 8 представлены дважды. 881 Глава 22. Хронологические.
базы данных Данный вариант предложения КЕ1 имеет и другой недостаток; оно не исключает возможности появления в переменной-отношении Я ООК1М6, например, таких двух кортежей. Я2 допев 10 Рапе (д02л/06) 32 допев 10 Раг)а до 7,д10 В этом случае уже нет избыточности данных, однако имеется излишнее многословие, поскольку два кортежа используются для того, чтобы "сказать" то, что можно выразить в одном кортеже. Я2 допев 10 РаНа д02.Ж 0 Чтобы предотвратить подобные случаи избыточности и излишнего "многословия", для переменной-отношения, очевидно, необходимо предоставить соответствующее ограничение (назовем его ограничением С1), которое может быть сформулировано так.
Если два отдельных кортежа переменной-отношения Б ООК1М6 идентичны, за исключением лишь значений их атрибутов ООК1М6, равных /! и /2, то результат операции 11 ИЕКОЕЯ 12 должен иметь значение ложь. (Напомним, что операция проверки слияния интервалов ИЕВОЕЯ представляет собой логическую конъюнкцию (ОК) операций перекрытия интервалов ОЧЕКЬАРЯ и проверки смежности МЕЕТЯ. Поэтому операция ИЕКОЕЯ может возврашать результат ложь только в том случае, если он будет получен и для обеих операций ОЧЕКЬАРБ и ИЕЕТБ. Ограничение перекрытия интервалов с помошью операции ОЧЕВЬАРБ служит для предотврашения избыточности, а ограничение смежности интервалов с помошью операции ИЕЕТЯ используется, чтобы предотвратить излишнее "многословие".) Должно быть ясно, что сушествует очень простой способ реализации ограничения С1, а именно — посредством постоянной поддержки переменной-отношения Я ООК1М6 в свернутом состоянии по всем значениям времени атрибута 00К1М6. Поэтому добавим к определению этой переменной-отношения предложение СОАЬЕЯСЕО, которое в обшем случае является необязательным.
ЧАК Я ООК1М6 БАБЕ КЕЬАТХОМ ( ЯБ Я$, ЯМАИЕ МАМЕ, БТАТОЯ 1МТЕОЕК, С1Т1 СНАМ, ООКХМ6 1МТЕКЧАЬ ( БАТЕ ) КЕ1 ( Я$, ООК1М6 ) /* Этого по-прежнему недостаточно! */ СОА1ЕБСЕО ООК1М6 Уточнение СОАЬЕЯСЕО ООК1М6 в данном случае означает, что переменная-отношение Я ООК1МО должна по всем значениям времени быть идентичной результату выражения Я ООК1М6 СОАЬЕЯСЕО ООК1М6 (подразумевается, что теперь свертывание переменной- отношения Я ООК1М6 по атрибуту ООК1М6 в любых выражениях никогда не будет оказывать на нее какого-либо влияния). Таким образом, в этом определении проблемы избыточности и "многословия" по-прежнему остались нерешенными". Ы Отметим, что можно добавить аргумент с целью обеспечения соответствующего спецыольного синтаксиса для решения проблемы избыточности, но пе проблслчы "многословия ".
882 Часп~ь )г. дополнительные оспекгпы Замечание. Пока подразумевается, что любая попытка обновить переменную- отношение Б ППК1НС так, чтобы она оказалась не полностью свернутой по атрибуту ППК1НС, отвергается. Обсуждение этого вопроса будет продолжено в разделе 22.10. К сожалению, предложения КЕУ и СОАЕЕБСЕП все еше не полностью отвечают необходимым требованиям. Например, по-прежнему возможно появление таких двух кортежей. Б2 допев 10 Раг)в (в02,о06] Б2 допев 20 РаПя В07,ЖО В зтом случае поставщик с номером 'Б2' в дни 7 и 8 имеет статус 1О и 20 (ясно, что наличие таких кортежей недопустимо).
Другими словами, здесь мы имеем дело с нротиваречиеч. Понятно, что для устранения таких противоречий необходимо обеспечить для переменной-отношения соответствующее ограничение. Назовем его ограничениеч С2. Оно может быть сформулировано следующим образом. Если два отдельных кортежа переменной-отношения Б ППВ1МС с одним и тем же значением атрибута Б$ имеют значения атрибута ППВ1НС, равные 11 и 12 соответственно, и выражение 11 ОЧЕКЕАРЯ 12 истинно, то эти кортежи должны быть идентичны, за исключением, может быть, значений их атрибута ППВ1НС.
Необходимо подчеркнуть, что ограничение С2 не реализуется поддержкой переменной-отношения Я ППК1НС в свернутом состоянии по атрибуту ППК1НС (и, очевидно, не реализуется за счет того, что (8$,ППК1НС) является потенциальным ключом). Но если предположить, что переменная-отношение Я ППВ1МС всегда поддерживается развернутой по атрибуту ППК1МС, то справедливы следующие замечания. ° Единственный потенциальный ключ для развернутой формы переменной- отношения Я ППВ1НС ПМЕОЬП ППК1НС вЂ” это все та же комбинация атрибутов (8$,ППВ1НС), поскольку в любое заданное время любой заланный поставщик, с которым в данное время заключен договор, имеет только одно имя, один статус и находится в одном городе.