|
Программирование >> Хронологические базы данных
SUMMARIZE SP PER SP { Sl} ADD MIN { SINCE } AS SINCE Результат будет таким, как показано ниже.
Запрос 2.2. Определить номера поставщиков, которые в настоящее время не могут поставить ни одной детали, показав в каждом случае дату, начиная с которой они оказались в этом положении. В нащей базе данных имеется один поставщик, который в настоящее время не может поставить ни одной детали, - это поставщик с номером S5. Однако нельзя сделать какой-либо вывод о дате, начиная с которой поставщик с номером S5 не может поставить ни одной детали, поскольку для этого у нас нет данных - база данных пока лищь олдхронологическая . Предположим, например, что текущий день - это dlO. Тогда может оказаться, что поставщик с номером S5 мог поставлять по крайней мере одну деталь начиная с даты, которая меньше даты d2, если с ним ранее был подписан договор, срок действия которого истек не позднее, чем d09. Также возможен крайний случай, когда поставщик с номером S5 вообще никогда не имел возможности что-либо поставлять. Чтобы иметь хоть какие-то шансы получить ответ на запрос 2.2, необходимо завершить хронологизацию базы данных или по крайней мере выполнить это в отношении переменной-отнощения SP. Точнее, необходимо сохранить в базе данных исторические записи, свидетельствующие о том, какие поставщики, когда и какие именно детали могли поставлять. Именно это мы и попытаемся сделать в следующем разделе. Полностью хронологическая база данных поставщиков и поставок На рис. 22.3 показано содержимое полностью хронологической версии базы данных поставщиков и поставок. Обратите внимание, что атрибуты SINCE переименованы в атрибуты FROM (От) и, кроме того, в каждую переменную-отношение добавлен новый атрибут типа временной отметки с именем ТО (До). Совместно атрибуты FROM и ТО отражают понятие интервала времени, в течение которого что-то истинно. Поэтому в именах переменных-отношений заменим слово SINCE (Начиная с) словом FR0M T0 (От и до). Как видите, теперь в новой базе данных стапо больше кортежей, чем в предыдущем варианте, поскольку в ней сохранены исторические записи. Для определенности будем подразумевать, что текущая дата- это dlO, поэтому значение даты dlO для атрибута ТО означает, что соответствующий кортеж отражает текущее состояние дел. Замечание. Возможно, читателю интересно, что это за механизм, который приводит к тому, что все значения атрибута ТО, которые совпадают с текущей датой dl О, автоматически заменяются значением dll по бою часов в полночь. К сожалению, ответ этот вопрос мы вынуждены на некоторое время отложить, но мы вернемся к нему в разделе 22.11. Заметим, что хронологическая база данных, показанная на рис. 22.3, включает все данные из предыдущего полухронологического аналога, представленного на рис. 22 2, дополненные историческими сведениями, относящимися к предыдущему периоду (от d02 до d04), в течение которого был действителен договор с поставщиком с номером S2. Предикат для переменной-отношения S FROM TO можно сформулировать так: Поставщик с номером Sine именем SNAME имел статус STATUS, находился в городе CITY и имел договор на поставку, действительный с дня FROM (и не действительный в день, предшествующий дню FROM) по день ТО (и не действительный в день, следующий за днем ТО) . Для переменной-отношения SP FROM TO предикат построен по аналогичному принципу. S FROM ТО
SP FROM TO
Puc. 22.3. База данных поставщиков и деталей (значения для примера): первая полностью хронологическая версия с использованием временных отметок Ограничения (первая хронологическая база данных). Прежде всего необходимо принять меры, чтобы в кортежах не появлялись ошибочные пары атрибутов FR0M-T0, в которых момент ТО предшествует моменту FROM. CONSTRAINT S FR0M T0 0K IS EMPTY ( S FR0M T0 WHERE TO < FROM ) ; CONSTRAINT SP FR0M T0 0K IS EMPTY { SP FROM TO WHERE TO < FROM ) ; Теперь обратите внимание на атрибуты, подчеркнутые на рис. 22.3 двойной линией. Как видите, атрибут FROM включен в первичный ключ обеих переменных-отношений, S FROM TO и SP FROM TO. Очевидно, что первичный ключ переменной-отношения S FROM TO не может быть просто {Sl}, поскольку в этом случае в переменную-отношение нельзя было бы включить сведения об одном и том же поставшике, с которым договоры на поставку заключались на несколько различных периодов. Точно такие же соображения применимы и в отношении переменной-отношения SP FROM TO. Замечание. В первичный ключ вместо атрибута FROM можно было бы включить атрибут ТО. Фактически обе переменные-отношения, S FROM TO и SP FROM ТО, имеют по два потенциальных ключа и являются типичным примером переменных-отношений, для которых нет никаких очевидных причин выбирать один из имеющихся потенциальных ключей в качестве первичного [8.13]. Мы сделали указанный выбор исключительно для определенности. Однако этими первичными ключами не исчерпываются все ограничения, которые нам хотелось бы иметь. Рассмотрим, например, переменную-отношение SP FROM TO. Должно быть ясно, что если в такой переменной-отношении есть кортеж для поставщика с номером Sx со значением f атрибута FROM и значением t атрибута ТО, то нам хотелось бы, чтобы в этой переменной-отношении не было какого-нибудь другого кортежа для поставщика с номером Sx, из значения которого следовало бы, что этот поставщик заключил договор со дня, непосредственно предшествующего дню f, или по день, непосредственно следующий за днем t. Например, рассмотрим поставщика с номером Sl, для которого в переменной-отношении SP FROM TO имеется один кортеж со значениями атрибутов FROM=d04 и fO=dlO. Одного того, что {Sl,FROM} является первичным ключом для этой переменной-отношения, очевидно, недостаточно, чтобы предотвратить появление других перекрывающихся кортежей для поставщика с номером S1, например кортежа со значениями атрибутов FROM=d02 и fO=d06. Если бы такой кортеж появился, то это, кроме всего прочего, указывало бы, что с поставщиком с номером S1 был заключен договор, который являлся действительным в день, непосредственно предшествующий дню d04. Вероятно, следовало бы объединить такие два кортежа в один кортеж, в котором значения атрибутов были бы соответственно равны FROM=d02 и TO=dJ0. Кроме того, лишь одного факта, что {Sl,FROM} является первичным ключом для переменной-отношения SP FROM TO, также недостаточно, чтобы предотвратить появление смежных кортежей для поставщика с номером Sl, например таких, в которых значениями атрибутов будут FROM=d02 и TO=dOJ. В данном случае это означало бы, что с поставщиком с номером S1 был заключен договор, действительный, включая день, который непосредственно предшествует дню d04. Как и в предыдущем случае, такие кортежи должны быть объединены в один общий кортеж. Заметим, что если не объединить такие кортежи, это будет почти равносильно разрешению существования дубликатов! Наличие дубликатов означает, что в базе данных об одном и том же говорится дважды . Однако два кортежа для поставщика с номером S1 с перекрывающимися интервалами времени фактически говорят об одном и том же дважды , а именно - оба они утверждают , что с поставщиком с номером S1 был заключен договор, срок действия которого включает дни 4, 5 и 6.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |