|
Программирование >> Хронологические базы данных
данных, представленной на рис. 22.1. Значит, переменную-отношение S можно разбить на три бинарные переменные-отношения, каждая из которых будет иметь в качестве первичного ключа атрибут St. Идея декомпозиции до максимальных пределов мотивируется желанием получить максимально простые элементы. Возможно, для декомпозиции переменной-отношения S это не очень веская причина, однако ее значение сушественно возрастает в случае переменной-отношения S DURING. Имя поставщика, его статус и город нахождения изменяются во времени независимо друг от друга. Более того, они могут изменяться с разной частотой. Например, вряд ли имя поставщика меняется со временем, тогда как место его нахождения иногда изменяется, а его статус может меняться достаточно часто. Но повторение имени и места нахождения поставщика при каждом изменении его статуса может представлять некоторые неудобства. Кроме того, исторические сведения об изменении имени, статуса и места нахождения поставшика, возможно, более интересны и просты, чем история сочетания имя - статус - город . Поэтому предлагается выполнить декомпозицию переменной-отношения S DURING на три исторические переменные-отношения, которые могут быть описаны приблизительно так. S NME DURING { St, SNAME, DURING } S STATUS DURING { St, STATUS, DURING } S CITY DURING { St, CITY, DURING } К каждому из определений этих трех переменных-отношений можно было бы добавить уточнения I KEY {St, DURING UNFOLDED} и COALESCED DURING. Замечание. Можно было бы также добавить основную переменнук:)-отношение поставщиков. St DURING { St, DURING } Эта переменная-отношение могла бы показывать, с какими поставщиками подписывались договора и когда это было. К определению также можно было бы добавить уточнения I KEY {St, DURING UNFOLDED} и COALESCED DURING. Кроме того, ключ {St,DURING} мог бы служить хронологическим внешним ключом в каждой из переменных-отношений S NAME DURING, S STATUS DURING и S CITY DURING (а также SP DURING), соответствующим хронологическому потенциальному ключу в переменной-отношении S DURING. Здесь следует отметить еще одну особенность. Чтобы получить историю изменения статуса поставшика для переменной-отношения S DURING, как она изначально была определена, необходимо использовать не совсем тривиальное выражение. S DURING { St, STATUS, DURING } COALESCED DURING В to же время, чтобы получить значительно менее интересную комбинированную историю, требуется лишь ссылка на эту переменную-отношение. Поэтому в некотором смысле предлагаемая декомпозиция выравнивает игровое поле для запросов, или, скорее, упрощает выражение более интересных запросов, и усложняет выражение менее интересных запросов. Однако необходимость декомпозиции переменной-отношения S SINCE не так уж и непреодолима. В частности, отметим, что, поскольку для пополнения трех исторических переменных-отношений могут использоваться триггерные процедуры (например, удале- ние кортежа из переменной-отношения S SINCE может автоматически активизировать обновление переменных-отношений S# DURING, S NAME DURING, S STATUS DURING и S CITY DURING), нет необходимости в декомпозиции переменной-отношения S SINCE, чтобы достичь тех же результатов. 22.12. Резюме в начале главы был отмечен все возрастаюший интерес к базам данных, содержащим не только текущие, но и исторические сведения. Также было показано, что представление исторических данных с использованием лишь временных отметок (timestamp) приводит к серьезным трудностям и, в частности, очень усложняет задание некоторых ограничений и формулировку определенных запросов. В качестве лучшего подхода рассматривалось использование скалярных ( инкапсулированных ) интервалов: обсуждался генератор типа INTERVAL вместе с несколькими новыми операторами, необходимыми для обработки интервальных данных, хотя все эти операторы, напомним, представляют собой просто некоторые сокращения. Интервалы и связанные с ними операторы могут быть полезны не только для хронологических данных как таковых; к сожалению, наш пример основывался лишь на типе INTERVAL (DATE). В настоящей главе также приводились примеры хронологических отношений и рассматривались хронологические переменные-отношения с атрибутами этого специфического типа. Интервальный тип должен определяться через основной точечный тип, а связанная с ним точность должна указываться (при необходимости) именно для такого точечного типа. Кроме того, для данного точечного типа и заданной точности должна быть определена функция следования. Рассмотренные здесь операторы включали операторы для обработки собственно интервалов, операторы для обработки множеств интервалов и операторы для обработки хронологических отнощений. К операторам для обработки интервалов относятся START и END, а также операторы Аллена. К операторам для обработки множеств интервалов относятся UNFOLD и COALESCE. К операторам для обработки хронологических отношений относятся реляционные версии операторов UNFOLD и COALESCE. Также здесь обсуждались некоторые специализированные операторы обновления и некоторые специализированные ограничения целостности для хронологических переменных-отношений ( хронологические ключи ). Было показано, что большинство из этих новых операторов могли бы фактически рассматриваться как хронологические аналоги соответствующих обычных конструкций. Далее были рассмотрены две важные канонические формы для множеств интервалов одного и того же типа - развернутая форма и свернутая форма. Множество интервалов типа INTERVAL (РГ) представлено в развернутой форме, если каждый интервал в множестве является единичным интервалом, т.е. интервалом, содержащим ровно одну точку, где точка - это значение основного точечного типа РГ. Множество интервалов типа INTERVAL (РГ) представлено в свернутой форме, если никакие два отдельных интервала в этом множестве не перекрываются и не являются смежными. Обе канонические формы обладают преимуществом освобождения от определенных видов избыточности. Свернутая форма максимально краткая и имеет психологические преимущества, а развернутой формой легче оперировать (избавляют от необходимости иметь специальные ограничения и операторы обновления, рассмотренные в разделах 22.9 и 22.10). Затем было показано, как концепции этих канонических форм могут быть расширены до отношений с интервальными атрибутами, что приводит к новым важным реляционным операторам UNFOLD и COALESCE. Эти операторы использовались для определения хронологических аналогов обычных реляционных операторов проекции и вычисления разности. И наконец было уделено внимание вопросам проектирования базы данных, связанным с горизонтальной и вертикальной декомпозициями некоторых хронологических переменных-отношений. Упражнения 22.1. а) В языке SQL тип данных VARCHAR( 3) включает все строки длиной до трех символов, входящих в набор символов по умолчанию, под которым подразумевается набор символов кода ASCII. Как вы полагаете, можно ли считать тип INTERVAL{VARCHAR(3)) приемлемым интервальным типом? б) Если ваш ответ на предыдушлй вопрос - Да , то выразите закрыто-открытый интервал [ р, q) этого типа с помощью закрыто-закрытого обозначения интервала. 22.2. В разделе 22.8 был определен оператор получения хронологической разности I MINUS. Операторы хронологического объединения (I UNION) и хронологического пересечения (I INTERSECT) могут быть определены аналогично. Дайте соответствующие определения этим операторам. 22.3. Предположим, что переменная-отношение S DURING имеет офаничение, требующее, чтобы она была свернута по атрибуту DURING, и предположим, что необходимо обновить эту переменную-отношение с целью отразить тот факт, что поставщику с номером S1 присвоен статус 20 на период с дня 11 по день 15. Приведите оператор, с помощью которого можно получить желаемый результат. При этом нельзя считать, что операторы обновления расширены так, как было предложено в разделе 22.10. Однако можно считать, что переменная-отношение S DURING содержит данные о поставщике с номером S1 на день 10, а данные после этого дня для него отсутствуют. Не делайте никаких предположений относительно того, каким может быть существующий статус поставщика с номером S1 на день 10. 22.4. В этой главе было показано, как определенные операторы, которые применяются к интервальным атрибутам вообще, в частности могут оказаться очень полезными и для хронологических интервалов. Предложите какие-либо иные возможные применения этих операторов для обработки интервалов, которые не являются хронологическими. 22.5. Приведите реальные примеры отношений, у которых имеется более одного интервального атрибута (хронологического или иного типа). 22.6. Еще раз обратимся к переменной-отношению S DURING. В любое заданное время, если имеются какие-либо поставщики, с которыми на этот период был заключен договор, имеется и некоторый статус smax, такой, что ни один из поставщиков в этот период не имел статус выше статуса smax. С помощью описанных в этой главе
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |