KNOW INTUIT, Лекция, Създаване и използване на настройки по подразбиране, ограничения и правила

Ограничения

Ограниченията автоматично налагат целостта на данните. Ограниченията дефинират правила, които определят стойностите на данните, разрешени за определена колона. Те ви позволяват да ограничите стойностите на данните, които се въвеждат в колона, така че колоната да не съдържа невалидни стойности. Например, като използвате ограничение, можете да ограничите стойностите на колона от тип цяло число до диапазон от 1 до 100. В резултат на това стойности извън този диапазон не могат да бъдат въведени в тази колона. (Можете да използвате ограничение CHECK, за да създадете този диапазон, както ще бъде показано по-долу.) Ограничение за една колона се наричаограничение за колона; ограничава стойностите само на тази колона. Ограничение, което засяга множество колони, се наричаограничение на таблица,илиограничение на таблица;в този случай комбинацията от стойности за колоните, посочени в ограничението, трябва да отговаря на изискванията на ограничението. Има пет типа ограничения: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY и CHECK.

Създаване и модифициране на ограничения с T-SQL

В този раздел ще научите за използването на всеки тип ограничение и как да приложите ограничения с помощта на T-SQL. В следващия раздел ще научите как да прилагате ограничения с помощта на Enterprise Manager.

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

Ограничението NOT NULL е доста просто и вече видяхме как се използва в примерите в тази глава и предишните глави. Ограничение NOT NULL е посочено в описание на колона, за да се предотврати вмъкването на нулеви стойности в тази колона (за разлика от ограничението NULL, което позволява присвояването на нулеви стойности). Когато използвате T-SQL можетепосочете NOT NULL, когато създавате таблицата или по-късно, когато модифицирате която и да е колона. (Вижте „Създаване на таблици на база данни“ за повече информация относно модифицирането на таблици на база данни.) Трябва да използвате NOT NULL вместо NULL, където е възможно, тъй като нулевите операции, като сравнения, имат повече обработка. Както беше обсъдено по-рано в тази глава, по-добре е да използвате стойността по подразбиране, когато е възможно, отколкото да позволите вмъкване на нулеви стойности.

УНИКАЛНО ограничение

Ограничението UNIQUE гарантира, че не се допускат дублиращи се стойности в колона или набор от колони; с други думи, уникалността на стойностите в тази колона или набор от колони е осигурена. За да поддържа тази уникалност, SQL Server създава по подразбиране уникален неклъстерен индекс на колоната или колоните, посочени в ограничението UNIQUE. Можете обаче да посочите дали този индекс трябва да бъде групиран или не. Спомнете си, че една таблица може да има само един клъстерен индекс.

Ограничение UNIQUE може да се използва за всяка колона, която не е част от ограничение PRIMARY KEY (описано в следващия раздел), което също налага уникални стойности. Ограничение UNIQUE може да се използва за колони, които позволяват нулеви стойности, докато ограниченията PRIMARY KEY не могат да се използват за такива колони. Нулевите стойности не се влияят от UNIQUE ограничения. Колона с ограничение UNIQUE може да бъде указана от ограничение FOREIGN KEY (вижте раздела за ограничение FOREIGN KEY по-долу). Множество UNIQUE ограничения могат да бъдат зададени на една и съща таблица, стига общият брой на индексите за тази таблица да не надвишава 249 неклъстерирани и един клъстерен индекс.

За да създадете УНИКАЛНО ограничение на таблица с помощта на T-SQL, използвайте командата CREATE TABLE или ALTER TABLE. Например, следният оператор създава клиентска таблица с УНИКАЛНО ограничение на SSN колоната като клъстерен индекс:

Този оператор CREATE използва ограничение на колона. Следващият пример създава отново таблица, но този път с добавяне на УНИКАЛНО ограничение на таблица, наречено UQ_full_name в колоните first_name, mid_init и last_name:

