Введение в системы БД (542480), страница 227
Текст из файла (страница 227)
Значит, получаем следующее. 862 Часть )г. дополнительные аспекты я))ммйе1яе яР Рее яР ( я)) )цзп м1м ( я1мсе ) Ая я1исе Результат будет таким, как показано ниже. ° Запрос 2.2. Определить номера поставщиков, которые в настоящее время не могут поставить ни одной детали, показав в каждом случае дату, начиная с которой они оказались в этом положении. В нашей базе данных имеется один поставщик, который в настоящее время не может поставить ни одной детали, — это поставщик с номером 'Я5'. Однако нельзя сделать какой-либо вывод о дате, начиная с которой поставщик с номером 'Я5' не может поставить ни одной детали, поскольку для этого у нас нет данных — база ланных пока лишь "полухронологическая". Предположим, например, что текущий день — это ЖО. Тогда может оказаться, что поставщик с номером 'Я5' мог поставлять по крайней мере одну деталь начиная с даты, которая меньше даты г)2, если с ним ранее был подписан договор, срок действия которого истек не позднее, чем 609.
Также возможен крайний случай, когда поставщик с номером 'Я5' вообще никогда не имел возможности что-либо поставлять. Чтобы иметь хоть какие-то шансы получить ответ на запрос 2.2, необходимо завершить "хронологизацню" базы данных или по крайней мере выполнить это в отношении переменной-отношения ЯР. Точнее, необходимо сохранить в базе данных исторические записи, свидетельствующие о том, какие поставщики, когда и какие именно детали могли поставлять. Именно это мы и попытаемся сделать в следующем разделе. Полностью хронологическая база данных поставщиков и поставок На рис.
22.3 показано содержимое полностью хронологической версии базы данных поставщиков и поставок. Обратите внимание, что атрибуты Я1МСЕ переименованы в атрибуты ГЕОМ (От) и, кроме того, в каждую переменную-отношение добавлен новый атрибут типа временной отметки с именем ТО (До). Совместно атрибуты ГкОМ и ТО отражают понятие интервала времени, в течение которого что-то истинно. Поэтому в именах переменных-отношений заменим слово Я1МСЕ (Начиная с) словом ГЕОМ ТО (От и до).
Как видите, теперь в новой базе данных стало больше кортежей, чем в предыдущем варианте, поскольку в ней сохранены исторические записи. Для определенности будем подразумевать, что текущая дата — это 010, поэтому значение даты Ж0 для атрибута ТП означает, что соответствующий кортеж отражает текущее состояние дел. Замечание. Возможно, читателю интересно, что это за механизм, который приводит к тому, что все значения атрибута ТО, которые совпадают с текущей датой г)10, автоматически заменяются значением с)11 по бою часов в полночь.
К сожалению, ответ этот вопрос мы вынуждены на некоторое время отложить, но мы вернемся к нему в разделе 22.11. 863 Глава 22. Хронологические базы данньп Заметим, что хронологическая база данных, показанная на рис. 22.3, включает все данные из предыдущего "полухронологического" анапа~а, представленного на рис. 22 2, дополненные историческими сведениями, относящимися к предыдущему периоду (от 002 до 004), в течение которого был действителен договор с поставщиком с номером 'Я2'. Предикат для переменной-отношения Я ГНОМ ТО можно сформулировать так; "Поставщик с номером Я4 и с именем ЯМАМЕ имел статус ЯТАТОБ, находился в городе С1ТХ и имел договор на поставку, действительный с дня ГНОМ (и не действительный в день, предшествующий дню РКОМ) по день ТО (и не действительный в день, следующий за днем ТО)". Для переменной-отношения БР ГНОМ ТО предикат построен по аналогичному принпипу.
Я РКОМ ТО ЯР РКОМ ТО Рис. 22.3. База данных поставщиков и детачей (значения для примера): первая полно- стью хронологическая версия с использованием временных отметок Ограничения (первая хронологическая база данных). Прежде всего необходимо принять меры, чтобы в кортежах не появлялись ошибочные пары атрибутов ГНОМ-ТО, в которых момент ТО предшествует моменту РКОМ. СОМЯТКА1ЫТ Я РКОМ ТО ОК 1Б ЕМРТХ ( Б ГНОМ ТО ИНЕКЕ ТО < ГНОМ ) ) СОМЯТКА1МТ ЯР ГНОМ ТО ОК 1Б ЕМРТХ ( ЯР РКОМ ТО ИНЕКЕ ТО < УКОМ ) ) 864 Часть )г. дополнительные аспекты Теперь обратите внимание на атрибуты, подчеркнутые на рис.
22.3 двойной линией. Как видите, атрибут ГЯОМ включен в первичный ключ обеих переменных-отношений, Я ГМОМ ТО и ЯР ГКОМ ТО. Очевидно, что первичный ключ переменной-отношения Б ГЮМ ТО не может быть просто (Я(Н поскольку в этом случае в переменную- отношение нельзя было бы включить сведения об одном и том же поставщике, с которым договоры на поставку заключались на несколько различных периодов. Точно такие же соображения применимы и в отношении переменной-отношения БР ГЮМ ТО. Замечание. В первичный ключ вместо атрибута ГЮМ можно было бы включить атрибут ТО. Фактически обе переменные-отношения, Б ГБОМ ТО и БР ГЮМ ТО, имеют по два потенциальных ключа и являются типичным примером переменных-отношений, для которых нет никаких очевидных причин выбирать один из имеющихся потенциальных ключей в качестве "первичного" [8.131.
Мы сделали указанный выбор исключительно для определенности. Однако этими первичными ключами не исчерпываются все ограничения, которые нам хотелось бы иметь. Рассмотрим, например, переменную-отношение БР ГМОМ ТО. Должно быть ясно, что если в такой переменной-отношении есть кортеж для поставшика с номером 'Бх' со значением Г атрибута ГМОМ и значением б атрибута ТО, то нам хотелось бы, чтобы в этой переменной-отношении не было какого-нибудь другого кортежа для поставщика с номером 'Ях', из значения которого следовало бы, что этот поставщик заключил договор со дня, непосредственно предшествуюшего дню Г, или по день, непосредственно следуюший за днем с. Например, рассмотрим поставшика с номером 'Я1', для которого в переменной-отношении ЯР ГЯОМ ТО имеется один кортеж со значениями атрибутов ГЮМ=с(04 и ТО=НО. Одного того, что (Я(,ГЯОМ[ является первичным ключом для этой переменной-отношения, очевидно, недостаточно, чтобы предотвратить появление других "перекрывающихся" кортежей для поставщика с номером 'Я1', например кортежа со значениями атрибутов ГкОМ=602 и ТО=с(бб.
Если бы такой кортеж появился, то это, кроме всего прочего, указывало бы, что с поставщиком с номером 'Я1' был заключен договор, который являлся действительным в день, непосредственно предшествующий дию 004. Вероятно, следовало бы объединить такие два кортежа в один кортеж, в котором значения атрибутов были бы соответственно равны ГМОМвс(02 и ТО=И Оз. Кроме того, лишь одного факта, что (84, ГМОМ1 является первичным ключом лля переменной-отношения БР ГБОМ ТО, также недостаточно, чтобы предотвратить появление "смежных" кортежей для поставщика с номером 'Я1', например таких, в которых значениями атрибутов будут ГЯОМ=с(02 и ТО=с(ОЗ. В данном случае это означало бы, что с поставшиком с номером 'Я1' был заключен договор, действительный, включая день, который непосредственно предшествует дню 004.
Как и в предыдущем случае, такие кортежи должны быть объединены в один общий кортеж. З Заметим, что если ие обьединить такие кортежи, зто оудвт почти равносильно разрешению существования дубликатов! Наличие дубликатов означает, что в базе данных "об одном и том лсе говорится двалсды". Однако два кортежа для постаощика с номером 'Я1 ' с перекрывающимися интервалаии времени фактически "говорят об одном и том жв дважды", а именно — оба они "утверждают", что с поставщиком с номером гЯ1 был заключен договор, срок действия которого включает дни 4, 5 и б. 865 Глава 22.
Хронологические базы Данных Ниже представлено ограничение, которое запрещает перекрытие и смежность временных диапазонов. СОИЯТВА1ИТ ЫО Б РВОМ ТО РК 1Б ЕМРТХ ( ( ( Я РВОМ ТО КЕИАМЕ РЮМ АБ Г1, ТО АЯ Т1 ) 101И ( Я ГЮМ ТО ВЕИАМЕ ГЮМ йБ Г2, ТО АЯ Т2 ) ) ИНЕКЕ ( Т1 > Г2 АИО Т2 > Г1 ) ) ОК ( Г2 = Т1+1 ОК Г1 = Т2+1 ) ) Это выражение несколько запуганное, не говоря уже о том, что здесь допущены определенные вольности в написании (например, выражение Т1э1 используется для обозначения дня, непосредственно следующего за днем Т1).
К этому вопросу мы еше возвратимся в разделе 22.5. Заиечание. Фактически наличие данного ограничения позволяет обращаться к сочетанию атрибутов (Я(),ГЮМ,ТО) как к хронологическолгу потенциаэьнол~у ключу (точнее, к хронологическому первичному ключу). Однако это не очень хороший термин, поскольку "хронологический" потенциальный ключ не является на самом деле погпенциаэьным ключом переменной-отношения, которая его содержит. (В разделе 22.9 мы обсудим "хронологические потенциальные ключи", которые являются настоящими потенциальными ключами в классическом смысле этого термина.) Далее необходимо отметить, что сочетание атрибутов (Б(),РВОМ) в переменной- отношении БР ГЮМ ТО не является внешним ключом переменной-отношения БР РВОМ ТО для переменной-отношения Я ГЮМ ТО, несмотря на то что это сочетание включает те же атрибуты, что и первичный ключ переменной-отношения Б ГЮМ ТО.
Однако нам необходимо быть уверенными, что если сведения о некотором поставщике имеются в переменной-отношении ЯР ГКОМ ТО, то они присутствуют и в переменной- отношении Б ГКОИ ТО. СОИЯТВА1ИТ АОО ЯР ТО Я ГК ЮА1И1 БР ГКОМ ТО ( Б() ) < Б РВОМ ТО ( Б() ) (Здесь знак "<" означает "является подмножеством".) Но ограничения й00 БР ТО Я ГК ЮА1И1 самого по себе недостаточно. Необходимо иметь уверенность в том, что даже после выполнения всех возможных объединений кортежей, если в переменной-отношении БР РВОМ ТО некоторый поставщик может поставлять некоторую деталь в течение некоторого времени, в переменной-отношении Я ГЮМ ТО обязательно есть кортеж для этого поставщика, указывающий, что на определенный период договор с ним действительно был заключен.
Это можно попытаться выразить так. СОИЯТВА1ИТ ЮО БР ТО Б ГК АЯА1И2 /* внимание - некорректно "/ 1Б ЕМРТХ ( ( ( Б ГКОМ ТО КЕИАМЕ ГКОМ АБ ЯГ, ТО АЯ ЯТ ) 101И ( ЯР РВОМ ТО КЕИАМЕ ГЮМ йЯ ЯРГ, ТО АЯ ЯРТ ) ) КИЕВЕ ЯРР < БГ ОК БРТ > ЯТ ) ) Однако, как сказано в комментарии, данное определение фактически неверно. Чтобы разобраться, почему именно, рассмотрим пример. Пусть переменная-отношение Б РВОМ ТО будет такой, как показано на рис. 22.3, и пусть переменная-отношение 866 Часть (г. дополнительные аспекты ЯР ГКОМ ТО содержит кортеж для поставщика с номером '82' с атрибутами, скажем, ГКОМ=Н03 и ТО=с)04. Очевидно, что такое сочетание является допустимым, но на самом деле ограничение АОО ЯР ТО Я ГК АОА182 его запрещает.