<< На Главную     <В меню Советы по MSSQL

Что такое ограничения и как их создать в MS SQL Server

Цель любой информационной системы - ввести, сохранить и обработать информацию в максимально достоверном и непротиворечивом виде.  Абсурдные по значению или двоящиеся записи в базе данных - вещь, по большому счету, совершенно недопустимая (немного о том, как бороться с дубликатами строк можно посмотреть здесь). Понятное дело, разработчики СУБД должны предложить пользователям какие-то инструменты для поддержания адекватности ваших данных , выражаясь несколько пафосно, реалиям этого мира - возраст сотрудников ну никак не может быть больше скажем, 99 лет или зарплата в организации строго ограничена какими-то пределами (бонусы  топ-менеджеров некоторых российских сырьевых компаний не в счет, там никакое ограничение не сработает :-).

 

 

Классическим инструментом контроля достоверности и целостности данных во многих СУБД является механизм так называемых Ограничений (англ. Constraint). Сейчас аккурат и поговори немного о том, как в первом приближении можно создать ограничения в MS SQL Server.

Для контекста ситуации предположим, что в базе данных MyBase есть некая табличка Sotrudniki, которая содержит информацию о кадровом составе фирмы - что-то вроде этого:

 

Выбрать записи из таблицы MS SQL

 

Предположим, далее, что разработчики информационной подсистемы 'Кадры' хотят гарантировать, чтобы значение возраста сотрудников  было  ограничено интервалом ну скажем от 18 до 77 лет. Конечно, строго говоря, такую валидацию данных можно переложить на прикладное программное обеспечение. Но гораздо более надежным вариантом будет создание Ограничения.

Поступаем сл. образом - создаем запрос приблизительно такого содержания для случая нашего примера с использование конструкции ALTER TABLE:

 

use MyBase

Alter table Sotrudniki

Add CONSTRAINT CC1

CHECK (vozrast >= 18 AND vozrast < 77);

 

Создать ограничение скриптом Alter

 

Запускаем данный запрос на выполнение и обращаем внимание на то, что в  Ограничениях появился новый пункт - СС1:

 

Создать ограничение MS SQL Server

 

Так, теперь протестируем - сработает ли наше ограничение, если попытаться предложением INSERT добавить нового сотрудника преклонного возраста, что-то вроде такого :

 

Сообщение об ошибке при вставке записи в таблицу

 

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

 

Предложение Insert для добавления новой записи

 

Если необходимо гарантировать уникальное значение в одном из полей (или их комбинации), то при создании ограничения нужно воспользоваться предложением UNIQUE, приблизительно так :

 

use MyBase

Alter table Sotrudniki

Add CONSTRAINT CC2

UNIQUE(id);

 

Предложение Unique для создания уникального ключа

 

Тогда попытка добавить в нашу учебную табличку сотрудника с уже существующим значением поля id приведет к неудаче :

 

Сообщение об ошибке MS SQL при добавлении неуникального ключа

 

 

Уникальный ключ может быть составным, т.е. содержать значения нескольких полей.  Для случая нашего примера, предположим, что отдел кадров составляет график отпусков, и хочет контролировать, чтобы два сотрудника в одном году и в одном месяце не находились в отпуске одновременно - 'отпуска не пересекались'. Тогда, при наличии в табличке полей  Otpusk_God и Otpusk_Mesyac можно создать такое ограничение :

 

use MyBase

alter table sotrudniki

add constraint cc3 unique(Otpusk_God, Otpusk_Mesyac)

 

Создание составного ключа из двух и более полей

 

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

 

В следующем совете будет изложен ещё один подход к созданию непротиворечивых структур данных с использование внешнего ключа.

 

Всем успехов в изучении MS SQL Server !

© Simashkov.2016

13.06.2016 г.

Назад