Индексирование ограничений FOREIGN KEY

Урок 1: Ограничения целостности данных

В рамках этого урока подвергнутся рассмотрению последующие вопросы

} Зачем употребляются ограничения целостности данных?

} Какие механизмы помогают поддерживать целостность данных?

} Какие типы ограничений целостности данных есть в Microsoft SQL Server?

Предназначение

Ограничения позволяют задать способ, при помощи которого компонент Database Engine автоматом обеспечивает целостность базы данных. Microsoft SQL Server предоставляет два механизма Индексирование ограничений FOREIGN KEY для реализации бизнес-правил и обеспечения целостности данных: ограничения и триггеры.

Типы ограничений целостности данных

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

· Определения DEFAULT Индексирование ограничений FOREIGN KEY значений

· Разрешение значений NULL

· Ограничения PRIMARY KEY

· Ограничения FOREIGN KEY

· Ограничения UNIQUE

· Ограничения CHECK

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

Определение DEFAULT значений

Задает значение по дефлоту, которым Database Engine будет заполнять столбец, если при Индексирование ограничений FOREIGN KEY вставке строчки для этого столбца значение не обозначено. Значение по дефлоту могут быть хоть каким выражением, итог которого является константой, к примеру фактически константой соответственного типа либо интегрированной функцией.

Значения по дефлоту создаются при помощи ключевика DEFAULT аннотации CREATE TABLE. При всем этом постоянное выражение будет присвоено столбцу как Индексирование ограничений FOREIGN KEY значение по дефлоту.

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

CREATE TABLE test_defaults

(date_ins datetime DEFAULT getdate(), --Preferred default definition

mathcol smallint DEFAULT 10 * 2, --Preferred default definition

char2 char(3) DEFAULT 'xyz') --Preferred default definition;

Ограничение NOT NULL

Показывает, что в столбце недопустимы значения NULL.

Допустимость значения NULL в столбце определяет, могут ли строчки таблицы Индексирование ограничений FOREIGN KEY содержать значения NULL для этого столбца. Значение NULL отличается от нуля (0), пробела либо символьной строчки нулевой длины, к примеру "". Значение NULL обозначает, что поле не было заполнено. Присутствие NULL, обычно, предполагает, что значение непонятно либо неопределенно.

Когда в таблицу вставляется строчка без указания значения для столбца, допускающего значения NULL, компонент Database Индексирование ограничений FOREIGN KEY Engine присваивает ему значение NULL, если отсутствует определение DEFAULT либо объект по дефлоту. Столбец, определенный при помощи ключевика NULL, также поддерживает очевидно данное юзером значение NULL, независимо от типа данных и наличия соответственного значения по дефлоту. Значение NULL не следует заключать в кавычки, потому что в данном случае Индексирование ограничений FOREIGN KEY оно будет рассматриваться как символьная строчка "NULL".

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

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

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

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

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

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

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 не допускает Индексирование ограничений FOREIGN KEY использования 1-го и такого же значения в 2-ух строчках столбца. Допускается внедрение значения NULL в качестве 1-го из уникальных значений (как и всякое другое значение столбца с ограничением UNIQUE, NULL может встречаться только один раз).

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

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

Ограничения PRIMARY KEY

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

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

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

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

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

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


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

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

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

Хотя уникальность значений ограничения UNIQUE и PRIMARY KEY гарантируют в одинаковой мере, в случае, когда нужно обеспечить уникальность в столбце либо композиции столбцов, которые не являются Индексирование ограничений FOREIGN 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) );

Ограничения FOREIGN KEY

Задают и обеспечивают Индексирование ограничений FOREIGN KEY связи меж таблицами. Если один либо несколько столбцов, в каких находится первичный ключ для одной таблицы, упоминается в одном либо нескольких столбцах другой таблицы, то в ссылке наружного ключа создается связь меж 2-мя таблицами. Этот столбец становится наружным ключом во 2-ой таблице.

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

Ограничение FOREIGN KEY может ссылаться на столбцы в таблицах этой же базы данных либо столбцы этой же самой таблицы.

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

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

Ссылочная целостность

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

Ограничение обеспечивает целостность ссылок последующим Индексирование ограничений FOREIGN KEY образом: оно воспрещает изменение данных в таблице первичного ключа, если такие конфигурации сделают недопустимой ссылку в таблице наружного ключа. Если при попытке удалить строчку в таблице первичного ключа либо поменять значение этого ключа окажется, что удаленному либо модифицированному значению первичного ключа соответствует значение в ограничении FOREIGN KEY Индексирование ограничений FOREIGN KEY в другой таблице, то действие выполнено не будет. Для удачного конфигурации либо удаления строчки с ограничением FOREIGN KEY нужно поначалу удалить данные наружного ключа в соответственной таблице или поменять данные в таблице наружного ключа, которые связывают наружный ключ с данными другого первичного ключа. Microsoft SQL Server позволяет заавтоматизировать эти деяния, методом Индексирование ограничений FOREIGN KEY указания 2-ух дополнительных предложений ON DELETE и ON UPDATE.

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

· NO ACTION: удаления не произойдет и будет выведено сообщение об ошибке.

· CASCADE: все строчки с наружными ключами, указывающими на удаленную строчку, также будут Индексирование ограничений FOREIGN KEY удалены.

· SET NULL: всем строчкам с наружными ключами, указывающими на удаленную строчку, присваивается значение NULL.

· SET DEFAULT: всем строчкам с наружными ключами, указывающим на удаленную строчку, присваивается установленное для их значение по дефлоту.

Предложение ON UPDATE определяет деяния, предпринимаемые при попытке обновления значения потенциального ключа, на которое показывает имеющийся наружный ключ Индексирование ограничений FOREIGN KEY. Это предложение также поддерживает характеристики NO ACTION, CASCADE, SET NULL и SET DEFAULT.

Индексирование ограничений FOREIGN KEY

Необходимость сделать индекс наружных ключей нередко появляется по последующим причинам:

При помощи ограничений FOREIGN KEY в связанных таблицах проверяются конфигурации ограничений PRIMARY KEY.

Столбцы наружных ключей нередко употребляются для объединения критериев при соединении данных из связанных таблиц Индексирование ограничений FOREIGN KEY в запросах. Это делается методом сравнения столбца либо столбцов в ограничении FOREIGN KEY в одной таблице с одним либо несколькими столбцами первичного либо уникального ключей в другой таблице. Индекс позволяет компоненту Database Engine стремительно отыскивать связанные данные в таблице наружных ключей. Вобщем, создание индекса не является неотклонимым. Данные из 2-ух Индексирование ограничений FOREIGN KEY связанных таблиц можно соединять воединыжды, даже если в таблицах нет соответственных ограничений PRIMARY KEY либо FOREIGN KEY, но связь наружных ключей меж 2-мя таблицами значит, что эти две таблицы оптимизированы для соединения в запросе, где ключи употребляются в качестве критериев.


indeksi-obshestvennoj-tolerantnosti-v-rossii.html
indeksi-potrebitelskih-cen-po-chelyabinskoj-oblasti-federalnoj-sluzhbi-gosudarstvennoj-statistiki-po-chelyabinskoj-oblasti.html
indeksi-promishlennogo-proizvodstva-organizacij-v-m-yarlov-predsedatel-redakcionnoj-kollegii.html