ЗНАЕТЕ ЛИ ВЫ?

Назначение и структура операторов DDL



Концептуально операторы DDL являются декларациями. Принимая такую декларацию, система порождает группу SQL-операторов обновления таблиц системного каталога.

Операторы DDL можно разделить на три категории:

· CREATE – определение (создание) объекта;

· DROP – уничтожение существующего объекта;

· ALTER – изменение определения существующего объекта.

Привилегии уничтожения и изменения определения объекта имеет только владелец схемы, которой принадлежит объект. Они не могут быть переданы другому ID.

Каждый оператор категории CREATE создаёт объект схемы.

CREATE тип_объекта имя определение;

тип_объекта ::= ASSERTION

| CARACTER SET

| COLLATION

| DOMAIN

| SCHEMA

| TABLE

| TRANSLATION

| VIEW

имя – это уникальный идентификатор объекта. Полное имя имеет вид кластер.каталог.схема.объект. Если префиксы не указаны, то система относит создаваемый объект к текущей схеме. Имя объекта должно быть уникальным в схеме.

определение ­– описание структуры и свойств объекта.

Любой оператор этой категории порождает группу SQL-операторов вставки строк в таблицы системного каталога.

Объект, созданный оператором CREATE, может быть уничтожен оператором

DROP тип_объекта имя [дополнительные _опции];

Оператор этой категории порождает группу SQL-операторов удаления строк из таблиц системного каталога.

Определение домена или таблицы, созданное оператором CREATE, может быть изменено оператором

ALTER тип_объекта имя изменение_определения;

тип_объекта ::= DOMAIN

| TABLE

изменение_определения ::= SET_опция

| ADD_опция

| DROP_опция

Один оператор ALTER вносит только одно изменение в определение объекта. Опции оператора ALTER определяют действия, изменяющие свойства объекта. В общем случае оператор категории ALTER порождает группу SQL-операторов обновления таблиц системного каталога.

Ниже в настоящем подразделе рассмотрены только операторы DDL для работы с доменами, таблицами, утверждениями, представлениями и схемами.

6.3.2 Оператор определения домена

Оператор определения домена имеет следующий вид[25]:

CREATE DOMAIN имя_домена [AS] тип_данных

[ DEFAULT значение_по_умолчанию ]

[ определение_ограничения… ];

тип_данных ::= имя_встроенного_типа_данных [(длина)]

| имя_домена

значение_по_умолчанию – значение, которое будет присвоено при обновлении определенному на домене столбцу, если новое значение не указано явно.

определение_ограничения ::=

[имя_ограничения]

CHECK (предикат)

[

[ [ NOT ] DEFERRABLE ]

[

{ INITIALLY IMMEDIATE }

| { INITIALLY DEFERRED }

]

]

где предикат – любой допустимый предикат SQL (см. п. 6.2.6).

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

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

Дополнительные параметры определяют режим проверки ограничения. По умолчанию она выполняется после каждого оператора обновления, затрагивающего определенный на домене столбец. Если указан параметр DEFERRABLE, то проверка может быть отложена до окончания транзакции. Для этого нужно указать INITIALLY DEFERRED. Если ограничение помечено как откладываемое (DEFERRABLE), то режим его проверки может быть изменён в сеансе работы сколько угодно раз с помощью специального оператора, устанавливающего текущий режим проверки ограничений.

Примеры.

CREATE DOMAIN CITY AS CHAR(15);

Это предложение определяет домен символьных строк длиной до 15 символов. Домен может использоваться как тип данных для столбцов S.Ci, P.Ci и J.Ci.

CREATE DOMAIN Weight REAL

CHECK (VALUE > 5.9 AND VALUE < 12.5);

Домен Weight содержит только вещественные значения в интервале (5.9, 12.5).

CREATE DOMAIN Pnum CHAR(4)

CHECK (VALUE LIKE ‘P_ _ _’);

Определён домен символьных строк длиной 4 символа. Допустимое значение должно содержать символ ‘P’ и три произвольных символа. Ограничение будет проверяться после каждой попытки обновления любого столбца, определенного на домене Pnum.

CREATE DOMAIN SPJPnum CHAR

CHECK (VALUE IN (SELECT Pnum FROM P));

Это предложение определяет домен SPJPnum, содержащий все значения столбца Pnum из существующей в момент проверки ограничения таблицы P.

Оператор уничтожения домена

DROP DOMAIN имя_домена CASCADE | RESTRICT;

Ключевое слово RESTRICTуказывает, что оператор не должен исполняться, если в определениях столбцов схемы имеются ссылки на уничтожаемый домен. Ключевое слово CASCADE указывает, что перед удалением домена система должна выполнить один или более операторов ALTER TABLE для каждой таблицы, содержащей хотя бы один столбец, ссылающийся на удаляемый домен. После выполнения этих операторов столбец получит тип данных удаляемого домена, его значение по умолчанию, если оно не было определено для столбца явно, и все ограничения домена.

Оператор изменения домена

ALTER DOMAIN имя_домена

{ SET DEFAULT значение_по_умолчанию }

| { DROP DEFAULT}

| { ADD определение_ограничения }

| {DROP CONSTRAINT имя_ограничения };

Параметр SET DEFAULT определяет для домена значение по умолчанию, если оно не было задано при создании домена. Это значение будет использоваться для каждого столбца, определенного на домене[26]. DROP DEFAULT отменяет ранее установленное значение по умолчанию. ADD накладывает новое ограничение на домен, а DROP CONSTRAINT отменяет указанное именем ограничение. Если имя ограничения не было задано в определении домена, то назначенное системой имя можно получить из информационной схемы.

Пример.

ALTER DOMAIN Weight SET DEFAULT 6.0;

Для домена Weight (см. примеры в п. 6.3.2) устанавливается значение по умолчанию 6.0.

6.3.5 Оператор определения таблицы

Стандарт SQL2 предусматривает возможность определения постоянных и созданных временных базовых таблиц посредством следующего оператора:

CREATE [{ GLOBAL | LOCAL } TEMPORARY ] TABLE имя_таблицы

(

{

определение_столбца

| [ограничение_таблицы]

}.,..

[ ON COMMIT { DELETE | PRESERVE } ROWS ]

);

Если указан параметр TEMPORARY, то создаваемая таблица является временной и для неё следует указать дополнительно GLOBALилиLOCAL.

Предложение ON COMMIT используется только для временных таблиц. Оно определяет действия системы при успешном завершении транзакции. Если указано PRESERVE, то данные таблицы сохраняются для следующей транзакции. DELETE означает, что строки таблицы должны быть удалены. По умолчанию используется DELETE. Если транзакция завершается откатом, то таблица возвращается к состоянию на конец предыдущей транзакции.

Определение столбца подобно определению домена.

определение_столбца ::=

имя_столбца { имя_домена | тип_данных [ (длина) ]}

[ограничение_столбца…]

[ DEFAULT значение_по_умолчанию ]

[ COLLATE имя_сравнения ]

Имя столбца должно быть уникальным в пределах таблицы. Тип данных и длина определяются смыслом данных. Для столбца типа CHARACTER STRING можно задать последовательность сортировки предложением COLLATE. Если столбец ссылается на домен, для которого задано значение по умолчанию и/или последовательность сортировки, то предложения DEFAULT и COLLATE в определении таблицы переопределяют их для столбца.

Пример 1. Простейшее определение таблицы может иметь вид:

CREATE TABLE P

( Pnum Pnum,

Pnam CHAR(15),

We NUMERIC,

Co CHAR(10),

Ci City

);

Здесь определена таблица P из «учебной» базы данных «Поставщик – Деталь – Изделие». Столбцы Pnum и Ci принимают значения на доменах Pnumи City соответственно (см. примеры в п. 6.3.2). Недостаток этого (допустимого в SQL) определения в том, что таблица не имеет первичного ключа. Это означает, что система не сможет поддерживать требование целостности сущности. Она не создаст (автоматически) индекс для столбца Pnum, имеющего смысл первичного ключа.

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

ограничение_столбца ::=

[ CONSTRAINT определение_имени_ограничения ]

NOT NULL

| PRIMARY KEY

| UNIQUE

| CHECK (предикат)

| { REFERENCES имя_таблицы

[ (имя_столбца) ] [ссылочная_спецификация] }

[[ NOT ] DEFERRABLE ]

[{ INITIALLY IMMEDIATE } | { INITIALLY DEFERRED }]

Ограничение столбца подобно ограничению домена. Рассмотрим здесь только предложения, не упоминавшиеся выше (см. таблица 6.4).

Таблица 6.4 Спецификации ограничений столбца

Предложение Смысл
NOT NULL Столбец не содержит неопределенных значений.
PRIMARY KEY Столбец является первичным ключом.
UNIQUE Столбец не содержит повторяющихся значений.
REFERENCES Значения столбца являются ссылками.

Предложения PRIMARY KEY и UNIQUE описывают соответственно простые первичные и альтернативные ключи. Ограничение PRIMARY KEY означает, что все значения столбца должны быть различны и среди них не может быть NULL-значений. Для конкретной таблицы может существовать единственное ограничение PRIMARY KEY. В отличие от этого, ограничение UNIQUE допускает NULL-значения столбца и может встретиться в определении таблицы несколько раз.

Предложение REFERENCES определяет имя родительской (ссылочной) таблицы, на которую ссылается специфицируемый столбец. Ссылочный и ссылающийся столбцы должны иметь одинаковые типы данных и длины. Согласно стандарту, ссылочным может быть любой столбец родителя, имеющий ограничение PRIMARY KEY или UNIQUE. Если специфицируемый столбец ссылается на альтернативный ключ родителя, то следуетуказать имя столбца родительской таблицы, на который ведёт ссылка.

Замечание. Это еще одно отличие SQL2 от реляционной модели данных. Предыдущий стандарт требовал только соответствия типов и длин ссылочных и ссылающихся столбцов.

Ссылочная спецификация описывает правила ссылочной целостности.

ссылочная_спецификация ::= [ ON UPDATE { CASCADE

| SET NULL

| SET DEFAULT

| NO ACTION }]

[ ON DELETE { CASCADE

| SET NULL

| SET DEFAULT

| NO ACTION }]

Предложения ON UPDATE и ON DELETE содержат инструкции, определяющие стандартные действия системы при попытках обновления или удаления значений родительского столбца.

Если используется инструкция CASCADE, то значения ссылающегося столбца, совпадающие с обновляемым (удаляемым) значением родительского ключа, будут соответственно обновлены (удалены).

Инструкция SET NULL требует замещения значений ссылающегося столбца, совпадающих с обновляемым (удаляемым) значением родительского ключа, значениями NULL, а инструкция SET DEFAULT– значениями по умолчанию.

Правило NO ACTIONозначает, что автоматическое изменение значений внешнего ключа выполняться не будет. Если обновление/удаление значения родительского ключа влечет нарушение ссылочной целостности, то обновляющая операция будет отвергнута.

Некоторые коммерческие продукты допускают определение нестандартных правил ссылочной целостности [2, п. 2.3.6.5] и связывание их с таблицами в операторах CREATE TABLE.

Пример 2. Используя ограничения столбца можно создать более осмысленное определение таблицы P (см. пример 1):

CREATE TABLE P

( Pnum Pnum PRIMARY KEY,

Pnam CHAR(15) NOT NULL,

We NUMERIC CHECK(We BETWEEN 50 AND 3000),

Co CHAR(10),

Ci City

);

При обновлении таблицы, имеющей такое определение, система не допустит появления строк с неопределенными или дублирующими значениями атрибута Pnum, или с неопределенными значениями поля Pn, или со значениями We < 50 или We > 3000.

Ограничение таблицы подобно ограничению столбца, но распространяется на подмножество столбцов. Синтаксис ограничения таблицы является очевидным расширением синтаксиса определения столбца.

ограничение_таблицы ::=

[ CONSTRAINT определение_имени_ограничения ]

{ PRIMARY KEY (имя_столбца.,..) }

| { UNIQUE (имя_столбца.,..) }

| CHECK (предикат)

| { FOREIGN KEY (имя_столбца.,..)

REFERENCES имя_таблицы

[ (имя_столбца.,..) ] [ ссылочная_спецификация ]}

[[ NOT ] DEFERRABLE

[{ INITIALLY IMMEDIATE } | { INITIALLY DEFERRED }]]

Здесь спецификации PRIMARY KEY и UNIQUE – первичный и альтернативный ключи соответственно.

Предложение FOREIGN KEY определяет составной внешний ключ. Список столбцов в предложении REFERENCESследует указать, если ссылка ведет не на первичный ключ родительской таблицы. Ссылочным может быть любой её альтернативный ключ. Список столбцов внешнего ключа должен быть эквивалентен списку столбцов ссылочного ключа, т.е. должны совпадать длины списков, а также типы и длины соответственных столбцов.

Ссылочная спецификация ограничения таблицы подобна ссылочной спецификации ограничения столбца. В дополнение к указанным в выше параметрам, она может содержать параметр MATCH {FULL | PARTIAL}. Он определяет тип совпадения значений внешнего и родительского ключей.

Если указано MATCH FULL, то частично неопределённые значения внешнего ключа не допускаются. Каждая строка внешнего ключа должна либо целиком состоять из значений NULL, либо полностью совпадать с какой-нибудь строкой родительского ключа.

При использовании MATCH PARTIAL допускаются частично неопределённые значения внешнего ключа. В этом случае все определённые значения строки внешнего ключа должны совпадать с соответственными значениями какой-либо строки родительского ключа.

Если предложение MATCH не указано, то допустимы любые частично неопределённые значения внешнего ключа, однако если строка внешнего ключа не содержит NULL-значений, то она должна полностью совпадать с какой-либо строкой родительского ключа.

Все прочие параметры ссылочной спецификации ограничения на таблицу полностью совпадают с описаными выше для ограничения на столбец.

Пример 3. Запишем определение таблицы SPJ из нашей «учебной» БД:

CREATE TABLE SPJ

( Snum Snum NOT NULL

REFERENCES S

ON UPDATE CASCADE,

Pnum Pnum NOT NULL

REFERENCES P

ON UPDATE CASCADE,

Jnum Jnum NOT NULL

REFERENCES J

ON UPDATE CASCADE,

Qt NUMERIC CHECK (Qt BETWEEN 1000 AND 10000),

PRIMARY KEY (Snum, Pnum, Jnum)

);

Здесь мы предполагаем, что в схеме определены домены Snum, Pnum и Jnum, на которых принимают значения первичные ключи таблиц S, P и J соответственно. При обновлении значений родительских ключей будут соответственно обновляться совпадающие значения ссылающихся ключей. Удаление значений родительских ключей не будет выполняться до тех пор, пока в таблицеSPJ существует хотя бы одна ссылка на удаляемое значение. Система не допустит ввода неопределенных значений в столбцы Snum, Pnum и Jnum. Кроме того, она запретит ввод неуникальных комбинаций значений этих столбцов. Ограничение CHECK представляет правило ПО, согласно которому не может быть поставки, объём которой менее 1000 или более 10000 штук деталей одного вида.

6.3.6 Оператор изменениятаблицы

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

ALTER TABLE имя_таблицы

{ADD [ COLUMN ] определение_столбца }

| { ADD определение_ограничения_таблицы }

| { ALTER [ COLUMN ] имя_столбца изменяющее_действие}

| { DROP [ COLUMN ] имя_столбца RESTRICT | CASCADE }

| {DROP CONSTRAINT имя_ограничения RESTRICT | CASCADE };

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

Новый столбец добавляется в конец заголовка таблицы. Определение столбца такое же, как в операторе CREATE TABLE. Если таблица не пуста, то новый столбец будет заполнен значениями по умолчанию во всех строках[27]. Если значение по умолчанию не определено, то столбец примет во всех строках значения NULL.

Предложение ALTER [COLUMN] используется для создания или отмены значения по умолчанию для столбца. Здесь

изменяющее_действие ::=

{ SET DEFAULT значение_по_умолчанию } | { DROP DEFAULT}

Предложение DROP[COLUMN]удаляет столбец из таблицы. Операция не выполняется, если таблица имеет единственный столбец. Если таблица не пуста, все данные, содержащиеся в удаляемом столбце, разрушаются. Параметр RESTRICT означает, что оператор будет выполнен, только если на удаляемый столбец нет ссылок в определениях других объектов – представлений, ограничений или утверждений. Исключение составляют ограничения, содержащиеся в определении изменяемой таблицы и ссылающиеся только на удаляемый столбец. Эти ограничения будут удалены вместе со столбцом. Если используется CASCADE, то из схемы будут удалены все представления, ограничения и утверждения, определения которых содержат ссылки на удаляемый столбец.

Предложение DROP CONSTRAINT удаляет определение ограничения таблицы.

Пример. Приведём последовательность операторов ALTER TABLE, которая преобразует первоначальное определение таблицы P (см. пример 1 из п. 6.3.5).

ALTER TABLE P

ADD PRIMARY KEY(Pnum);

ALTER TABLE P

DROP Pn;

ALTER TABLE P

ADD Pn CHAR(15) NOT NULL;

ALTER TABLE P

ADD CHECK(We BETWEEN 50 AND 3000);

Оператор удаления таблицы

