Смекни!
smekni.com

Общие элементы SQL (стр. 8 из 9)

6.5 <Определение ограничения на таблицу> (<table constraint definition>)

Функция

Специфицирует ограничение целостности.

Формат

<table constraint definition> ::=

<unique constraint definition>

| <referential constraint definition>

| <check constraint definition>

Синтаксические правила

Нет.

Общие правила

  1. <Определение ограничения на таблицу> (<table constraint definition>) фактически проверяется после выполнения каждого <оператора SQL> (<SQL statement>).

6.6 <Определение ограничения уникальности> (<unique constraint definition>)

Функция

Специфицирует ограничение уникальности для таблицы.

Формат

<unique constraint definition> ::=

<unique specification> (<unique column list>)

<unique specification> ::=

UNIQUE | PRIMARY KEY

<unique column list> ::=

<column name> [{,<column name>}...]

Синтаксические правила

  1. Пусть T обозначает таблицу, для которой определяется ограничение.
  2. Каждое <имя столбца> (<column name>) в <списке столбцов уникальности> (<unique column list>) должно идентифицировать столбец T, и один столбец не должен указываться более одного раза.
  3. В <определении столбца> (<column definition>) для каждого <имени столбца> (<column name>) в <списке столбцов уникальности> (<unique column list>) должно быть указано NO NULL.
  4. В <определении таблицы> (<table definition>) должно содержаться не более одного явного или неявного <определения ограничения уникальности> (<unique constraint definition>), специфицирующего PRIMARY KEY.

Общие правила

  1. Пусть термин "назначенные столбцы" обозначает столбцы, идентифицируемые <именами столбцов> (<column name>) в <списке столбцов уникальности> (<unique column list>).
  2. Ограничение уникальности обязывает T не содержать строк, назначенные столбцы которых образуют дубликаты. Две строки являются дубликатами, если значение каждого назначенного столбца в первой строке равно значению соответствующего столбца во второй строке. Ограничение фактически проверяется после выполнения каждого <оператора SQL> (<SQL statement>).

6.7 <Определение ограничения на ссылки> (<referential constraint definition>)

Функция

Специфицирует ограничение на ссылки.

Формат

<referential constraint definition> ::=

FOREIGN KEY (<referencing columns>)

<references specification>

<references specification> ::=

REFERENCES <referenced table and columns>

<referencing columns> ::=

<reference column list>

<referenced table and columns> ::=

<table name> [(<reference column list>)]

<reference column list> ::=

<column name> [{,<column name>}...]

Синтаксические правила

  1. Пусть термин "ссылающаяся таблица" обозначает таблицу, для которой определяется ограничение. Пусть термин "ссылаемая таблица" обозначает таблицу, идентифицируемую <именем таблицы> (<table name>) в <ссылаемых таблице и столбцах> (<referenced table and columns>). Пусть термин "ссылающиеся столбцы" обозначает столбцы, идентифицируемые <списком столбцов ссылки> (<reference column list>) в <ссылающихся столбцах> (<referencing columns>).

  2. a) Если в <ссылаемых таблице и столбцах> (<referenced table and columns>) указывается <имя столбца> (<column name>) или <список столбцов ссылки> (<reference column list>), то эти <имя столбца> (<column name>) или <список столбцов ссылки> (<reference column list>) должны быть идентичны <списку столбцов уникальности> (<unique column list>) в <определении ограничения уникальности> (<unique constraint definition>) ссылочной таблицы. Пусть термин "ссылаемые столбцы" обозначает столбцы, идентифицируемые этими <именем столбца> (<column name>) или <списком столбцов ссылки> (<reference column list>).
    b) Если в <ссылаемых таблице и столбцах> (<referenced table and columns>) не указывается <имя столбца> (<column name>) или <список столбцов ссылки> (<reference column list>), то <определение таблицы> (<table definition>) для ссылаемой таблицы должно содержать <определение ограничения уникальности> (<unique constraint definition>), специфицирующее PRIMARY KEY. Пусть термин "ссылаемые столбцы" обозначает столбцы, идентифицируемые <списком столбцов уникальности> (<unique column list>) в этом <определении ограничения уникальности> (<unique constraint definition>).
  3. Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) должны включать REFERENCES для каждого ссылаемого столбца.
    Замечание: "Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<privileges definition>)".
  4. Ссылаемая таблица должна являться базовой таблицей.
  5. Каждый ссылающийся столбец должен идентифицировать столбец ссылающейся таблицы, и одно и то же имя столбца не должно указываться более одного раза. Каждый ссылаемый столбец должен идентифицировать столбец ссылаемой таблицы, и одно и то же имя столбца не должно указываться более одного раза.
  6. <Ссылающиеся столбцы> должны содержать то же число имен столбцов, что и <ссылаемые таблица и столбцы> (<referenced table and columns>). I-ый столбец, идентифицируемый в <ссылающихся столбцах> (<referencing columns>), соответствует i-ому столбцу, идентифицируемому в <ссылаемых таблице и столбцах> (<referenced table and columns>). Тип данных каждого ссылающегося столбца должен быть таким же, как и тип данных соответствующего ссылаемого столбца.

Общие правила

  1. Ссылающаяся таблица и ссылаемая таблица удовлетворяют <определению ограничения на ссылки> (<referential constraint definition>) в том и только в том случае, когда для каждой строки ссылающейся таблицы либо:
    a) Все ссылающиеся столбцы в строке содержат не неопределенные значения и существует строка в ссылаемой таблице такая, что для каждого ссылающегося столбца значение ссылающегося столбца равно значению соответствующего ссылаемого столбца, либо
    b) Какой-либо ссылающийся столбец в строке содержит неопределенное значение.

6.8 <Определение проверочного ограничения> (<check constraint definition>)

Функция

Специфицирует условие для таблицы.

Формат

<check constraint definition> ::=

CHECK (<search condition>)

Синтаксические правила

  1. <Условие поиска> (<search condition>) не должно содержать <подзапроса> (<subquery>), <спецификации функции над множеством> (<set function specification>) или <спецификации цели> (<target specification>).
  2. Каждая <спецификация столбца> (<column specification>) в <условии поиска> (<search condition>) должна ссылаться на столбец, определенный в содержащем <определении таблицы> (<table definition>).

Общие правила

  1. База данных не удовлетворяет <определению проверочного ограничения> (<check constraint definition>) в том и только в том случае, когда таблица, определенная через содержащее <определение таблицы> (<table definition>), содержит строку, для которой <условие поиска> (<search condition>) есть false.

6.9 <Определение представления> (<view definition>)

Функция

Определяет представляемую таблицу.

Формат

<view definition> ::=

CREATE VIEW <table name> [(<view column list>)]

AS <query specification>

[WITH CHECK OPTION]

<view column list> ::=

<column name> [{,<column name>}...]

Синтаксические правила

  1. Если <имя таблицы> (<table name>) содержит <идентификатор полномочий> (<authorization identifier>), то этот <идентификатор полномочий> (<authorization identifier>) должен быть таким же, как и <идентификатор полномочий схемы> (<schema authorization identifier>) содержащей <схемы> (<schema>).
  2. <Имя таблицы> (<table name>) должно быть отличным от <имени таблицы> (<table name>) любого другого <определения представления> (<view definition>) или <определения таблицы> (<table definition>) в содержащей <схеме> (<schema>).
  3. Если <спецификация запроса> (<query specification>) является изменяемой (updatable), то представляемая таблица является изменяемой таблицей. В противном случае это только читаемая таблица.
  4. Если какие-либо два столбца в таблице, определяемой <спецификацией запроса> (<query specification>), имеют одно и то же <имя столбца> (<column name>) или если какой-либо столбец этой таблицы является неименованным столбцом, то должен быть указан <список столбцов представления> (<view column list>).
  5. Одно <имя столбца> (<column name>) не должно указываться более одного раза в <списке столбцов представления> (<view column list>).
  6. Число <имен столбцов> (<column name>) в <списке столбцов представления> (<view column list>) должно быть таким же, что и степень таблицы, определяемой <спецификацией запроса> (<query specification>).
  7. Описание таблицы, определенной через <определение представления> (<view definition>), включает имя <имя таблицы> (<table name>) и описания столбцов таблицы, специфицированной через <спецификацию запроса> (<query specification>). Если указывается <список столбцов представления> (<view column list>), то имя i-ого столбца есть i-ое <имя столбца> (<column name>) в этом <списке столбцов представления> (<view column list>).
  8. Если <спецификация запроса> (<query specification>) содержит <раздел group by> (<group by clause>) или <раздел having> (<having clause>), не содержащиеся в <подзапросе> (<subquery>), то представляемая таблица, определенная через данное <определение представления> (<view definition>), является сгруппированной таблицей.
  9. Если указано WITH CHECK OPTION, то представляемая таблица должна быть изменяемой (updatable).

Общие правила