Введение в системы БД (542480), страница 42
Текст из файла (страница 42)
Предположим теперь, что во втором и третьем примерах переменную-отношение В заменили переменной-отношением Я. т Б ~= Я ИНЕВЕ С1ТХ = 'Ьопс(оп' ° Я ги Б М1КОЯ ( Я ИЕЕВЕ С1ТТ = 'РагЬа' ) ) В этом случае оба присвоения обновляют значение переменной-отногиения Б: первое удаляет всех поставщиков, находящихся вне Лондона, а второе удаляет всех поставщиков, находящихся в Париже. Для удобства язык Тцхог!а! Р поддерживает явные операторы 1КЯЕВТ, ОЕЬЕТЕ и ОРОАТЕ, однако каждый из них является лишь сокращенным обозначением некоторой операции реляционного присвоения. Например, рассмотрим следующий оператор".
° 1КЯЕВТ ХКТО Я ВЕХАТ10К ( ТОРЬЕ ( Я0 Я) ( 'Яб' ), ЯКАМЕ КАМЕ ( 'ЯнЬПА' ), ЯТАТОЯ 50, СХТУ 'Вове' ) ) ) Он является эквивалентом операции присвоения, которая записывается так. Я:= Я ОК10К ВЕЬАТ10К ( ТОРЬЕ ( Я$ ЯФ ( 'Яб' ), БКАМЕ КАМЕ ( 'Яп)ьй' ), ЯТАТОЯ 50, СХТХ 'Вове' ) ) ; Обратите внимание, что эта операция присвоения будет успешной лишь в том случае, если в переменной-отношении Б уже содержится кортеж с данными о поставщике с номером 'ЯЯ'. На практике аналог оператора 1КБЕВТ, записанный в виде оператора при- П Выражение НЕЬАТХОФ ~...
) в примере оператора ХКБЕНТ является обращением к оператору выбора бв свою очередь, выражение в фигурных скобках в фразе ТУРЬЕ )... ) является обращением к оператору выбора кортежа, а выражения во внутренних скобках — обращением к оператору выбора скаляров). Подробнее об этом рассказывается в разделах бЗ и 6.4 главы 6. Часть 11 Реляционная модель своения, можно было бы расширить так, чтобы подобные ситуации проверялись. Для простоты эти усовершенствования здесь игнорируются. Разумеется, то же самое касается операторов ОЕЬЕТЕ и ОРРАТЕ. м РЕЬЕТЕ Б ИНЕКЕ С1ТУ = 'Раг1в'," эквивалентно присвоению Я := Б Н1НОЯ (Б ИНЕКЕ С1ТУ = 'Раг1в' ) ° ОРРАТЕ Я ИНЕКЕ С1ТУ = 'Раг1в' БТАТОЯ := 2 * БТАТОЯ, С1ТУ := 'Коше' Эквивалент этого оператора, записанный в виде реляционного присвоения, имеет слишком сложный на текущий момент вид, поэтому мы его опускаем (см.
[3.3]). Подводя итог, приведем несколько упрощенный синтаксис операторов 1НЯЕКТ, РВЕТЕ и ОРРАТЕ. ° 1НЯЕКТ 1НТО <нмя переменной-отнснення> <реляцноннов аырахвннв> ; ° ОЕЬЕТЕ <имя переменной-отношения> [ ИНЕКЕ <логнчесхое внрахенна> ] ° ОРОАТЕ <имя переменной-отношения > [ ИНЕКЕ <логнчвское внрахеннв> ] <спнсок обновлявмнх атрнбутов> 1 Здесь параметр <обновляемый атрибут> имеет следующий вид.
<нмя етрнбута> := <внрахенне> Синтаксис выражения, помещаемого в параметр <логнчвское внрахвннв>, говорит сам за себя, тем не менее он подробно описывается в главе б. В завершение этого раздела подчеркнем, что реляционное присвоение, а следовательно, и операторы 1НЯЕКТ, РЕЬЕТЕ и ОРОАТЕ являются операторами на уровне множеств.
Например, оператор ОРРАТЕ, говоря нестрого, обновляет некоторое множество кортежей результируюшей переменной-отношения. Неформально мы также часто говорим, например, об обновлении отдельного кортежа, однако при этом необходимо отчетливо понимать следующее. 1. В действительности имеется в виду множество кортежей, однако в данном случае кардннальность этого множества равна единице. 2. Иногда обновление множества кортежей с кардинальностью, равной единице, невозможно! Предположим, например, что на переменную-отношение поставщиков наложено ограничение целостности (подробности приводятся в главе 3), которое заключается в том, что поставшики с номерами '31' и 'Я4' должны иметь один и тот же статус.
Тогда при обновлении отдельного кортежа, затрагивающем статус одного из двух перечисленных выше поставщиков, возникнет ошибка. В этом случае необходимо обновлять статус обоих поставшиков одновременно, например так. ОРОАТЕ Я ИНЕКЕ 34 = 3$ ( '31' ) ОК 3$ = 3$ ( '34' ) ЯТАТОБ ".= <некоторое значение> ; Глава 5. Домены, отношения и базовые переменные-отношения 173 5.5. СРЕдСтва Я)1 К рассматриваемому в этой главе материалу имеют отношение следующие ЯОЬ- операторы.
СКЕАТЕ 0ОИА1Н АЬТЕК ООИА1Н 0КОР ООИА1И СКЕАТЕ ТАВЬЕ АЬТЕК ТАВЬЕ ОКОР ТАВЬЕ 1НЯЕКТ ОРОАТЕ ОЕЬЕТЕ Операторы 1НЯЕКТ, ОРРАТЕ и 0ЕЬЕТЕ приводились в главе 4. Остальные операторы будут рассмотрены ниже. Домены Как отмечалось в главе 4, "домены" в языке Я()Ь, к сожалению, далеки от настоящих реляционных доменов (т.е. типов). Фактически эти два понятия настолько различны, что для данной конструкции языка ЯОЬ желательно было бы использовать какое-либо другое название.
Основное назначение концепции доменов в языке ЯОЬ вЂ” разрешить присвоение встроенным типам сокращенных имен, которые можно было бы использовать для упрощения записи определения нескольких столбцов в нескольких базовых таблицах, как, например, показано ниже. СКЕАТЕ ООИА1Н Я() СНАК(5) СНЕАТЕ ООИА1Н Р)) СКАК(б) СКЕАТЕ ТАВЬЕ Я ( Я)) Я)), ... ) ) СКЕАТЕ ТАВ1Е Р ( Р)) Р$, ...
) СКЕАТЕ ТАВЬЕ ЯР ( Я() Я(), Р() Р(), ) Далее перечислены некоторые основные различия между настоящими доменами и конструкциями языка БОЬ. м Как уже отмечалось, на самом деле домены языка ЯОЬ вЂ” зто просто синтаксические сокрашения. Они, несомненно, не относятся к истинному типу данных, определяемому пользователем.
174 Часть П. Реляционная модель Следует подчеркнуть, что говорить об "обновлении кортежа" (или множества кортежей), как мы это только что делали, — довольно некорректно. Кортежи, как и отношения, являются значениями и не могут быть обновлены (по определению никакое значение изменить нельзя).
Таким образом, для того чтобы "обновлять кортежи", необходимо ввести понятие переменкой кортежа, что вовсе не является частью реляционной модели! Поэтому, когда мы, например, говорим "обновление кортежа г, с его преобразованием в кортеж гз", подразумевается, что кортеж г| (т.е. значение кортежа б) заменяется кортежем гз (под которым снова понимается значение кортежа). Аналогичные замечания относятся к фразам наподобие "обновление атрибута А" (некоторого кортежа). В этой книге мы и далее будем говорить "обновление кортежей" или "обновление атрибутов кортежей", поскольку на практике это удобно. Однако не следует забывать, что такие сокрашения в общем случае некорректны, ° Значения доменов языка БОЬ не могут быть "произвольной внутренней сложности".
Сложность значений домена ограничена сложностью встроенных типов. м Домены языка БОЬ должны определяться в терминах одного из встроенных типов, а не в терминах другого домена, определенного пользователем. ° На практике каждый домен языка БОЬ должен определяться в терминах только одного из сушествуюших встроенных типов. Таким образом, в языке ЯОЬ невозможно определить домены, аналогичные, например, типам РО1НТ и ЬТНЕЯЕЯ из раздела 5.2. ° Домены языка ЯОЬ не могут иметь больше одного "допустимого" представления. В действительности в языке БОЬ нет четкого различия межау типом и его физическим представлением.
Например, если домены языка БОЬ с именами Я[[ и Р[[ будут определены в терминах типа СНАЯ, то над номерами поставшиков и номерами деталей можно будет выполнять те же операции, что и над строками, в частности — конкатенацию. ° В языке ЯОЬ нет строгого контроля типов и выполняемая проверка правильности типов совершенно незначительна. Если взять в качестве примера определенные выше типы Я[[ и Р[[, следующий ЯОЬ-оператор ошибки не вызовет, хотя, если рассуждать логически, должен был бы вызвать. ЯЕЬЕСТ * ГНОИ ЯР ННЕНЕ Я[[ = Р[[ Замечание. То же самое можно преподнести иначе, сказав, что язык ЯОЬ поддерживает ровно восемь истинно реляционных доменов, а именно — восемь следующих "базовых типов".
° Числа ° Строки символов ° Строки битов ° Даты ° Отметки времени ° Временные отметки (бшезгашр) ° Интервалы "год/месяц" ° Интервалы "день!время" Тогда можно было бы сказать, что проверка правильности типов производится, но только для этих восьми типов. Так, например, попытка сравнить число со строкой битов приведет к ошибке, а сравнение двух чисел будет корректным, даже если эти числа имеют различные представления, скажем, одно — 1НТЕОЕН, а другое — ГЬОАТ.
° Язык БОЬ не поддерживает возможность определения пользователем операций, применяемых к данному домену. Допустимыми являются только встроенные операторы, применяемые к соответствуюшим представлениям этого типа. Ниже приводится пример создания домена с помошью БОЬ-оператора СНЕАТЕ ООИАХН. СНЕАТЕ ООИА1Н <иия доиена> <иии встроенного типа> [ <определение значения по уяолчании> ) [ <ограничении> [ Глава 5. Домены, отношения и базовые переменные»огпношении 175 Пояснения 1. Список допустимых имен встроенных типов, которые можно указывать как значение параметра <нмя встроенного типа>, приводится в разделе 4.2 главы 4.