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

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

 

  

 

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

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

 

 

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

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

 

use MyBase

Alter table Sotrudniki

Add CONSTRAINT CC1

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

 

 

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

 

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

 

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

 

 

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

 

 

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

 

use MyBase

Alter table Sotrudniki

Add CONSTRAINT CC2

UNIQUE(id);

 

 

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

 

 

 

Уникальный ключ может быть составным, т.е. содержать значения нескольких полей.  Для случая нашего примера, предположим, что отдел кадров составляет график отпусков, и хочет контролировать, чтобы два сотрудника в одном году и в одном месяце не находились в отпуске одновременно - 'отпуска не пересекались'. Тогда, при наличии в табличке полей  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 г.

Назад