Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по курсу ИСиТ.docx
Скачиваний:
6
Добавлен:
07.02.2024
Размер:
1.07 Mб
Скачать

Ограничения check

Обеспечивают целостность домена путем ограничения значений, которые могут быть помещены в столбец. Ограничение CHECK задает логическое условие (принимающие значение TRUE, FALSE или unknown), которое применяется ко всем значениям, вставляемым в столбец. Все значения, для которых получается значение FALSE, отбрасываются. Для каждого столбца можно указать несколько ограничений CHECK. Кроме того, можно применять одно проверочное ограничение к нескольким столбцам. Для этого ограничение нужно создать на уровне таблицы.

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

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

CREATE TABLE cust_sample

(

cust_id int PRIMARY KEY,

cust_name char(50),

cust_address char(50),

cust_credit_limit money,

CONSTRAINT chk_id CHECK (cust_id BETWEEN 0 and 10000 )

)

Ограничения unique

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

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

Для таблицы можно задать несколько ограничений UNIQUE.

Ограничения primary key

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

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

В таблице может быть только одно ограничение PRIMARY KEY, и столбец с данным ограничением не может содержать значения NULL. Из-за того, что ограничения PRIMARY KEY гарантируют уникальность данных, они часто определяются в столбце идентификаторов.

При задании для таблицы ограничения PRIMARY KEY компонент Database Engine гарантирует уникальность данных созданием уникального индекса для столбцов первичных ключей. Этот индекс также обеспечивает быстрый доступ к данным при использовании первичного ключа в запросах. Таким образом, выбранные первичные ключи должны соответствовать правилам создания уникальных индексов.

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

Как показано на следующем рисунке, столбцы vendorID и vendorPartID таблицы complexPartTable формируют составное ограничение PRIMARY KEY для данной таблицы. Это гарантирует уникальность комбинации значений столбцов vendorID и vendorPartID.

В столбце первичного ключа значения NULL не допускаются.

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

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

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

В следующем примере создается таблица partTable с указанием поля partId в качестве первичного ключа. Индекс, создаваемый по столбцу partId первичного ключа, будет некластеризованным.

CREATE TABLE partTable

(partId int PRIMARY KEY NONCLUSTERED,

name char(30),

weight decimal(6,2),

color char(15) );

Соседние файлы в предмете Информатика