Оформить и купить диплом на бланке ГОЗНАК без предоплаты

SQL ограничения

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

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

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

Ниже показан синтаксис для команды CREATE TABLE, расширенной для включения в нее ограничения:

CREATE TABLE <таблица>

( <столбец> <тип данных>[(<размер>)] < ограничение столбца >,

<столбец> <тип данных>[(<размер>)] < ограничение столбца >...

< ограничение таблицы >(<столбец>,<столбец>... ) );

 

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

Если СУБД поддерживает использование ALTER TABLE, то ограничение NOT NULL для нового столбца применимо только тогда, когда текущая таблица  пуста.

Ограничение столбца UNIQUE помещается в поле при создании таблицы для того, чтобы СУБД отклонила любую попытку ввода в это поле значения, которое уже представлено в другой строке.

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

Теперь язык SQL поддерживает первичные ключи непосредственно ограничением PRIMARE KEY (Первичный Ключ), которое может ограничивать таблицы или их столбцы. Оно отличается от ограничения UNIQUE только тем, что только один первичный ключ может быть определен для данной таблицы.

Первичные ключи не могут использовать значений NULL. Поэтому поле, используемое в ограничении PRIMARY KEY, должно быть объявлено как NOT NULL.

Синтаксис определения первичного ключа  и ограничения UNIQUE демонстрирует следующий пример:

CREATE TABLE СТУДЕНТ(

ФИО                      char(60) NOT NULL PRIMARY KEY,

Зачет_книжка       integer NOT NULL UNIQUE,

Адрес                    char(40)     );

 

Если ограничение PRIMARY KEY применяется к нескольким полям, то используется следующая форма записи:

CREATE TABLE СТУДЕНТ (

Фамилия               char(20) NOT NULL,

Имя                       char(20) NOT NULL,

Отчество               char(20) NOT NULL,

PRIMARY KEY  (Фамилия,Имя,Отчество )  );

 

Ограничение CHECK позволяет установить условие, которому должно удовлетворять значение, вводимое в таблицу. Ограничение CHECK состоит из ключевого слова CHECK и предиката в скобках. Оно записывается после терма <тип данных>[(<размер>)]. Например:

CREATE TABLE СТУДЕНТ

( ФИО            char(60) NOT NULL PRIMARY KEY,

 Возраст         decimal CHECK (Возраст < 35));

 

Можно применять ограничение CHECK в качестве ограничения таблицы. В этом случае оно записывается после определений для столбцов.

Ограничение значения по умолчанию DEFAULT указывается в команде CREATE TABLE тем же способом, что и ограничение столбца.

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

CREATE TABLE СТУДЕНТ

( ФИО            char(60) NOT NULL PRIMARY KEY,

 Город             char(20) DEFAULT = 'Санкт-Петербург');

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

Язык SQL поддерживает ссылочную целостность базы данных посредством ограничений FOREIGN KEY и REFERENCES. Действие этих ограничений  –  это отбрасывание значений, которые еще не представлены в родительском ключе. Через эти ограничения можно также изменять или удалять значения родительского ключа. FOREIGN KEY является ограничением таблицы, а  REFERENCES – ограничением столбца.

Синтаксис ограничения таблицы FOREIGN KEY:

FOREIGN KEY (<перечень столбцов>) REFERENCES

<родитель_таблица> ( <перечень столбцов>)

 

Первый перечень столбцов – это список из одного или более столбцов таблицы, которые должны быть созданы или изменены этой командой. Терм <родитель_таблица> – это таблица, содержащая родительский ключ. Она может быть таблицей, которая создается или изменяется текущей командой. Второй перечень столбцов – это список столбцов, которые будут составлять родительский ключ.

Столбцы в обоих списках должны быть совместимы, т. е. иметь одинаковые типы данных и размеры.

Вариант ограничения столбца с помощью FOREIGN KEY называется ссылочным ограничением REFERENCES, так как в этом случае не используется слово FOREIGN KEY и синтаксическая конструкция содержит слово REFERENCES, подобно следующему:

CREATE TABLE РЕБЕНОК

( ФИО            char(60) NOT NULL PRIMARY KEY,

адрес             char(60),

отец               char(60) REFERENCES СТУДЕНТ (ФИО));

 

Здесь определяется „РЕБЕНОК.отец” как внешний ключ, у которого родительский ключ „СТУДЕНТ.ФИО”.

Для полей, определенных как внешние ключи, любые значения, вводимые командами INSERT или UPDATE, должны уже быть представлены в их родительских ключах. Однако можно помещать пустые (NULL) значения  в эти поля, несмотря на то, что значения NULL могут не допускаться в родительских ключах.

В случае одинаковых имен полей (атрибутов) их можно не указывать  после REFERENCES и имени таблицы.

По определению ANSI любое значение родительского ключа, на которое есть ссылка посредством значения внешнего ключа, не может быть удалено или изменено обычным, примитивным способом. Это означает, например, что нельзя просто удалить студента из таблицы СТУДЕНТ, пока он фигурирует как отец в таблице РЕБЕНОК , так как соответствующая строка в таблице РЕБЕНОК будет содержать неопределенное значение.

Для отражения тонких взаимодействий значений из разных таблиц в языке SQL служат ограничения CASCADES (каскадно), NULLS (пустой) и RESTRICTED (ограниченный). Они используются для управления изменением или удалением значения в родительском ключе. Поэтому в конструкции применяются также термы UPDATE OF и DELETE OF.

 

Ограничение CASCADES во внешнем ключе приводит к тому, что при изменении значения в родительском ключе такое же изменение автоматически выполняется во внешнем ключе.

Ограничение NULLS похоже по действию на ограничение CASCADES и отличается тем, что во внешнем ключе устанавливается значение NULL.

Ограничение RESTRICTED накладывается в случае, если изменения в родительском ключе допустимы только после изменения во внешнем ключе.

Пусть таблица РЕБЕНОК создается следующей командой:

CREATE TABLE РЕБЕНОК

( ФИО            char(40) NOT NULL PRIMARY KEY,

адрес             char(60),

мать               char(40),

отец               char(40) REFERENCES СТУДЕНТ(ФИО),

UPDATE OF СТУДЕНТ CASCADES,

DELETE OF СТУДЕНТ RESTRICTED);

 Если теперь потребуется удалить студента  из таблицы СТУДЕНТ, команда не будет выполнена до тех пор, пока не будут внесены соответствующие изменения в таблицу РЕБЕНОК.  А если будет исправлена ошибка в фамилии студента-отца в таблице СТУДЕНТ, то автоматически будет внесено такое же исправление в таблицу РЕБЕНОК.