Операториспользуется только для удаления определений таблиц, созданных оператором CREATE TABLE. Его синтаксис таков:

DROP TABLE имя_таблицы CASCADE | RESTRICT;

Если используется параметр RESTRICT, то операция не выполняется, если существуют представления или ограничения, в определениях которых имеются ссылки на удаляемую таблицу. Использование CASCADE приводит к автоматическому удалению таких представлений и ограничений.

6.3.8 Оператор определения представления

Оператор создаёт виртуальную таблицу – именованный запрос. Используется следующий синтаксис:

CREATE VIEW имя_таблицы [ (имя_столбца.,..) ]

AS запрос

[ WITH [CASCADED | LOCAL] CHECK OPTION ];

Здесь имя_таблицы – имя создаваемого представления. Оно сохраняется в разделе системного каталога, содержащем сведения о таблицах. В запросах ссылки на представления обрабатываются так же, как ссылки на любые другие таблицы.

запрос – оператор SELECT, формирующий тело представления. Запрос не исполняется при обработке оператора CREATE VIEW. Он сохраняется в системном каталоге и связывается с именем представления. Исполнение запроса происходит в процессе обработки какого-либо оператора DML, в котором встретилась ссылка на представление.

Запрос в определении представления может ссылаться на любые именованные таблицы за исключением объявленных временных. Однако не допустимы прямые или косвенные ссылки на определяемое представление. Кроме того, в запросе нельзя использовать предложение ORDER BY, т.к. представление есть таблица, а строки таблицы неупорядочены по определению.

По умолчанию имена столбцов представления совпадают с именами столбцов целевого списка запроса. Если при работе с представлением желательно использование других имён, то следует указать их список в предложении CREATE VIEW. Число элементов этого списка должно совпадать с числом столбцов в целевом списке запроса. Список имён столбцов обязательно должен быть указан, если целевой список запроса содержит:

· одноимённые столбцы различных таблиц;

· не поименованные предложением AS вычислимые столбцы;

· безымянные столбцы, полученные в результате операций UNION, EXCEPT, INTERSECT.

Необязательное предложение WITH CHECK OPTION используется при определении так называемых обновляемых представлений. Его смысл подробно обсуждается в п. 6.4.

Пример.Следующий оператор создаёт представление Parts на основе двух базовых таблиц – P и SPJ. Оно будет обрабатываться операторами DML как таблица Parts, содержащая данные о деталях и общих объёмах их поставок.

CREATE VIEW Parts (Number, Name, Weight, Color, City, Quantity)

SELECT P.*, SUMQ.SQT

FROM P JOIN (

SELECT Pnum, SUM(Qt) AS SQT

FROM SPJ

GROUP BY Pnum

) AS SUMQ;

А вот другой способ создания этого представления:

CREATE VIEW SUMQ (Pnum, SQT)

SELECT Pnum, SUM(Qt)

FROM SPJ

GROUP BY Pnum;

CREATE VIEW Parts (Number, Name, Weight, Color, City, Quantity)

SELECT P.*, SUMQ.SQT

FROM P, SUMQ

WHERE P.Pnum = SUMQ.Pnum;

Определение представления можно уничтожить оператором:

DROP VIEW имя_таблицы CASCADE | RESTRICT;

Здесь имя_таблицы есть имя уничтожаемого представления. Смысл параметров CASCADE и RESTRICT такой же, как в операторе уничтожения таблицы.

6.3.9 Оператор определения утверждения

Этот оператор создаёт объект схемы, содержащий проверку ограничения:

CREATE ASSERTION имя_утверждения

CHECK (предикат) [[ NOT ] DEFERRABLE ]

[

{ INITIALLY IMMEDIATE }

| { INITIALLY DEFERRED }

];

Сравните это с синтаксисом определения ограничения в операторе CREATE DOMAIN.

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

Пример.Пусть в нашей учебной БД определена таблица, в которой хранятся сведения о квотах поставок для конкретных поставщиков:

CREATE TABLE Quota

(

Snum Snum NOT NULL REFERENCES S,

Pnum Pnum NOT NULL REFERENCES P,

Lim NUMERIC NOT NULL

DEFAULT 10000

CHECK (Lim BETWEEN 5000 AND 20000),

PRIMARY KEY (Snum, Pnum)

);

В этой таблице столбец Limсодержит значения квот поставок конкретных видов деталей, установленных для конкретных поставщиков. Согласно правилам бизнеса суммарный объём поставок детали Pnum, выполненных поставщиком Snum, не может превышать квоты, т.е. значения поля Lim в соответствующей строке таблицы Quota. Это правило может быть нарушено как при обновлении таблицы SPJ, так и при обновлении таблицы Quota. Для того чтобы обеспечить его проверку при любой попытке обновления любой из этих таблиц, мы можем определить следующее утверждение:

CREATE ASSERTION Limit

CHECK (

(Quota.Snum = SPJ.Snum)

AND (Quota.Pnum = SPJ.Pnum)

AND (Quota.Lim >= SUM(SPJ.Qt))

) ;

Это ограничение будет проверяться исполнительной системой автоматически при любой попытке обновления хотя бы одной из упомянутых таблиц.

6.3.10 Оператор определения схемы

Оператор создаёт поименованную группу связанных объектов – доменов, таблиц, представленй, утверждений и т.п. Схема создаётся от имени определённого ID и её имя связывается с ID в системном каталоге. Создатель схемы является её владельцем, обладает всеми привилегиями на все объекты и имеет право передачи привилегий другим пользователям. Он может также изменять схему, добавляя/удаляя/изменяя определения объектов. Используется следующий синтаксис:

CREATE SCHEMA имя_схемы

[ оператор_определения_объекта | оператор GRANT ]…;

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

Оператор_определения_объекта – это любой оператор CREATE, а определение оператора GRANT приведено в п. 6.5.2

Рассмотрим в качестве примера определение схемы нашей учебной БД.

CREATE SCHEMA SUPPLY

CREATE DOMAIN City AS CHAR(15)

CREATE DOMAIN Weight REAL

CHECK (VALUE BETWEEN 1 AND 2000)

CREATE DOMAIN Snum CHAR(4)

CHECK (VALUE LIKE ‘S___’)

CREATE DOMAIN Pnum CHAR(4)

CHECK (VALUE LIKE ‘P___’)

CREATE DOMAIN Jnum CHAR(4)

CHECK (VALUE LIKE ‘J___’)

CREATE TABLE S

( Snum Snum PRIMARY KEY,

Snam CHAR(15) NOT NULL,

St NUMERIC NOT NULL

DEFAULT 10 CHECK (St BETWEEN 10 AND 100),

Ci City )

CREATE TABLE P

( Pnum Pnum PRIMARY KEY,

Pnam CHAR(15) NOT NULL,

We Weight,

Co CHAR(10),

Ci City )

CREATE TABLE J

( Jnum Jnum PRIMARY KEY,

Jnam CHAR(15) NOT NULL,

Ci City )

CREATE TABLE SPJ

( Snum Snum NOT NULL

REFERENCES S

ON UPDATE CASCADE,

Pnum Pnum NOT NULL

REFERENCES P

ON UPDATE CASCADE,

Jnum Jnum NOT NULL

REFERENCES J

ON UPDATE CASCADE,

Qt NUMERIC CHECK (Qt BETWEEN 1000 AND 10000),

PRIMARY KEY (Snum, Pnum, Jnum) )

;

Обратите внимание на то, что символ ‘;’ в теле оператора CREATE SCHEMA не встречается. Он является признаком окончания оператора в целом, а не отдельного определения объекта.

После обработки этого оператора определения объектов появятся в системном каталоге. Они будут зарегистрированы как объекты схемы SUPPLY, и автор определения получит все привилегии на работу с ними. В дальнейшем он может добавить в схему новые объекты, например, так:

CREATE VIEW SUPPLY.Parts

(Number, Name, Weight, Color, City, Quantity)

SELECT P.*, SUMQ.SQT

FROM P JOIN (

SELECT Pnum, SUM(Qt) AS SQT

FROM SPJ

GROUP BY Pnum

) AS SUMQ;

CREATE GLOBAL TEMPORARY TABLE SUPPLY.TQt

( Pnum Pnum PRIMARY KEY REFERENCES P,

Sumqt NUMERIC);

GRANT SELECT, INSERT, DELETE

ON SUPPLY.TQt

TO Коля, Маша;

Первый оператор добавит в существующую схему SUPPLY новое представление, второй – глобальную временную таблицу, а третий предоставит ID КоляиМаша права просмотра этой новой таблицы, а также вставки и удаления строк (см. п. 6.5.2).

Работа с представлениями





Последнее изменение этой страницы: 2016-04-07; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.239.242.55 (0.042 с.)