Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных.doc
Скачиваний:
114
Добавлен:
16.03.2016
Размер:
5.67 Mб
Скачать

23.3. Типизированные таблицы

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

23.3.1. Определение типизированной таблицы

С точки зрения синтаксиса оператор определения типизированной таблицы является частным случаем оператора создания базовой таблицы CREATE TABLE, обсуждавшегося в лекции 16 (там мы не имели возможности рассматривать этот частный случай). Типизированные таблицы определяются в следующем синтаксисе:

typed_table_defintion ::= CREATE TABLE typed_table_name

OF UDT_name

[ UNDER typed_table_name ]

[ (typed_table_element_list) ]

Первой существенной особенностью оператора создания типизированной таблицы является обязательное наличие раздела OF, в котором указывается имя ранее определенного структурного типа. Строки типизированной таблицы являются экземплярами ассоциированного с таблицей структурного типа.

Подтаблицы и супертаблицы

Далее, при определении типизированной таблицы можно объявить ее подтаблицей некоторой другой типизированной таблицы (имя супертаблицы указывается в разделеUNDER). ТаблицаR'является собственной подтаблицей супертаблицыR, еслиR'не совпадает сR(в этом случае таблицаRявляется собственной супертаблицей подтаблицыR'). Супертаблица должна быть ассоциирована со структурным типом, являющимся непосредственным супертипом202)определяемой подтаблицы. Каждый столбец указанной супертаблицы наследуется подтаблицей; наследуются и характеристики столбцов супертаблицы – значения по умолчанию, ограничения целостности и т. д. Эти столбцы называются унаследованными столбцами подтаблицы, и они соответствуют атрибутам UDT подтаблицы, унаследованным от UDT супертаблицы. Кроме того, подтаблица будет содержать по одному столбцу для каждого собственного атрибута ассоциированного структурного типа. Такие столбцы подтаблицы называются заново определенными.

Как это принято в SQL, столбцы типизированной таблицы имеют порядковые номера. При этом унаследованные столбцы нумеруются до заново определенных столбцов и имеют те же номера, которые имели столбцы супертаблицы.

Определение элементов типизированной таблицы

Заключительным компонентом определения типизированной таблицы является конструкция typed_table_element_list, являющаяся обобщением конструкции

202 Тип T является непосредственным супертипом типа T' в том и только том случае, когда T является супертипом T', и не существует такого типа T'', что T является супертипом T'', и T'' является супертипом T'.

table_element_list, которая используется в определении обычной базовой таблицы (см. лекцию 16). Элемент списка элементов типизированной таблицы определяется следующим синтаксическим правилом:

type_table_element ::= table_constraint_definition

| self-referencing_column_specification

| column_options

Как видно из этого правила, в определении типизированной таблицы разрешается указывать табличные ограничения целостности. Если определяемая таблица является подтаблицей некоторой супертаблицы, то в ней не допускается определение ограничения первичного ключа (PRIMARY KEY). Однако если определяется максимальная супертаблица, то в ее определении допускается спецификацияPRIMARY KEY(с указанием одного или нескольких столбцов) или спецификация ограниченияUNIQUE(с указанием одного или нескольких столбцов) в комбинации с указаниемNOT NULL. В определении типизированной таблицы могут также содержаться спецификации ссылочных ограничений целостности. Ссылки могут вести как на типизированную, так и на обычную таблицу.

«Самоссылающийся» (self-referencing) столбец специфицируется в следующем синтаксисе:

REF IS column_name { SYSTEM GENERATED

| USER GENERATED | DERIVED }

Эта спецификация не может входить в определение подтаблицы. Спецификация должна присутствовать в определении максимальной супертаблицы, и самоссылающийся столбец, определенный в максимальной супертаблице, наследуется любой ее подтаблицей. Семантика самоссылающихся столбцов обсуждается в следующем пункте.

Последней разновидностью элемента типизированной таблицы являются опции столбцов (column_options). Опции столбца можно указывать только для заново определенных столбцов – для унаследованных столбцов это не допускается. Соответствующая конструкция имеет следующий синтаксис:

column_name WITH OPTIONS ::= scope_clause

|default_clause

|column_constraint_definition_list

|collate_clause

Раздел scope_clauseможет входить в опции только заново определяемого столбца с типомREF(подробности в следующем подразделе). Для заново определяемого столбца некоторого типа символьных строк можно указать разделcollate_clause, чтобы задать желаемый порядок на соответствующем наборе символов. Если требуется указать значение столбца по умолчанию, отличное от значения по умолчанию соответствующего атрибута, ассоциированного с определяемой таблицей структурного типа, можно воспользоваться опциейdefault_clause. Наконец, для заново определяемого столбца можно указать одно или несколько ограничений, включая проверочные ограничения (см. лекцию 16).