С.Д. Кузнецов - Основы баз данных (1121716), страница 79
Текст из файла (страница 79)
Оператор пеьете для удаления строк в существующих таблицах Общий синтаксис оператора ОЯЬЯТЕ выглядит следующим образом: ОЕЬЕТЕ РЕОМ Габте па~по Х()ЕЕЕ сопд101опа1 ехргеяя(оп В некотором смысле оператор ОЕЬЕТЕ является частным случаем оператора ОРРАте (или, наоборот, действие оператора ОРОАте представляет собой комбинацию действий операторов Оеьете и 1МЯеет). 379 Основы баз данных Курс Семантика оператора модификации существующих строк определяется следующим образом: (1) для всех строк таблицы с именем са)э1е пап~в вычисляется булевское выражение сопс)1с1опа1 ехргезв(оп. Строки, для которых значением этого булевского выражения является ггие, считаются поллежашими удалению (обозначим множество таких строк через т„); (2) каждая строка в (з Р Т,) удаляется из указанной таблицы.
С целью иллюстрации приведем два примера операции удаления строк. Пример 17.7. Удалить из таблицы ЕМР все строки, относящиеся к слу- жащим, которые участвуют в проекте с номером 772, ЮЕьЕТЕ РЕОМ ЕМР ХНЕНЕ РЕО ИО = 772; Пример 17.8. Удалить из таблицы ЕМР все строки, относящиеся к служащим, размер заработной платы которых превышает размер заработной платы менеджеров их отделов. РЕДЕЕТЕ РЕОМ ЕМР ХНЕЕЕ ЕМР ЯАЬ > (ЯЕЬЕСТ ЕМР1.ЕМР ЯА( РНОМ ЕМР ЕМР1, РЕРТ ХНЕЕЕ ЕМР.ОЕРТ ИО = ОЕРТ.ОЕРТ ИО АИЮ ОЕРТ.ОЕРТ.ММС = ЕМР1.ЕМР ИО); Как и в операторе ОРОАте, в разделе у)неее оператора Оеьете можно использовать любой вид булевского выражения, допустимого в операторе выборки, Поэтому возможности оператора удаления строк ограничены лишь фантазией пользователя. Представления, над которыми возможны операции обновления В разделе «Общие синтакические правила построения скалярных выражений» лекции 13 было введено понятие представления (71еи). Кратко повторим, что представление — это сохраняемое в каталоге базы данных выражение запросов, обладающее собственным именем и, возможно, собственными именами столбцов.
Для удобства повторим синтаксические правила определения прелставления: сгеаге ч1ен ::= СЕЕАТЕ [ ЕЕСОЕЯ1ЧЕ ] «1ЕХ Са)э1е папе [ со1шпп папе сопхаа 1(вс АЯ диегу ехргевв(оп [ ХТТН [ САЯСАОЕО ) 1ОСАЬ ) СНЕСК ОРТТОИ 380 язык баз данных 80Ы средства манипулирования данными Лекция 17 В операциях выборки к любому представлению можно адресоваться таким же образом, как и к любой базовой таблице. Естественно, возникает вопрос: а можно ли использовать имена представлений и в операциях обновления базы данных и если такая возможность допускается, то как это следует понимать? Напомним, что в соответствии с семантикой языка Я)ь при выполнении запроса, в разделе удом которого прямо или косвенно присутствует имя представления, прежде всего, производится материализация представления, т.
е. вычисляется результат соответствующего выражения запросов, сохраняется во временной базовой таблице, и далее запрос выполняется по отношению к этой базовой таблице. Хотя в реализациях Я.Н обычно стремятся избегать материализации представлений, любая реализация обязана обеспечить такое выполнение запроса над представлением, которое было бы эквивалентно выполнению запроса с явной материализацией представления. Если допустить выполнение над представлениями операций обновления (сразу заметим, что, вообще говоря, в языке Я0Е зто всегда разрешалось), то в этом случае семантика материализации явно не подходит.
На первое место выходит требование, чтобы операция обновления над представлением однозначно отображалась в одну или несколько операций обновления над теми постоянно хранимыми базовыми таблицами, над которыми прямо или косвенно определено данное представление. Представления, допускающие применение операций обновления, в стандарте 801./92 Поскольку базовым элементом выражения запросов является спецификация запроса, прежде всего нужно понять, какой класс спецификаций запросов является допускающим операции обновления (термин орг)асаЬ' е— обновляемый, используемый в стандарте Я)т, кажется не слишком удачным в русском варианте). В стандарте Я) /92 спецификация запроса считалась допускающей операции обновления в том и только в том случае, когда выполнялись следующие условия: ° в разделе якьдст спецификации запроса отсутствует ключевое слово птяттнст (т. е.
не требуется удаление строк-дубликатов из результата запроса); ° все элементы списка выборки раздела вкькст являются именами столбцов, и ни одно имя столбца не встречается в этом списке более одного раза; ° в разделе гпои присутствует только одна ссылка на таблицу, и она указывает либо на базовую таблицу, либо на порождаемую таблицу, допускаю1цую операции обновления; 381 Основы баз данных Курс ° прямые или косвенные ссылки на базовую таблицу, прямо или косвенно идентифицируемую ссылкой на таблицу в разделе РВОМ, не встречаются в разделе РВОМ ни одного подзапроса, участвуюшего в разделе ИНЕВЕ спецификации запроса; ° в спецификации запроса отсутствуют разделы СВОРР ВУ и НАЧ1ИС. Нетрудно убедиться в том, что зти требования являются достаточными для однозначной интерпретации операций обновления над представлениями.
Например, пусть имеется следуюшая спецификация запроса (пример 17.9): ЯЕЬЕСТ ЕМР ЯАЬ РВОМ (ЯЕЬЕСТ ЕМР ЯАЬ, РЕРТ МО РВОМ ЕМР ХНЕВЕ ЕМР МАМЕ = (ЯЕ(ЕСТ ЕМР МАМЕ РВОМ ЕМР ХНЕВЕ ЕМР ИО = 4425)) ИНЕВЕ РЕРТ НО <> 630; Эту спецификацию можно упростить до эквивалентной формулировки'. ЯЕЬЕСТ ЕМР ЯАЬ РВОМ ЕМР ХНЕВЕ ЕМР ХАМЕ = (ЯЕЬЕСТ ЕМР МАМЕ РВОМ емр ИНЕВЕ ЕМР МО = 4425 ) АХР РЕРТ НО <> 630; Предположим, что с данной спецификацией запроса связано представление с именем ЕМРЯАЬ. Тогда операция РРРАТЕ ЕМРЯАЬ ЯЕТ ЕМР ЯАЬ = ЕМР ЯАЬ вЂ” 1000.00; эквивалентна операции РРРАТЕ ЕМР ЯЕТ ЕМР ЯАЬ = ЕМР ЯАЬ вЂ” 1000.00 ИНЕВЕ ЕМР МАМЕ = (ЯЕЬЕСТ ЕМР МАМЕ РВОМ ЕМР ХНЕВЕ ЕМР ИО = 4425 АИР РЕРТ НО <> 630; ' Обратите внимание, что формально зта формулировка нс отвечает требованиям ЯОЬ/92 ллл спецификаций запросов, допускаюших применение операций обновления.
Но в действительности здесь вложенный подзапрос вычисляется в единственное значение при отсутствии какой-либо корреляции с внешним вхождением таблицы хик 382 Язык баз данных ЯОЫ средства манипулирования данными Лекция Т7 Операция ОЕЬЕТЕ РВОМ ЕМРЯАЬ ХНЕВЕ ЕМР ЯАЬ > 20000.00; эквивалентна операции ОЕЬЕТЕ ЕМРЯАЬ ХНЕВЕ ЕМР ЯАЬ > 20000.00 АИР ЕМР МАМЕ = (ЯЕЬЕСТ ЕМР МАМЕ РВОМ ЕМР ХНЕРЕ ЕМР МО = 4425 АМР РЕРТ ИО <> 630; Операция вставки над представлением ЕМРЯАЬ тМЯЕВТ 1МТО ЕМРЯА1, 25000.00; трактуется как 1МЯЕВТ 1МТО ЕМР ВОХ (РЕРАО Т, РЕРАОт Т, РЕРАОЬТ, 25000.00, ОЕРАОЬТ, ОЕРАОЬТ); Понятно, что такая операция будет отвергнута системой, потому что для столбца емР мо таблицы емР значения по умолчанию не определены (это первичный ключ таблицы, значения которого должны явно задаваться в любой операции вставки).
С другой стороны, условия допустимости операций обновления, специфицированные в БО)./92, не являются необходимыми. Например, над представлением ЕМРММО, определенным над спецификацией запроса («выбрать данные о служащих, являющихся руководителями отделов>). ЯЕЬЕСТ * РВОМ ЕМР ХНЕВЕ ЕХ1ЯТЯ (ЯЕЬЕСТ * РВОМ ОЕРТ ХНЕВЕ РЕРТ ММО = ЕМР ИО); можно было бы совершенно корректно выполнять операции обновления (с некоторыми оговорками насчет операции вставки; см. ниже в этом разделе). 383 Основы бал данных Курс Представления, допускающие применение операций обновления, в стандарте Зхль:1999 В стандарте Б(~Е:1999 правила применимости операций обновления к спецификации запроса существенно уточнены. Критерии применимости операций обновления Введены понятия потенциальной применимости операций обновления, применимости операций обновления, простой применимости операций обновления и применимости операции вставки.
К спецификации запроса потенциально применимы операции обновления в том и только в том случае, когда выполняются следующие условия: ° в разделе зкьеОт спецификации запроса отсутствует ключевое слово Отяттнст; ° элемент списка выборки раздела вкькст, состоаций из ссылки на некоторый столбец, не может присутствовать в этом списке более одного раза; ° в спецификации запроса отсутствуют разделы ОПООР ВУ и НИ'Пж.
Если выражение запросов отвечает условиям потенциальной применимости операций обновления и в его разделе ядом присутствует только одна ссылка на таблицу, то к каждому столбцу выражения запроса, соответствующему одному столбцу таблицы из раздела уком, применимы операции обновления. Если выражение запроса отвечает условиям потенциальной применимости операций обновления, но в его разделе ГПОМ присутствуют две или более ссылки на таблицы, то операции обновления применимы к столбцу выражения запросов только при выполнении следующих условий; ° столбец порождается из столбца только одной таблицы из раздела РПОИ; ° эта таблица используется в выражении запросов таким образом, что сохраняются свойства ее первичного и всех возможных ключей.
Другими словами, к столбцу таблицы, которая отвечает условиям потенциальной применимости операций обновления, применимы операции обновления только в том случае, когда этот столбец может быть однозначно сопоставлен с единственным столбцом единственной таблицы, участвующей в выражении запроса, и каждая строка выражения запроса может быть однозначно сопоставлена с единственной строкой данной таблицы. Выражение запросов удовлетворяет условию применимости операций обновления, если по крайней мере к одному столбцу выражения запросов применимы операции обновления. Выражение запросов удовлетворяет условию простой применимости операций обновления, если в разделе гвОи выражения запросов содержится ссылка только на одну таб- Лекция 17 язых баз данных 50Ы средства манипулирования данными лицу, и все столбцы выражения запросов удовлетворяют условию применимости операций обновления.
Выражение запросов удовлетворит условию применимости операций вставки, если оно удовлетворяет условию применимости операций обновления; каждая из таблиц, от которых зависит это выражение (т. е. таблиц, на которые имеются ссылки в разделе кком), удовлетворяет условию применимости операций вставки и выражение запросов не содержит операций питон, тнтккккст и кхсккт.
Конечно, это определение базируется на том факте, что для любой базовой таблицы условие применимости операции вставки удовлетворяется (при наличии привилегии ТИКККт, см. следующую лекцию). Правила функцмональных зависимостей Приведенный набор правил является достаточно грубым. В стандарте Я2):1999 он уточняется набором дополнительных правил, устанавливающих восприимчивость различных языковых конструкций к операциям обновления и вставки. В основе этих правил лежит понятие функциональной зависимости (Гипспапа! 1)ерепг(енсу — гл), см.
лекцию б). Полагая, что в целом понятие функциональной зависимости уже не должно вызывать у читателей каких-либо затруднений, приведем несколько дополнительных определений, требуемых для понимания подхода, используемого в Я)):1999. ° Пусть к обозначает некоторое множеспю столбцов таблицы т, а кк обозначает некоторое подмножество к (кк ~ к) . Тогда по первой аксиоме Армстронга (см. раздел «Функциональные зависимости» лекции 6) кк к.
В терминологии Я.11.:1999 эта НЭ называется аксиоматической. Все ФЗ„ не являющиеся аксиоматическими, называются неаксиаматическими. ° Все аксиоматические НЭ являются известными е!). В стандарте определяются правила определения других известных НЭ. Кроме того, стандарт оставляет свободу для реализаций Я'.)1 в пополнении этой системы правил с целью нахождения известных ГО, не специфицированных в стандарте. ° Если некоторый столбец С1 виртуальной таблицы Т1 (порождаемой таблицы или представления) определяется путем ссылки на столбец С2 некой другой (базовой или виртуальной) таблицы т2, на основе которой порождается т1, то с! является двойником с2.
Более точно, с1 является двойником с2 в соответствии с таблицей т2. ° Понятие двойников расширяется на множества столбцов. Если некоторое множество столбцов к! виртуальной таблицы т! определяется (путем отображения «один — в — один») множеством столбцов к2 определяющей таблицы т2, и каждый столбец из множества к! является звб Основы баа данных Курс двойником соответствующего столбца из множества 52, то 51 называется двойником 52 в соответствии с таблицей т2. ° Если ни в одном из столбцов возможного ключа (набора столбцов, специфицированного в неоткладываемом ограничении уникальности) не допускается наличие неопределенных значений, то это множество столбцов называется Впс-множеством (акроним Впс происходит от Вале гаЫе ()нгг)ие Сонлггагнг). Любое множество столбцов, являющееся двойником ВВО-множества, также есть впс-множество, так что это свойство распространяется через различные выражения, производящие виртуальные таблицы.