Введение в системы БД (542480), страница 39
Текст из файла (страница 39)
(По определению упорядоченным типом называется тип, для которого применим оператор "<". Простейшим примером неупорядоченного типа может служить тип Р01НТ.) Рассмотрим пример определения оператора обновления (во всех предьшущнх примерах операторы были операторами считывания)Я. Мы увидим далее, что в теле определения таких операторов вместо слова КЕТБКНЯ используется слово ОРРАТЕЯ.
Операторы обновления значений не возвращают и должны активизироваться с помощью явных вызовов САТ Ь (3.3]. В Операторы снетывания и обновления такясе называются наблюдателями и мутаторами соответственно, особенно в обьектныл системал (си. ность!Ротой книги). 160 Часть 11. Реляционная модель ОРЕВАТОВ ВЕГЬЕСТ ( Р РО1НТ ) ОРВАТЕЯ ( Р ) ВЕ613 ТНЕ Х ( Р ) := — ТНЕ Х ( Р ) ТНЕ У ( Р ) := - ТНЕ У ( Р ) ВЕТОВН ЕНО ЕНВ ОРЕВАТОВ Оператор ВЕГЬЕСТ отображает точку с декартовыми координатами (х,у) симметрично относительно начала координат в точку (-х,-у), модифицируя соответствующим образом координаты исходной точки. Обратите внимание на использование в этом примере выражений вида ТНЕ псевдоперемевная.
ТНЕ псевдопереиенная — это обращение оператора ТНЕ к точке назначения (в частности, слева от оператора присвоения). Такое обращение оператора фактически не возвращает, а назначает значение указанному компоненту своего аргумента. Например, в определении оператора ВЕГЬЕСТ выражение ТНЕ Х ( Р ) :=...; фактически присваивает компоненту Х некоторое значение (допустимого декартова представления) аргумента-переменной, представленной параметром Р. Разумеется, для изменения любого аргумента с помощью оператора обновления, в частности путем присвоения значения выражению ТНЕ псевдопереиенная, этот аргумент следует определить как переменную, а не как более общее выражение. Ниже показано, что псевдопеременные могуг быть вложенными.
ЧАВ ЬЯ ЫНЕЯЕ6 ; ТНЕ Х ( ТНЕ ВЕ613 ( 1,Я ) ) := Р.Я Наконец, от ненужного оператора можно избавиться, как, например, показано ниже. РВОР ОРЕВАТОВ ВЕГНЕСТ Однако удаляемый таким образом оператор не может быть встроенным. Преобразование типов Еше раз рассмотрим следующее определение типа данных.
ТУРЕ 3() РОЯЯВЕР ( СНАВ ) По умолчанию допустимое представление этого типа унаследует имя 3(), а значит, данное имя получит и соответствующий оператор выбора. Таким образом, следующее выражение будет корректным. 3() ( '31' ) Оно возвращает номер определенного поставщика. Обратите внимание на то, что оператор выбора 3() можно рассматривать как оператор преобразования типа, который преобразует строки в номера поставщиков. Аналогично оператор выбора Р(( можно рассматривать как оператор преобразования строк в номера деталей, а оператор выбора ДТУ вЂ” как оператор преобразования целых чисел в количество деталей и т.д.
В главе 3 приводилось несколько примеров, в которых строки сравнивались с номерами деталей. Например, в упр. 3.4 присутствует следующее выражение. ...ННЕВЕ Р(( = 'Р2' Глава 5. Домены, отношения и базовые переменные-отношения 161 Левая часть этого сравнения принадлежит типу Рэ, а правая имеет тип СНАЯ. Поэтому при сравнении (фактически во время компилирования) должна возникнуть ошибка несовпадения типов. Однако с концептуальной точки зрения система может "догадаться", что для преобразования значения в правой части сравнения (тнп СНАЯ) в тип Рэ можно использовать "оператор преобразования" РР.
В этом случае система перепишет предыдущее выражение следующим образом. ,..ННННН И = РР ( Рг ) Теперь операция сравнения является корректной. Вызов оператора преобразования в такой неявной форме называется приведением, и мы часто, хотя и негласно, использовали этот метод в главе 3.
Тем не менее известно, что на практике использование операций приведения нередко приводит к ошибкам в программах. По этой причине мы принимаем консервативную точку зрения, и с этого момента использование автоматических приведений типов запрешается — операнды всегда должны иметь соответствующие типы, а не просто быть приводимыми к этим типам. В частности, будем требовать следующее, ° Величины, расположенные слева и справа от операторов "<", ">" и "=", должны быть одного и того же типа. ° Величины, расположенные слева и справа от оператора присвоения ": =", должны быть одного и того же типа. Разумеется, прн необходимости для явного преобразования типов можно воспользоваться так называемыми операторами САЯТ, как, например, показано ниже.
САЯТ АЯ НАТТОЯИ, ( 5 ) Как уже отмечалось, операторы выбора — по крайней мере, зависящие от одного аргумента — также можно рассматривать в качестве явных операторов преобразования типов данных. Заключительные замечания Из всего вышесказанного о поддержке типов данных можно сделать несколько выводов, Наиболее важные из них приводятся ниже. ° Во-первых, наиболее важно то, что теперь система может определить, какие выражения являются допустимыми, а какие нет, и установить тип результата выполнения любого допустимого выражения. ° Во-вторых, общая совокупность всех типов данных определенной базы данных является замкнутым множеством.
Это означает, что тип результата выполнения любого допустимого выражения принадлежит этой совокупности. В частности, если операторы сравнения являются допустимыми, то этому замкнутому множеству обязательно должен принадлежать тип Ъоо1еап или значение Сгце! ° В-третьих, тот факт, что системе известны типы результатов выполнения всех допустимых выражений, означает, в частности, что системе известно и то, какие операции присвоения и сравненця допустимы. 162 Часть 11.
Реляционная модель В завершение этого раздела приведем важный факт, который пригодится нам в будущем. Мы сказали, что домен — это тип данных, системный или определенный пользователем, с произвольной внутренней структурой и что к значениям этого типа применимы только определенные для него операторы (внутреннее представление типа скрыто от пользователя). Теперь, если переключиться на объектно-ориентированные системы, можно обнаружить, что фундаментальное понятие таких систем, класс объектов, — это тип данных, системный или определенный пользователем, с произвольной внутренней структурой и что к значениям этого типа применимы только определенные для него операторы (внутреннее представление типа скрыто от пользователя)...
Другими словами, домены и классы объектов — это одно и то зюе! Данный факт является звеном, связующим две технологии — объектную и реляционную. Подробно этот важный вопрос изучается в главе 25. 5.3. Значения отношений Как уже говорилось в главе 3, следует четко различать собственно отношения и переменные-отношения (т.е. переменные, значениями которых являются отношения).
В этом разделе рассматриваются значения отношений (для краткости — просто отношения). Переменные-отношения будут рассмотрены в сдедующем разделе. Прежде всего дадим точное определение термина отношение. ° Пусть задано множество из и типов или доменов Т, ((= 1, 2, ..., и), причем все они необязательно должны быть различными. Тогда г будет отношением, определенным на этих типах, если оно состоит из двух частей: заголовка и телаз, где: а) заголовок — это множество из п атрибутов вида А;:Тй здесь А; — имена атрибутов (которые должны отличаться одно от другого) отношения г, а Т; — соответствующие имена типов ((= 1, 2, „и); б) тело — это множество из т кортежей й здесь б в свою очередь, является множеством компонентов вида Арчь в которых з; — значение типа Ть т.е.
значение атрибута для атрибута А; в кортеже г (( = 1, 2, ..., и). Значения т и п называются соответственно кардинальностью и степенью отношения г. Из этого определения вытекает следующее. 1. В терминах таблицы, представляющей отношение, заголовок — это строка„состоящая из названий столбцов и соответствующих имен типов, а тело — это множество строк данных (далее будет рассматриваться подробнее).
2. Говорят, что атрибут А; имеет тип Т; нли (ииогда) определен на типе Ть Отметим, что любое число различных атрибутов из одного отношения или из различных отношений может быть одного и того же типа (см. рис. 3.8 в главе 3, рис.4.5 и рис. 4.6 в главе 4). 3. В любой заданный момент могут существовать значения определенного типа, не представленные в базе данных как значение одного из атрибутов этого типа. Например, значение 'Р8' может быть номером некоторой детали, хотя на рис.
3.8 детали с номером 'Р8' нет. В Заголовок еи1е иногда называют схемой (отношения). Используется также терман содержание (1лселз1ол). В этом случае тело называется расширением (ехселнол), Глава 5. Домены, отношения и базовые переменные-отношения 163 4. Как сказано в определении, значение и, задающее количество атрибутов некоторого отношения, называется его степенью (иногда используется термин арность). В последнем случае отношение степени ! называется унарным, степени 2 — бинарным, степени 3 — тернарным, ..., с~висни п — п-арным. Таким образом, реляционная модель в общем случае имеет дело с и-арными отношениями, где п — произвольное натуральное число. 5. Иногда вместо термина картеж используется термин и-кортеж (например 4- кортеж, 5-кортеж и т.д.), однако чаще всего префикс "и-" опускается.
б. Когда мы говорим, что Н является заголовком отношения г, то, если быть более точным, это означает, что отношение г является отношением типа КЕЫТ10И(Н) (имя этого типа именно КЕЕАТ10М(Н)). Дальнейшее обсуждение данного вопроса будет продолжено в разделе 5.4. В качестве примера рассмотрим представленную на рис. 5.1 таблицу (в этом случае мы умышленно не называем ее отношением), чтобы проверить, насколько она соответствует данному выше определению.