Программирование >>  Хронологические базы данных 

1 ... 44 45 46 [ 47 ] 48 49 50 ... 348


Параметр <тип отношение имеет следующий вид. RELATION { <список атрибутов> }

Здесь каждое значение <атрибут> в параметре <список атрибутов>, в свою очередь, является упорядоченной парой следующего вида.

<имя атрибута> <имя типа>

Смысл выражения <перечень определений потенциальных ключей> и необязательного выражения <перечень определений внешних ключей> раскрывается ниже.

Замечание. Термин <список ...> (список, разделенный запятыми) был определен в главе 4 (раздел 4.6), а термин <перечень ...> имеет следующее определение. Если <xyz> - это некоторая синтаксическая категория (т.е. что-либо, что записывается слева в BNF-нотации), то <перечень xyz> обозначает последовательность категорий <xyz>, количество которых больше нуля либо равно нулю, причем каждая соседняя пара этих определений разделяется по крайней мере одним пробелом.

В качестве примера рассмотрим несколько определений базовых отношений для базы данных поставщиков и деталей.

VAR S BASE RELATION { St St,

SNAME NAME,

STATUS INTEGER,

CITY CHAR } PRIMARY KEY { St } ;

VAR P BASE RELATION { Pt Pt,

PNAME NAME,

COLOR COLOR,

WEIGHT WEIGHT,

CITY CHAR } PRIMARY KEY { Pt } ;

VAR SP BASE RELATION { St St,

Pt Pt,

QTY QTY } PRIMARY KEY{ St, Pt } FOREIGN KEY{ St } REFERENCES S FOREIGN KEY{ P } REFERENCES P ;

Пояснения

1. Эти три базовые переменные-отношения относятся к следующим типам (отношений).

RELATION { St St, SNAME NAME, STATUS INTEGER, CITY CHAR } RELATION { Pt Pt, PNAME NAME, COLOR COLOR, WEIGHT WEIGHT,

CITY CHAR } RELATION { St S#, Pt P#, QTY QTY }



Очевидно, что все эти типы (отношений) действительно являются типами и могут использоваться любым обычным способом; в частности, как тип атрибута некоторого отношения. (Фактически тип RELATION является генератором типов, позволяющим определять сколько угодно различных типов отношений, подобно тому как тип array является генератором типов массивов в общепринятых языках программирования.)

2. Все возможные значения переменной-отношения принадлежат одному типу (а именно, тому типу, который прямо или косвенно был задан при определении этой переменной-отношения) и, следовательно, имеют одинаковые заголовки. В частности, начальным значением любой переменной-отношения является пустое отношение соответствующего типа.

3. Термины заголовок, тело, атрибут, кортеж, кардинальность и степень, уже определенные для значений отношений, очевидным образом переносятся на переменные-отношения (на все переменные-отношения, а не только на базовые переменные-отношения).

4. При определении новой базовой переменной-отношения система делает в каталоге запись - описание этой переменной-отношения.

5. Определение потенциальных ключей будет дано в главе 8. До этого времени мы просто будем считать, что в каждом определении базовой переменной-отношения есть ровно одно такое определение, записанное в следующем виде.

PRIMARY KEY {<список имен атрибутов>}

Определение внешних ключей также приводится в главе 8.

6. Наконец, любую существующую базовую переменную-отношение можно удалить. DROP VAR <имя переменной-отношениа>)

В результате выполнения этой операции сначала значение базовой переменной-отношения устанавливается равным пустому отношению (т.е. из базовой переменной-отношения удаляются все кортежи), а затем из каталога удаляются записи, соответствующие этой переменной-отношению. По завершении указанных действий данная базовая переменная-отношение перестает быть известной системе.

Замечание. Для простоты предполагается, что выполнение оператора DROP приведет к ошибке, если удаляемая переменная-отношение где-либо используется, например если на нее имеется ссылка в определении какого-либо представления. Представления будут рассмотрены в главе 9.

Обновление переменных-отношений

Присвоение значений переменным-отношениям, т.е. их обновление, в реляционной модели осуществляется с помощью оператора реляционного присвоения. На языке Tutorial D это делается следующим образом.

<имя переменной-отношении := <реляционное выражение>;

После вычисления реляционного выражения, заданного параметром <реляционное выражение>, полученное значение присваивается переменной-отношению с именем, которое указано параметром <имя переменной-отношении, заменяя ее прежнее значение. Разумеется, переменная-отношение и полученное в результате вычислений отношение должны быть одного типа, т.е. иметь одинаковые заголовки.



Предположим, к примеру, что задана некоторая переменная-отношение R, принадлежащая тому же типу, что и переменная-отношение поставщиков S.

VAR R BASE RELATION

{ S# SI, SNAME NAME, STATUS INTEGER, CITY CHAR }

Ниже приведено несколько примеров правильного реляционного присвоения,

R := S;

R := S WHERE CITY = London ;

R := S MINUS ( S WHERE CITY = Paris ) ;

Заметьте, что каждый из этих примеров можно рассматривать и как пример выборки данных из отношения, заданного в правой части выражения, и как пример обновления значения переменной-отношения, расположенной слева от оператора присвоения.

Предположим теперь, что во втором и третьем примерах переменную-отношение R заменили переменной-отношением S.

S := S WHERE CITY = London ;

S := S MINUS ( S WHERE CITY = Paris ) ;

В этом случае оба присвоения обновляют значение переменной-отношения S: первое удаляет всех поставщиков, находящихся вне Лондона, а второе удаляет всех поставщиков, находящихся в Париже. Для удобства язык Tutorial D поддерживает явные операторы INSERT, DELETE и UPDATE, однако каждый из них является лишь сокращенным обозначением некоторой операции реляционного присвоения. Например, рассмотрим следующий оператор.

INSERT INTO S

RELATION { TUPLE { Si SI ( S6 ),

SNAME NAME ( Smith ),

STATUS 50,

CITY Rome } } ;

Oh является эквивалентом операции присвоения, которая записывается так.

S := S UNION

RELATION { TUPLE { S S ( S6 ),

SNAME NAME ( Smith ),

STATUS 50,

CITY Rome } } ;

Обратите внимание, что эта операция присвоения будет успешной лишь в том случае, если в переменной-отношении S уже содержится кортеж с данными о поставщике с номером S6. На практике аналог оператора INSERT, записанный в виде оператора при-

Выражение RELATION {...} в примере оператора INSERT является обращением к оператору выбора (в свою очередь, выражение в фигурных скобках в фразе TUPLE (...) является обращением к оператору выбора кортежа, а выражения во внутренних скобках - обращением к оператору выбора скаляров). Подробнее об этом рассказывается в разделах 6.3 и 6.4 главы 6.



1 ... 44 45 46 [ 47 ] 48 49 50 ... 348

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика