Введение в системы БД (542480), страница 228
Текст из файла (страница 228)
Здесь мы не будем пытаться решить эту проблему, а отложим ее обсуждение до раздела22.9. Однако отметим, что если, как указывалось ранее, сочетание атрибутов 184,ГКОМ,ТО) в переменной-отношении Я ГЮМ ТО считается "хронологическим потенциальным ключом*', то сочетание атрибутов 1Я),ГКОМ,ТО) в переменной-отношении ЯР ГКОМ ТО можно считать "хронологическим виешиии ключом" (хотя он на самом деле не является внешним ключом как таковым).
Обсуждение этого вопроса также будет продолжено в разделе 22.9. Запросы (первая хронологическая база данных). Рассмотрим полные хронологические версии запросов !. ! и !.2. ° Запрос 3.!. Получить тройки значений атрибутов Я$, ГЮМ и ТО для поставщиков, которые в некоторое время могут поставить некоторую деталь, где ГЮМ и ТО вместе означают максимальный непрерывный период, в течение которого поставщик с номером Я) действительно мог поставить некоторую деталь.
Замечание. Здесь слово "максимальный" используется как удобное сокращение, которое в данном случае означает, что поставщик с номером Я) не мог поставить ни одной детали до дня ГЮМ и после дня ТО. ° Запрос 3.2. Получить тройки значений атрибутов Я4, ГЮМ и ТО для поставщиков, которые в определенное время не могут поставить никаких деталей, где ГЮМ и ТО вместе означают максимальный непрерывный период, в течение которого поставщик с номером Я$ действительно не мог поставлять никаких деталей. Вероятно, вам не потребуется много времени, чтобы, как и нам, предпочесть даже не приступать к написанию этих запросов! Если вы все-таки предпримете такую попытку, то в конце концов тот факт, что эти запросы можно выразить, хотя и чрезвычайно трудно, станет вам известен.
Также несомненно, что вы придете к выводу о крайней желательности соответствующих сокрашений. Можно сделать заключение, что суть проблемы хронологических данных состоит в том, что их наличие требует создания ограничений и запросов, которые чрезмерно сложны, чтобы их сформулировать, если, конечно, системой не предоставляются удачно разработанные сокрашения, которых, как нам известно, коммерческие СУБД в настоящее время не имеют. 22.4. Интервалы А теперь займемся разработкой соответствующего набора сокрашений. Первый и наиболее важный шаг — понять необходимость применения интервалов как таковых вместо того, чтобы интерпретировать их как пары отдельных значений, как мы это делали до сих пор. Что же конкретно представляет собой интервал времени? Согласно рис.
22.3 поставщик с номером '81' мог поставлять деталь с номером 'Р1' в течение интервала с дня 4 по день 1О. Но что означает выражение "интервал с дня 4 по день 1О"? Ясно, что дни 5, б, 7, 8 и 9 в него включаются, но что можно сказать о начальной и конечной точках, о 867 Глава 22.Хронолоеические базы данньп днях 4 и 107 Оказывается, задавая некоторый конкретный интервал, мы иногда считаем, что указанные начальная и конечная точки включаются в интервал, а иногда — нет. Если интервал с дня 4 по день 1О включает день 4, то говорят, что он закрыт относительно его начальной точки, в противном случае говорят, что интервал открыт относительно его начальной точки.
Точно так, если интервал включает день 1О, то говорят, что он закрыт относительно его конечной точки, в противном случае говорят, что интервал открыт относительно его конечной точки. Поэтому принято обозначать интервал начальной и конечной точками (именно в этом порядке), предваряя его открываюшей квадратной скобкой или открываюшей круглой скобкой и заключая его закрывающей квадратной скобкой или закрывающей круглой скобкой.
Квадратные скобки используются, когда интервал закрыт, а круглые скобки— когда он открыт. Таким образом, интервал, например, с 4 по 1О день, можно обозначить четырьмя различными способами. [004,Ж0] (с(04, 011) (с(03,с(10] (с[03,011) Замечание. Вам может показаться странным, например, что используются открываюшая квадратная скобка и закрываюшая круглая скобка. Однако есть веские причины использования всех четырех вариантов обозначения интервалов. В действительности на практике наиболее часто используется так называемый "закрыто-открытый" вариант (открывающие квадратные скобки и закрывающие круглые скобки)ь.
Однако "закрыто-закрытый" вариант (открываюшие квадратные скобки и закрывающие квадратные скобки), несомненно, наиболее интуитивно понятный, и поэтому мы будем отдавать предпочтение именно ему. Поскольку интервалы, такие как (с(04,с(10], сами по себе являются значениями, имеет смысл объединить атрибуты ГИОИ и ТО переменной-отношения, скажем, БР ГИОИ ТО (см. рис. 22.3)„в отдельный атрибут 0001ИО, значения которого берутся из интервального типа (подробности приводятся в следующем разделе). Непосредственное преимущество этой идеи заключается в том, что отпадает необходимость в произвольном выборе одного из двух потенциальных ключей ([Б],ГИОИ] или (Б],ТО]) в качестве первичного.
Еще одно преимушество состоит в том, что теперь не нужно решать, как интерпретировать интервалы ГИОИ-ТО, показанные на рис. 22.3, — как закрытые или как открытые по отношению к каждому значению атрибутов РИОИ и ТО. Фактически интервалы [с)04,с)10], [004,011), (бОЗ,ЖО] и (603,011) теперь становятся четырьмя отдельными возможными представлениями одного и то же интервала и нам нет необходимости знать, каково реальное представление.
К тому же к преимушествам можно отнести и то, что ограничения переменной-отношения для предотвращения появления "ошибочных пар атрибутов РИОИ-ТО, в которых точка ТО предшествует точке РЙОИп (как указывалось в разделе 22.3) больше не нужны, поскольку ограничение ' РБОИ < ТО" подразумевается в В Чтобы понять, почему "закрыто-открытый" вариант интервала лчожепю быть более предпочпттельныль рассмотрим операцию разбиения интервала [с)04,с)10] перед, скажель днем 007.
В результате получим слчежные интервалы 1й04,с)07) и 1й07,с)10/. 868 Часть )'. Дополнительные аспекты самом понятии интервального типа. Также является преимуществом то, что теперь не придется иметь дело с "хронологическими ключами", которые на самом деле таковыми не являются (в классическом понимании этого термина), как указывалось в разделе 22.9. Остальные ограничения, которые рассматривались в разделе 22.9, также могут быть упрощены. На рис.
22.4 показано, как изменится наш пример базы данных, если использовать этот новый подход. 22.5. Интервальные типы В предыдущем разделе рассуждения об интервалах основывались, по существу, на интуиции. Теперь необходимо изложить этот подход более формально. Отметим, что зернистость интервального значения (д04,д10) — "дни". Точнее, можно сказать, что зернистость относится к типу РТЕ, т.е. мы подразумеваем, что единица измерения зернистости принадлежит к обычному семейству типов даты и времени, а его размерность — "день" (в противоположность, скажем, "часам", "миллисекундам" или "месяцам").
Исхоля из данного замечания можно точно определить тип интервального значения (с(04,с(10]. Я ?ПЖ11чб ЯР 1НУК11ЧО Рис. 22.4. База данных поставщиков и деталей (значения для прииера): окончательный вариант полной хронологической версии с использованием интервалов ° Во-первых, это, конечно, некоторый интервальный тип. Только одного этого факта достаточно, чтобы определить аперагпары, которые применимы к рассматриваемому интервальному значению (точно так, когда говорят, например, что, ес- З69 Глава 22.
Хронологические базы данных ли значение г относится к типу отношение, этого достаточно, чтобы определить операторы (301М и т.д.), которые применимы к значению г). ° Во-вторых, рассматриваемое интервальное значение является интервалом от одной даты до другой, и этого факта достаточно для того, чтобы определить множество интервальных значений, которые составляют рассматриваемый интервальный тип. Таким образом, тип значения (с)04,ЖР) — 1МТЕЕЧАР(РАТХ), где а) 1МТЕЕЧАР— генератор типа, подобный ЕЕЬАТ10М в языке Ттоша! В (см, главу 5) или массиву актау в обычном языке программирования; этот генератор типа позволяет определить множество конкретных типов интервалов, которые будут рассмотрены далее; б) ВАТŠ— точечный тип данного интервального типа.
Следует подчеркнуть, что в общем случае точечный тип РТ определяет тип и личность начальной и конечной точек, а также всех точек между двумя последними, которые имеют значения типа 1МТЕЕЧАЬ(РТ). (В случае типа РАТЕ точность, конечно, задается неявно.) Замечание. В главе 4 уже отмечалось, что точность не является частью соответствуюшего типа и должна задаваться ограничением иелостнасти. Например, в объявлениях РЕСРАЕЕ Х Т1ИЕЯТАИР(3) и РЕСРАЕЕ У Т1МЕЯТАИР(б) атрибуты Х и У имеют один и тот же тип, но зависят от различных ограничений (согласно этим ограничениям в атрибуте Х должны содержаться значения в миллисекундах, тогда как значения атрибута У измеряются в микросекундах). Поэтому, строго говоря, чтобы сказать, например, что Т1МЕЯТАИР(3) и РАТŠ— это допустимые точечные типы, необходимо объединить два понятия, которые лучше было бы иметь отлельными понятиями.
Вместо этого, пожалуй, было бы предпочтительнее определить два типа Т1 и Т2, оба с возможными представлениями типа временных отметок Т1ИЕЯТАИР, но с различными "ограничениями точности". Затем можно сказать, что допустимыми точечными типами являются типы, Т1 и Т2 (а не, например, Т1МЕЯТАИР(3) и Т1ИЕЯТАМР(6)). Однако для простоты мы следуем в этой главе общепринятой практике и условно считаем, что точность действительно является частью типа.