УНИКАЛНО ограничение на таблица (ограничение за повече от една колона) налага уникалността на комбинациите от стойности в съответните колони. В този случай не можете да въведете два клиента в базата данни, които имат една и съща комбинация от first_name, last_name и средна инициала (m > UNIQUE е негрупиран индекс, защото вече имаме уникален групиран индекс в колоната SSN.

За да добавите ограничение UNIQUE към съществуваща таблица, използвайте оператора ALTER TABLE. Ако се опитвате да модифицирате съществуваща колона или колони чрез добавяне на ограничение UNIQUE, всички съществуващи редове в тази таблица трябва да съдържат уникални стойности или нулеви стойности в тази колона или колони, в противен случай ще получите грешка и ограничението UNIQUE няма да бъде добавено. Да приемем, че сме създали таблицата с клиенти без никакви ограничения. Следват два оператора за добавяне на ограничения върху колона и таблица:

Отново можете да добавите ограничения към таблица само ако съществуващите данни вече отговарят на изискванията за ограничения.

За да промените съществуващо ограничение UNIQUE на която и да е колона или таблица с помощта на T-SQL, първо трябва да премахнете съответното ограничениеи след това го създайте отново. Както при настройките по подразбиране, трябва да използвате описателни имена за вашите ограничения, така че да можете лесно да ги намерите и премахнете, без да се налага да измисляте имената, присвоени им от SQL Server. Когато промените ограничение с помощта на Enterprise Manager, SQL Server автоматично изтрива старото ограничение и го създава отново, когато запишете вашите промени (вижте „Създаване и модифициране на ограничения с помощта на Enterprise Manager“ по-долу).

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

Ограничението PRIMARY KEY се използва за дефиниране на първичен ключ на таблица, който е колона или набор от колони, които уникално идентифицират ред на таблица. Тъй като първичният ключ идентифицира ред, съответната колона никога няма да съдържа NULL стойност. Това е разликата между ограничение PRIMARY KEY и ограничение UNIQUE, което позволява нулеви стойности. Ако дефинирате ограничение PRIMARY KEY за набор от колони, това ограничение указва, че комбинацията от стойностите на тези колони трябва да бъде уникална за всеки ред, което е същото като ограничение UNIQUE за набора от колони. И подобно на ограничението UNIQUE, ограничението PRIMARY KEY не позволява дублиращи се стойности. Ако ограничение PRIMARY KEY е присвоено на колона или набор от колони, тогава автоматично се създава уникален индекс на тази колона или колони с първичен ключ. Можете също така да зададете първичния ключ на клъстерен или неклъстерен индекс; ако нищо не е посочено, клъстерен индекс се създава по подразбиране, ако таблицата все още няма клъстерен индекс.

Една таблица може да има само едно ограничение PRIMARY KEY. Колона с атрибут IDENTITY е подходяща за първичен ключ, точно както всяка друга колона или набор от колони,които са уникални за всеки ред. Например в нашия пример с клиентска таблица бихме могли да създадем SSN колоната като първичен ключ, вместо да създаваме УНИКАЛНО ограничение върху нея. Ограничението PRIMARY KEY няма да позволи нулеви стойности и ще гарантира, че стойностите в колоната SSN са уникални и клъстерен индекс ще бъде автоматично създаден в тази колона с първичен ключ. Следният T-SQL израз е един от начините за указване на SSN колоната като първичен ключ, когато дефинирате таблица. Този метод назовава ограничението PRIMARY KEY от SQL Server, така че не е предпочитаният метод, тъй като по-късно може да се наложи да изтриете ключа по име.

Използвайки алтернативен метод, можете да наименувате това ограничение, като добавите ключовата дума CONSTRAINT. За да присвоите името PK_SSN на вашето ограничение PRIMARY KEY, използвайте следния оператор:

Можете също така да посочите ограничение PRIMARY KEY, след като всички колони в таблицата са дефинирани. Когато използвате този синтаксис, името на колоната трябва да бъде оградено в скоби и посочено след клаузата CONSTRAINT, както е показано в следния израз:

За да добавите ограничение PRIMARY KEY към таблица, която няма ограничение PRIMARY KEY, използвайте оператора ALTER TABLE. Следният оператор добавя ограничение PRIMARY KEY към таблицата на клиента:

Тук сме включили незадължителната ключова дума CLUSTERED, само за да стане ясно, че ще бъде създаден клъстериран индекс в колоната с първичен ключ, въпреки че това е по подразбиране.

За да премахнете ограничение PRIMARY KEY, използвайте оператора ALTER TABLE с клаузата DROP CONSTRAINT. По-долу премахваме ограничението за колоната SSN:

Обърнете внимание, че за клаузата DROP CONSTRAINTизисква се само името на ограничението. За да модифицирате съществуващо ограничение PRIMARY KEY на таблица с помощта на T-SQL изрази, първо трябва да премахнете съществуващото ограничение и след това да промените таблицата, като добавите новото ограничение. Това се прави с помощта на изрази ALTER TABLE. DROP CONSTRAINT и ALTER TABLE. ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ.