Ограничения для доменов полей

Каждый столбец имеет собственный домен - некоторый набор до­пустимых значений.

Стандарт SQL предусматривает два различных меха­низма определения доменов.

Первый состоит в использовании предло­жения CHECK, позволяющего задать требуемые ограничения для столбца или таблицы в целом, а второй предполагает применение оператора CREATE DOMAIN.

Соблюдение бизнес-правил.Обновления данных в таблицах могут быть ограничены существую­щими в организации требованиями (бизнес-правилами). Стандарт SQL позволяет реализовать бизнес-правила предприятий с помощью предложения CHECK и ключевого слова UNIQUE

 

3.Фраза CONSTRAINTпозволяет задать имя ограничению, что позволит впоследствии отменить то или иное ограничение с помощью оператора ALTER TABLE.

4. Первичный ключ таблицы должен иметь уникальное непустое зна­чение в каждой строке. Стандарт SQL позволяет задавать подобные тре­бования поддержки целостности данных с помощью фразы PRIMARY KEY. В пределах таблицы она может указываться только один раз.

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

 

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

 

6. Ссылочная целостность.Внешние ключи представляют собой столбцы или наборы столбцов, предназначенные для связывания строк дочерней таблицы, со­держащей этот внешний ключ, со строкой родительской таблицы, содер­жащей соответствующее значение первичного или потенциального ключа.

 

Стандарт SQL предусматривает механизм определения внешних ключей с помощью предложения FOREIGN KEY а фраза REFERENCESопределяет имя роди­тельской таблицы.

 

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

 

Когда действия системы выполняются при поступлении операторов UPDATE и DELETE, содержащих попытку обновить или удалить значение потенциального ключа в родительской таблице, которому соответствует одна или более строк дочерней таблице, то эти действия зависят от правил поддержки ссылочной целостности, указанных во фразах on update и ON delete предложения FOREIGN key.

 

При определении таблицы предложение FOREIGN KEY может указы­ваться произвольное количество раз.

 

Определитель MATCHпозволяет уточнить способ обработки значе­ния null во внешнем ключе.

 

 

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

CASCADE -выполняется удаление строки из родительской шблицы, сопровождающееся стоматическим удалением всех ссылаюшихся на нее строк дочерней таблицы;

SET NULL -выполняется удаление строки из родительской таблицы. а во внешние ключи всех ссылающихся на нее строк дочерней таб­лицы записывается значение null;

SET DEFAULT -выполняется удаление строки из родительской таблицы, а во внешние ключи всех ссылающихся на нее строк дочерней таблицы заносится значение, принимаемое по умолчанию;

NO ACTION -операция удаления строки из родительской таблицы отменяется. Именно это значение используется по умолчанию в тех случаях, когда в описании и внешнего ключа фраза ON DELETE опущена. Те же самые правила применяются в языке SQL и тогда, когда значе­ние потенциального ключа родительской таблицы обновляется.

 

 

 

 


 

Самый элементарный синтаксис оператора создания таблицы может быть следующим:

 

<определение_таблицы> ;:=

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

(имя_столбца тип_данных [NULL | NОТ NULL ] [,..n]);

 

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

 

Напомним: значение NULLотличается от пробела или нуля: к нему прибегают, когда необходимо указать, что дан­ные недоступны, опущены или недопустимы. Если указан параметр NULL, помещение значений NULL в столбец разрешено. Если указано ключевое слово NOT NULL, то будут отклонены любые попытки поместить значение NULL в данный столбец.

 

По умолчанию стандарт SQL предполагает наличие ключевого словаNULL.

 

Выше приведен упрощенный вариант оператора CREATE TABLE стандарта SQL. Его полная версия приводится при обсуждении вопросов ограничения целостности данных.

Пример 2. Создаем таблицу Товарыв соответствии со структурой, определенной на практических занятиях. В эту таблицу добавим новое вычисляемое поле Цена_ед_ товара.

CREATE TABLEТовары

(

ID_товара INT IDENTITY Not Null, /*нумерация начнется с 1*/

Название_товара VARCHAR(50) Not Null,

Категория VARCHAR(50) Not Null,

Ед_измерения VARCHAR(10) Not Null,

Цена_ед_товара AS Поставки.Цена_ед_товара*1.2 /*вычисляемый столбец*/

)

 

Теперь рассмотрим более развернутый вариант синтаксиса команды create table.

Пример 3. Синтаксис команды create table

CREATE TABLE [имя БД . [вдаделец] . ] имя таблицы

(<Столбец> <тип данных>

 

[ [ DEFAULT <выражение для вычисления константы>]

| [IDENTITY [(нач.значение, приращение) [NOT FOR REPLICATION] ]]]

 

[ROWGUIDCOL]

 

[COLLATE <collation name>]

 

[NULL | NOT NULL] [<column constraints>]

| [column_name AS computed_column_expression]

| [<table_constraint>]

 

[ON {<filegroup> | DEFAULT}]

[TEXTIMAGE _ON { <filegroup> | DEFAULT} ]