Введение в системы БД (542480), страница 29
Текст из файла (страница 29)
Например, существует сокращение СНАВ для определителя СНАВАСТЕВ. Квадратные скобки "[" и "[" в принятой нотации используются для указания необязательных элементов (например, СНАВАСТЕВ или В1Т), при отсутствии которых будут использованы значения по умолчанию. (Это правило обычно подразумевается при описании в форме Бэкуса-Наура, сокращенно — ВХР). И наконец, отметим, что в языке Я ПЬ требуется указывать конкретную длину или точность для определенных типов (например, СНАВ) в отличие от нашего гипотетического синтаксиса, использовавшегося в главе 3.
Очевидно, что язык ЯОЬ рассматривает эти длины и спецификаторы точности как часть определения типа (подразумевая, например, что значения СНАВ(3) и СНАВ(4) задают разные типы). Однако мы считаем, что лучше расценивать их (длины и точности) как ограничения целостности (что мы и делаем, в частности, в главе 8, упр. 8.4).
Определив базу данных, можно начинать выполнять в ней различные операции, задаваемые с помощью операторов манипулирования данными языка ЯОЬ: НЕЬЕСТ, 1ННЕВТ, НРСАТЕ и НЕЬЕТЕ. В частности, можно выполнять с данными реляционные операции выборки, проекции и соединения, причем во всех этих случаях следует использовать один и тот же оператор манипулирования данными языка Я Ь НЕЬЕСТ. На рис. 4.2 показаны примеры операций выборки проекции и соединения, сформулированные на языке ЯОЬ. Выборка (ВЕБТВ1СТ): Результат: БЕЬЕСТ Ба, Рзг, мТУ РВОМ ЯР )АгНЕВЕ ЯТУ < 150; Проекция (РВОЛЕСТ): Результат: ЯЕ1 ЕСТ Би, С1ТУ РВОМ Я; Соединение (б01Х): яеьест Б.БФ, БМАме, БтАт()Б, с1ту, Ри, с)ту РВОМ Б, ЯР ЦУНЕВЕ Я.Би = БР.Яи; Результат: Рис.
4.2 Прииеры выполнения операций выборки, проекции и соединения на языке 5Ж Часть 1 Основные понятия Замечание. Пример операции соединения на этом рисунке подтверждает, что в языке ЯО(. иногда необходимо использовать уточненные имена (например, Б.Б(), ЯР.Б()), позволяющие устранить неоднозначность при указании столбцов. Согласно общему правилу уточненные имена допустимы всегда, а неуточненные имена допустимы, только если при этом не возникает неоднозначности. Отметим, что в языке ЯО(. поддерживается сокращенная форма предложения БЕЬЕСТ, как показано в следующем примере. НЕВЕСТ " — влн БЕЬЕСТ Я.* (т.е. символ "*" может бить уточнен) ГНОМ Б ) В результате выполнения этого запроса будет получена копия всей таблицы Я. Символ "*" — это сокращение для списка разделенных запятыми имен всех столбцов таблицы, указанной в предложении ГНОМ.
Имена столбцов перечисляются слева направо в том порядке, в котором онн определены в этой таблице. Кстати, обратите внимание иа комментарий, который начинается двумя дефисами и заканчивается символом новой строки. Замечание. Выражение БЕЬЕСТ * ГНОМ Т, где Т вЂ” это имя таблицы, может быть сокращено до простого выражения ТАВЬЕ Т. Значительно подробнее оператор НЕВЕСТ обсуждается в главе 7 (раздел 7.7). Перейдем к операциям обновления. Примеры операций 1МБЕКТ, ОРОАТЕ и ОЕЪЕТЕ языка БО). приводились в главе 1. Однако во всех примерах этой главы использовались операции обработки отдельных строк. Тем не менее операции 1МБЕКТ, ОРОАТЕ и ОЕЬЕТЕ, как и операция БЕЗВЕСТ, обрабатывают данные на уровне миолсеств (некоторые упражнения и ответы к ним в главе! действительно демонстрировали эту возможность).
Вот несколько примеров обновления на уровне множеств для базы данных поставщиков и деталей. 1МЯЕКТ 1МТО ТЕНР ( Р(), ИЕ16ТН ) ЯЕЬЕСТ Р(), ИЕ16ТН ГНОМ Р ИНЕКЕ С01ЛК = 'Кеб' ( В этом примере подразумевается, что предварительно создана другая таблица ТЕМР с двумя столбцами: Р() и ИЕ10ТН. Оператор 1МБЕКТ вставляет в нее номера деталей и соответствующие веса всех деталей с цветом 'Кеб' (красный). ОРОАТЕ Б БЕТ БТАТОЯ = БТАТОБ * 2 ИНЕКЕ С1ТГ = 'Раг1в' Приведенный выше оператор ОРОАТЕ удваивает статус всех поставщиков в Париже. ОЕЬЕТЕ ГКОМ БР ИНЕКЕ Р() = 'Р2' ) Этот оператор ОБЕТЕ удаляет из таблицы ЯР все строки с информацией о детали с номером 'Р2'.
из Глава 4. Введение в язык ВЯЛ Замечание. В язык Я')Ь не включен прямой аналог операции реляционного присвоения. Но можно имитировать эту операцию, сначала удалив все строки из целевой таблицы, а затем выполнив дпя нее операции 1ЕЕЕЕТ ... ЯЕьЕС1 ... (как это сделано выше, в первом примере). 4.3. Каталог В языке $ЯЬ существует аналог того, что принято называть каталогом, — информационная схема. Знакомые нам термины "каталог" и "схема" действительно используются в языке ЯЯЬ, но с особым, специфическим только для языка ЯОЬ смыслом. Нестрого говоря, каталог в языке БОЬ состоит из дескрипторов (метаданных) для отдельной базы данныхз, а схема состоит из дескрипторов той части базы данных, которая принадлежит отдельному пользователю.
Другими словами, в системе может быть любое число каталогов (по одному для каждой базы данных), каждый из которых делится на произвольное число схем. Однако каждый каталог должен содержать ровно одну схему с именем 1ЕГОЕИАТ10Е БСЕЕМл (информационная схема), которая, с точки зрения пользователя, и является схемой (как уже указывалось), выполняющей функции обычного каталога. Таким образом, информационная схема состоит из набора ЯОЬ-таблиц, содержимое которых фактически отражает (точно определенным образом) все определения из всех остальных схем рассматриваемого каталога. Точнее говоря, информационная схема по определению содержит набор представлений гипотетической "схемы определения". Для поддержки схемы определения реализация не требуется, но она требуется, во-первых, для поддержки некоторого вида "схемы определения" и, вовторых, для поддержки представлений такой "схемы определения", которые имеют вид, подобный представлениям информационной схемы.
Необходимо отметить следующие моменты. Ь Основная причина того, что требования состоят из двух отдельных требований, сформулированных выше, заключается в следующем. Существующие продукты, конечно, поддерживают нечто близкое к "схеме определения". Однако от одного продукта к другому диапазон различий таких схем будет очень широким (даже если этн продукты имеют одного изготовителя). Поэтому требование лишь того, чтобы в реализации поддерживались предопределенные представления "схемы определения", имеет смысл. 2.
На самом деле нужно говорить "одна из информационных схем", а не просто "информационная схема", поскольку, как мы убедились, в каждом каталоге имеется такая схема. Поэтому в общем случае все данные, которые доступны некоторому пользователю, не будут описаны с помощью единственной информационной схемы. Однако, чтобы упростить изложение материала, мы будем продолжать считать, что в действительности существует только одна схема. З В интересы тачнасти неабладима азпметить, чта в стандарте языка ВД!. такое панятие, как "база данные", в действительности просто отсутствует! Па определению каталогом вписывается та, чта называется набором данныл и зависит ат реализаиии Однако нет никаки! разумныл аргументов, запрещающих подразумевать пад этим понятием базу данныл.
124 Часть !. Основные понятия Нет причин вдаваться здесь в детали содержимого информационной схемы. Просто приведем некоторые из наиболее важных представлений информационной схемы в надежде на то, что сами названия позволят читателю получить некоторое понятие о содержимом этих представлений. Следует также отметить, что представление ТАББЕБ содержит информацию обо всех именованных таблицах, как базовых таблицах, так и представлениях, в то время как представление Ч1ЕИЯ содержит информацию только о представлениях. В [4.191 этот вопрос рассмотрен более подробно, в частности в этой работе рассказывается, как формулировать запросы для получения данных из информационной схемы (что не так просто, как можно было бы ожидать). 4.4. Представления Приведем пример определения представления на языке 3()Ь.
СКЕАТЕ Ч1ЕИ 6000 ЯОРРЫЕК АЯ БЕБЕСТ 33, ЯТАТОБ, С1ТХ РКОМ Б ИНЕКЕ ЯТАТОЯ > 15 А вот пример БЯЬ-запроса к этому представлению. БЕБЕСТ 3$, ЯТАТНЯ РКОМ 6000 БОРРЫЕК ИНЕКЕ С1ТХ = 'Бопбоп' 125 Глава 4. Введение в язык ЯДЕ ЯСНЕМАТА (схемы) ООМА1МЯ (домены) ТАВЗЕН (таблицы) Ч1ЕИЯ (представлення) СО?ЛИМБ (столбцы) ТАББЕ РК?Ч?ЛЕБЕН (привилегии для таблиц) СО?ЛММ РК1Ч11ЕБЕЯ (привилегии для столбцов) 03й6Е РК?Ч?БЕБЕЯ (применяемые привилегии) ООМА1М СОМЯТКА1МТЯ (ограничения для домена) ТАББЕ СОМБТКА1МТБ (ограничения для таблицы) КЕРЕКЕМТ1А1 СОМБТКА?МТБ (ссылочные ограничения) СНЕСК СОМБТКА1МТБ (проверочные ограничения) КЕХ СО?ЛММ ОЯМЕ (использование столбца ключа) АЯЯЕКТ1ОМЯ (утверждения) Ч1ЕИ ТА31Е ОБА6Е (использование таблицы представления) Ч1ЕИ СОЬНММ ОБМЕ (использование столбца представления) СОМБТКА1МТ ТАЯНЕ ОБА6Е (использование таблицы ограничений) СОМБТКА1МТ СО1ЛММ ОБМЕ (использование столбца ограничения) СОМБТКА1МТ ООМА1М ОБМЕ (использование домена ограничения) Подставив определение представления вместо ссылки на имя представления, получим выражение, которое будет подобно приведенному ниже (обратите внимание на вложенный подзапрос в предложении РВОМ).
БЕЬЕСТ 0000 ЯОРРЫЕК. Б(), 0000 ЯОРРЫ ЕК. ЯТАТОБ РВОМ ( НЕВЕСТ ЯЗ, ЗТАТОЗ, С1ТУ РВОМ Я ИНЕКЕ ЯТАТОЗ > 15 ) АЯ 0000 ЯОРРЫЕК ЯНЕКЕ 6000 ЯОРРЫЕК.С1ТТ = 'Еопг)оп' Это выражение может быть затем упрощено, например, так. ЯЕВЕСТ Б)), БТАТОЯ РВОМ Б ИНЕКЕ ЯТАТОБ > 15 АНО С1ТУ = 'Еопдоп' В последнем случае показан текст запроса, который фактически будет выполняться. В качестве второго примера рассмотрим следуюшую операцию РЕЬЕТЕ. ВЕДАЕТЕ РВОМ 6000 ЯОРРЫЕК ИНЕКЕ С1ТУ = 'Ьовдоп' ) Запрос на удаление, который будет выполняться на самом деле, выглядит так. ОЕАЕТЕ РВОМ Б ИНЕКЕ ЯТАТОЯ > 15 АНО С1ТУ = 'Ъопдоп' ) 4.5.
Транзакции Для операторов СОММ1Т и КОЕНВАСК в языке ЯЯЬ есть прямые аналоги. Это операторы СОММ1Т ИОКК и КОЕАВАСК ИОКК соответственно (в обоих операторах слово ИОКК необязательное). Но в языке ЯЯЬ нет явного оператора, соответствующего оператору ВЕ61Н ТКАНЯАСТ10К. Неявно транзакция начинается всякий раз, когда программа выполняет оператор, способный "инициализировать транзакцию" (!гапзасйопйшбайпЯ), но только в том случае, когда никакая транзакция еше не выполняется, Рассматривать здесь список Я()Ь-операторов, способных инициализировать транзакцию, в наши планы не входит. Достаточно сказать, что таковыми являются практически все операторы, которые мы обсуждаем в этой главе (кроме, конечно, самих операторов СОММ1Т и КОВЕВАСК).