|
Программирование >> Хронологические базы данных
22.11. Проектирование базы данных До сих пор переменные-отношения S DURING и SP DURING использовались для иллюстрации типов интервалов и определения специальных операторов для обработки данных интервалов, и нам этого было достаточно. Переменные-отношения первоначально были спроектированы посредством простого добавления атрибутов интервалов к их эквивалентам в базе данных типа моментального снимка. В настояшем разделе мы попытаемся выяснить, насколько хорош такой подход к проектированию. Здесь будет предложена дополнительная декомпозиция определенных хронологических переменных-отношений (под дополнительной декомпозицией здесь понимается декомпозиция, которая не предусматривается требованиями классической нормализации). Фактически в зависимости от обстоятельств предлагается использовать два вида декомпозиции - горизонтальную и вертикальную. Горизонтальная декомпозиция в нашем примере подразумевается, и вполне обоснованно, что в базе данных содержатся исторические данные, включающие некоторое представление сведений о времени. Также предполагается, что представление этих сведений о времени записывалось в виде некоторых конкретных дат (например, день 10). Однако последнее предположение никак нельзя признать обоснованным. В частности, при таком подходе подразумевается, что с течением времени база данных некоторым образом обновляется. В нашем примере предполагалось, что каждое вхождение значения dlO заменяется на dll ровно в полночь дня 10. Если бы в примере использовались интервалы более мелкой зернистости, то могли бы потребоваться и более частые обновления, скажем, каждую миллисекунду! Одни авторы предлагают использовать специальные маркеры (будем называть их маркерами настоящего момента, now), которые допустимы везде, где допустимо точечное значение. Согласно этому подходу, например, интервал [d04,dl0], показанный на рис. 22.4 как значение атрибута DURING для поставщика с номером S1 в переменной-отношении S DURING, должен быть представлен как интервал [d04,now]. Реальное значение такого интервала, конечно, зависит от того, когда именно оно рассматривается; скажем, вдень 14 это был бы интервал [d04,dl4]. Другие авторы считают, что введение маркера настоящего момента- опрометчивое отступление от концепций, на которых базируются реляционные системы. Обратите внимание, что маркер настоящего момента в действительности представляет собой некоторую переменную. Следовательно, предлагается странное - мы бы сказали, логически неоправданное - понятие значений, содержащих переменные. Вот несколько вопросов, возникающих при введении подобного понятия, над которыми полезно поразмышлять. Что произойдет с интервалом [now,dl4] в полночь дня 14? Что собой представляет значение END( [d04,now]) на день 14? Это dl4 или novfl Мы считаем, что дать разумный ответ на такого рода вопросы сложно. Поэтому, по нашему мнению, необходимо найти подход, который не противоречит общепринятым понятиям. Иногда атрибут DURING будет использоваться для записи данных относительно будущего и относительно прошлого (или вместо него). Например, пусть требуется записать дату истечения срока договора с поставщиком или дату его возобновления в будущем. В таком случае можно было бы использовать вариант отношения S DURING, представленный на рис. 22.4. Однако этот подход, очевидно, применим не всегда (в частности, если атрибут DURING интерпретируется как время транзакции (см. раздел 22.2), поскольку время транзакции не может быть будушим). Основная проблема заключается в том, что имеется сушественное различие между историческими данными и данными относительно текушего состояния дел. Для исторических данных известно начальное и конечное время, а для текуших данных обычно известно только начальное время. Отсюда неизбежно следует вывод, что необходимы две различные переменные-отношения: одна - для отражения текушего состояния дел, другая - для исторических данных (в конце концов, они соответствуют двум, определенно, разным предикатам). В случае отношения поставшиков текушая переменная-отношение - это S SINCE, показанная на рис. 22.2, а историческая - S DURING, пред-ставленнгя на рис. 22.4, за исключением кортежей, в значениях атрибута DURING которых конечное время интервала не равно dl О (соответствуюшие данные записываются в переменную-отношение S SINCE). Этим примером иллюстрируется горизонтальная декомпозиция: переменная-отношение с точечным значением атрибута начиная с для текушего состояния и переменная-отношение с интервальным значением атрибута на период для исторических данных. Отметим, кстати, что для пополнения данными исторической переменной-отношения могут использоваться триггерные процедуры. Например, удаление кортежа из переменной-отношения S SINCE может автоматически запускать вставку соответствуюшего кортежа в переменную-отношение S DURING. Для объединения исторических и текуших данных в одном отношении может использоваться реляционный оператор UNION, как, например, показано ниже. S DURING UNION ( EXTEND S SINCE ADD INTERVAL [ SINCE, TODAY() ] AS DURING ) { ALL BUT SINCE } Недостатки горизонтальной декомпозиции проявляются, если значения атрибута DURING интерпретируются как допустимое время, а не как время транзакции. В этом случае исторические данные обновляемы! Здесь могли бы использоваться операторы обновления, описанные в разделе 22.10, но может случиться так, что исправления должны вноситься в обе переменные-отношения. Предположим, например, что обнаружена ошибка в последнем изменении статуса некоторого поставщика. Тогда может потребоваться не только удалить кортеж из переменной-отношения S DURING, но и обновить соответст-вуюший кортеж в переменной-отношении S SINCE. Или другой пример, когда последнее изменение статуса было корректным, но был указан ошибочный день; и в этом случае необходимо внести обновления в обе переменные-отношения. Если переменная-отношение SP DURING подобным образом может быть подвергнута декомпозиции на переменные-отношения SP SINCE и SP DURING, то дополнительно необходимо пересмотреть ограничение внешнего ключа. Для переменной-отношения SP DURING, как мы уже убедились в разделе 22.9, определение может включать следующее предложение. FOREIGN I KEY { St, DURING UNFOLDED } REFERENCES S DURING ... 888 Часть V. Дополнительные аспекты Как указывалось в разделе 22.9, это уточнение служит для того, чтобы в случае, когда согласно данным переменной-отношения SP DURING поставшик с номером Sx может поставлять некоторую деталь в течение времени i, в переменной-отношении S DURING отражалось, что с поставшиком с номером Sx заключен договор, действительный и на время i. Там же говорилось, что ключ {S#,DURING} в переменной-отношении SP DURING может рассматриваться как хронологический внешний ключ. Однако для переменной-отношения SP SINCE соответствующий внешний ключ является лишь полухронологическим . Поэтому мы по-прежнему вынуждены использовать громоздкие выражения для формулирования ограничений, как было показано в разделе 22.3. CONSTRAINT AUG SP TO S FK IS EMPTY ( 7 ( S SINCE RENAME SINCE AS SS ) JOIN ( SP SINCE RENAME SINCE AS SPS ) ) WHERE SPS < SS ) ; Таким образом, горизонтальная декомпозиция неизбежно приводит к определенным проблемам - к проблеме громоздких ограничений и к необходимости одновременного обновления переменных-отношений с текущими и историческими данными. На время написания этой книги не существовало каких-либо конкретных предложений относительно введения сокращений для решения указанных проблем. Возможно, необходимы дальнейшие исследования. Отметим, что эти проблемы не возникают, если разрешить переменной-отношению типа на период включать информацию о будущем, прошлом и настоящем (поскольку переменная-отношение типа с момента тогда не нужна). Однако при таком подходе будущее считается конечным промежутком времени. Указанные проблемы также не возникают при использовании подхода, предлагаемого в [22.4]. Вертикальная декомпозиция Еще до того, как были проведены исследования особенностей хронологических данных (и до того, как для их обработки были разработаны операторы языка SQL), некоторые авторы настаивали на необходимости максимальной декомпозиции переменных-отношений, насколько она возможна , вместо декомпозиции, предусматриваемой правилами классической нормализации. Некоторые из этих авторов, к сожалению, навредили себе, предлагая проекты баз данных, содержащих лишь бинарные переменные-отношения. Одно из критических замечаний относительно этой идеи состояло в том, что иногда необходимы и унарные переменные-отношения. Суть другого замечания заключалась в следующем: некоторые переменные-отношения степени 3 и более на самом деле невозможно подвергнуть декомпозиции (например, переменная-отношение SPJ из базы данных поставщиков, деталей и проектов). С другой стороны, наша обычная (не хронологическая) переменная-отношение S, безусловно, может быть подвергнута дополнительной декомпозиции. Если заданы истинные высказывания Имя поставщика с номером S1 - Smith , Статус поставщика с номером S1- 20 , Поставщик с номером S1 находится в городе London , то можно с уверенностью сделать вывод об истинности высказывания, которое следует из значения первого кортежа для поставщика с номером S1 в базе
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |