С.Д. Кузнецов - Основы баз данных (1121716), страница 21
Текст из файла (страница 21)
При использовании кортежных переменных в формулах можно ссылаться на значение атрибута переменной (это аналогично тому, как, например, при программировании на языке С можно сослаться на значение поля структурной переменной). Например, для того, чтобы сослаться на значение атрибута слУ имя переменной СПУЖАщий, нужно употребить конструкцию СПУЖАщий.
СПУ имя. Правильно построенные формулы Правильно построенная формула (куе!1-Еоппес) Вопим!а, БАУЕР) служит для выражения условий, накладываемых на кортежные переменные. Простые условия Основой %ГЕ являются простые условия, представляющие собой операции сравнения скалярных значений (значений атрибутов переменных или литерально заданных констант). Например, конструкции СЛУЖАШИЙ.СЛУ НОМ = 2934 и СЛУЖАЩИЙ.СЛУ НОМ = ПРОЕКТ. ПРОЕКТ РУК являются простыми условиями. Первое условие принимает значение пие в том и только в том случае, когда значение атрибута СЛУ НОМ кортежной Основы баз данных Курс переменной служрзлий равно 2934.
Второе условие принимает значение Угие в том и только в том случае, когда значения атрибутов СЛУ НОМ и ПРОКкт РУК переменных СЛУЖАЩИЙ и ПРОКкт совпадают. По определению, простое сравнение является %ЕР, а %ГЕ, заключенная в круглые скобки, представляет собой простое сравнение. Более сложные варианты %РГ строятся с помощью логических связок нот, Анп, он и 1Р ... тнкн" с учетом обычных приоритетов операций (кот > Ано > ок) и возможности расстановки скобок, так, если Гоггл— %ГЕ, а совр — простое сравнение, то нот Коглг, солгр Анп гоглг, соыр Он Гога и 1Р созлр тНКН гогзл являются %ГЕ Для примеров воспользуемся отношениями СЛУЖАЩИК, ПРОКктн и НО- мкРА прокктов из предылущей лекции (см.
рис. 5.1). Правильно построенной является следующая формула: 1Р СЛУЖАЩИЙ.СЛУ Ултл = Иванов тнен 1служАщий.слу ЗАРЛ >= 22400. 00 Анп служАЙЙЙ.ЛРО ном = 11 Эта формула будет принимать значение ггие для следующих значений кортежной переменной служлщии: Конечно, нужно представлять себе какой-нибудь способ реализации системы, которая сможет по заданной %ГЕ при суптествующем состоянии базы данных произвести такой результат. И таким очевидным способом является следующий: в некотором порядке просмотреть область определения переменной и к каждому очередному кортежу применить условие. Ре- ' Через ту ... тнхн здесь обозначается одна и важных логических функций — импликация.
По определеникг, тг л тнвн ь и нот л ов ь. Хотя операция импликации является избыточной, она явно вводится в реляционное исчисление, посколысу часто требуется на практике для выражения условий. 100 Лекция В Реляционное исчисление Рис. 5.1. Примерные значения отношений СЛУЖАЩИЕ, ПРСЕКТЫи НОМЕРА ПРОЕКТОВ зультатом будет то множество кортежей, для которых при вычислении условия производится значение ггле. Очевидно, что результат эквивалентен выполнению алгебраической операции служлщие ннеке (нот !служА- ЩИЙ.СЛУ ИМЯ = 'Иванов' ! ОК (СЛУЖАЩИЙ.СЛУ ЗАРП >= 22400.00 АЫП служлщий.пРС нсм = 1! надотношением, телокоторогопредставляетсобой область определения кортежной переменной.
Пусть имеется следующее определение кортежной переменной ЛРоект: НАЫСЕ ПРОЕКТ ТЯ ПРОЕКТЫ Вот еше пример правильно построенной формулы: !О! Основы баз данных Курс СЛУЖАЖИЙ.СЛУ ИМЯ = ПРОЕК .ПРОЕКТ РУК Эта формула будет принимать значение ггие для следующих пар знаЧЕНИй КОРтсжНЫХ ПЕРЕМЕННЫХ СЛУ'ЖАний И ПРОЕКТ: Очевидный способ реализации системы, которая по заданной %г Г при сушесгвуюшем состоянии базы данных производит такой результат, заключается в следующем. В некотором порядке просматривать область определения (например) переменной СЛУЖАний.
Для каждого текущего кортежа из области определения переменной СЛУЖАЖИЙ просматривать область определения переменной гРОект. Оставлять в области истинности те пары кортежей, для которых формула принимает значение вие. Возможен и альтернативный подход: начать просмотр с области определения переменной ЛРОЕКТ, и для КаждОГО КартЕжа ПРОЕКТ ПрОСМатрИВатЬ ОбпаетЬ ОПрЕдЕЛЕНИя СЛУЖАнИЙ.
Здесь нужно сделать несколько замечаний. Во-первых, если бы в данном случае формула бьша тождественно истинной (например, имела вид (СЛУЖАЖИЙ.СЛУ ИМЯ = СЛУЖАнИЙ.СЛУ ИМЯ) АЧП (ПРОЕКТ. ПРОЕКТ РУК = ПРОЕКТ.ПРОЕК РУК)), то областью истинности этой формулы являлось бы декартово произведение (в строгом математическом смысле) тел отношений служджий и ЛРОект. В реляционном исчислении кортежей, как и в реляционной алгебре, принято иметь дело с операцией расширенного декартова произведения, и поэтому считается, что в подобных случаях областью истинности %г Г является отношение, заголовок которого представляет собой объединение заголовков отношений, на телах которых определены кортежные переменные, а кортежи являются объединением соответствующих кортежей из областей определения переменных. При этом имя атрибута результирующего отношения уточняется именем соответствующей переменной.
Поэтому правильнее было бы изображать область истинности формулы СЛУЖАЖИЙ.СЛУ ИМЯ = ПРОЕКТ. ПРОЕКТ РУК следующим образом: 102 Реляционное исчисление Лекция 5 Во-вторых, как видно, показанное результирующее отношение в точности совпадает с результатом алгебраической операции СЛУЛАщИЯ ОО1Ы ПРОЯКтщ ИНККЯ СЛУ имя = ПРОякт РУКс учетом особенности именования атрибутов результирующего отношения. Наконец, заметим, что описанный выше способ реализации, который приводит к получению области истинности рассмотренной формулы, в действительности является наиболее общим (и зачастую неоптимальным) способом выполнения операций соединения (он называется методом еложенных циклов — леней!оорз (огп).
Кванторы, свободные и связанные переменные При построении %ГГ допускается использование кванторов существования (ЕХ! ЯТЯ) и всеобщности (ГОКА1Л ). Если гсг л — это %ГГ в которой участвует переменная уаг, то конструкции ях1ЯтЯ иаг (Гсгл) и РОЛАы. гаг (гсгл) представляют собой %ГЕ По определению, формула яхгятя гаг ( сопл) принимает значение ггие в том и только в том случае, если в области определения переменной уаг найдется хотя бы одно значение (кортеж), для которого %ГГ Гопл принимает значение ггие.
Формула РОККО уаг ( гсг л) принимает значение )гас, если для всех значений переменной гаг из ее области определения %ГГ Гоггл принимает значение йие. Переменные, входящие в %ГГ могут быть свободными или свлзалиыми. По определению, все переменные, входящие в%ГЕ, при построении которой не использовались кванторы, являются свободными.
Фактически, это означает, что если для какого-то набора значений свободных кортежных переменных при вычислении %ГГ получено значение йие, то эти значения картежных переменных могут входить в результирующее отношение. Если же имя переменной использовано сразу после квантора при построении%ГЕ вида кх1ЯтЯ наг (Еога) или РОКАЬЬ гаг (Гостя), то в этой%ГЕ и во всех%ГЕ построенных с ее участием, гас является связанной переменной. Это означает, что такая переменная не видна за пределами минимальной %ГЕ, связавшей эту переменную.
При вычислении значения такой %ГГ используется не одно значение связанной переменной, а вся область ее определения. Пусть здесь и далее в этом разделе СЛУ1 и СЛУ2 представляют собой две кортежные переменные, определенные на отношении слуллщик. Тогда%ГЕ кх1ятя слу2 (слу1.слу зАРп > слу2.слу зАРЛ) 103 Основы баз данных Курс для текущего кортежа переменной СЛУ1 принимает значение 1гие в том и только в том случае, если во всем отношении служлщик найдется такой кортеж (ассоциированный с переменной слУ2), чтобы значение его атрибута спу зАРп удовлетворяло внутреннему условию сравнения. Легко видеть, что зта формула принимает значение 1гие только для тех значений кортежной переменной СЛУ1, которые соответствуют служащим, не получающим минимальную зарплату. Соответствующее множество кортежей показано на рис.
5.2а (для тела отношения СПУКАйИП из рис. 5. (). Рис. 5.2, Примеры правильно построенным формул с кванторами Правильно построенная формула РОВАТЬ СЛУ2 ,'СЛУ1.ГЛУ ЗАРП > СЛУ2.СЛУ ЗАРП) для текущего кортежа переменной Слу1 принимает значение ггие в том и только в том случае, если для всех кортежей отношения СЛУжАП(ИП (связанных с переменной СПУ2) значения атрибута СЛУ ЗАРП удовлетворяют условию сравнения. Снова легко видеть, что формула принимает значение ггие только для тех значений кортежной переменной СЛУ1, которые Реляционное исчисление Лекция 5 соответствуют служащим, получающим максимальную зарплату.* Соответствующее множество кортежей показано на рис.
5.2Ь. Очевидно, что показанные на рис. 5.2 отношения соответствуют условиям обеих формул. Но как в данном случае можно реализовать систему, которая по заданной формуле производит правильный результат? Наиболее очевидный способ интерпретации обеих обсуждавшихся выше формул следующий. В некотором порядке просматривать область определения свободной кортежной переменной СЛУ1. Для каждого очередного кортежа из области определения СЛУ1 просматривать область определения связанной переменной Слу2 до тех пор, пока не будет установлено истинностное значение формулы для данного кортежа слут (в случае наличия квантора существования процесс просмотра для СЛУ2, можно остановить после нахождения первого кортежа, лля которого значением подформулы, находящейся под знаком квантора, станет Ггие; при наличии квантора всеобщности необходимо просмотреть всю область определения СЛУ2).
Заметим, что здесь мы снова получаем два цикла, как и при интерпретации %ЕЕ с двумя свободными переменными. Но в данном случае во внешнем цикле обязательно просматривается область определения свободной переменной. На самом деле, правильнее говорить не о свободных и связанных переменных, а о свободных и связанных вхождениях переменных. Если переменная маг является связанной в%ЕЕ Гоглк то во всех%ЕЕ включающих го ел, вне догм может использоваться вхождение того же имени переменной гаг, которое может быть свободным или связанным, но в любом случае не имеет никакого отношения к вхождению переменной гаг в %ЕЕ голле Вот пример: ЕХ1БТЯ СЛУ2 (СЛУ1.ПРО НОМ = СЛУ2.ПРО НОМ АЛП С)ГУ1.СЛУ НОМЕР СЛУ2.СЛУ НОМЕР) АБО ЕОКАЬЬ СЛУ? (1Р СЛУ1.ПРО НОМ = СЛУ2.ПРО НОМ ТНЕМ СЛУ1.СЛУ ЗАРП = СЛУ2.СЛУ ЗАРП) Эта формула принимает значение Ггие только для тех значений переменной Слу1, которые соответствуют служащим, участвующим в проектах с более чем одним участником, причем все участники проекта получают одну и ту же зарплату.