Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создание триггера.  [new]
Ivan5252
Member

Откуда:
Сообщений: 25
Здравствуйте. Подскажите, как реализовать следующий триггер:

Триггер, который при заключении контрактов следит за тем, чтобы у каждого ответственного редактора было не более 5 книг, подготавливаемых к печати в данный момент. Если у ответственного редактора появляется 6-я книга, то ей нужно назначить другого ответственного редактора, редактирующего на данный момент < 5 книг. Если таких нет, контракт на книгу не заключается.

Создание таблиц:

Create table Сотрудники(
	[Табельный номер]int not null primary key,
 	ФИО varchar(30) not null,
	[Дата рождения] date not null,
  	Пол char(1), 
  	[Паспортные данные] varchar(30) not null unique,
  	ИНН varchar(15)  unique,
   	[Код должности] int foreign key references Должности,
   	Адрес varchar(50) not null ,
	Телефон varchar(10) not null
 )


Create table Книги(
	[№ контракта] int not null primary key, 
	[Дата подписи контракта] date not null,
	 Менеджер int foreign key references Сотрудники, 
 	Название varchar(50) not null ,
  	Цена money not null,
  	Затраты money not null,
 	[Авторский гонорар] money not null, 
 	[Дата выхода] date not null, 
	 Тираж int not null , 
 	[Ответственный редактор] int foreign key references Сотрудники, 
 	[Остаток тиража] int not null
)
24 апр 17, 11:11    [20428156]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера.  [new]
Ivan5252
Member

Откуда:
Сообщений: 25
Таблицу Сотрудники добавил ошибочно. Извините.
24 апр 17, 11:26    [20428220]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера.  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Интересно. Работник живёт себе спокойненько,
а какой-то триггер втихую назначает его ответственным редактором какой-то там книги...
Я-то по глупости думал, что задания сотрудникам раздаёт их непосредственный начачальник.
Или что-то такое подобное...
24 апр 17, 11:40    [20428272]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера.  [new]
Ivan5252
Member

Откуда:
Сообщений: 25
iap, по жизни - согласен. По заданию - вот такое необходимо :)
24 апр 17, 11:50    [20428329]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера.  [new]
Ivan5252
Member

Откуда:
Сообщений: 25
iap, вернее, с таблицей Сотрудники в данном задании работать не надо.
Просто смотреть в таблице Книги количество вхождений в поле Ответственный редактор.
24 апр 17, 11:51    [20428340]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Ivan5252, а если ответственный редактор на данный момент редактирует 0 книг - как это определять? В "Сотрудниках" же не только ответственные редакторы, и не только те ответственные редакторы, доступные в данный момент.

Кроме того, после окончания редактирования книга из таблицы удаляется? Если нет - как определять, что она редактируется?

И - главный вопрос - вы хотите, чтобы всю работу по написанию триггера за вас сделали другие люди, или все же попытаетесь написать его сами, и, в случае возникновения проблем, таки зададите конкретный вопрос на форуме?
24 апр 17, 11:57    [20428373]     Ответить | Цитировать Сообщить модератору
 Re: Создание триггера.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7651
Ivan5252,

такие триггеры не должны быть реализованы. Хотя бы потому, что триггер - это элемент проверки целостности, а не изменения данных. Если триггер будет выбрасывать ошибку при количестве книг более количества, заданного справочником ограничений - это верно, а если он самостоятельно начнет изменять данные - неверно. Для такое работы существуют процедуры хранимые на сервере или на клиенте.
Для серверных процедур необходимо предоставить данные в виде таблиц, в том числе и справочник ограничений.
К примеру, должна существовать таблица редакторов и у каждого должен быть список или количество редактируемых книг.
Выборка должна выбирать первого по списку, у которого книг меньше количества, заданного справочником ограничений.
24 апр 17, 13:07    [20428784]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить