Я собираю таблицу, которая будет использоваться для отправки последующих сообщений на определенные запросы для информации. Запрос отправляется группе людей, и ответы отслеживаются. Если человек не отвечает, может быть отправлено ноль или более последующих действий. Я создал таблицу:Отключить ограничения во время транзакции
FollowupId int primary key,
RequestId int foreign key (outside this example),
Follows int foreign key (FollowupId),
Message varchar
Если сообщение должно быть первым последующим сообщением, Follows будет null. В противном случае, это идентификатор некоторого другого продолжения. Я также добавил уникальное ограничение на Follows. То есть, не более одного сообщения могут следовать за любым сообщением.
РЕДАКТИРОВАТЬ: Я также должен выделить внешний ключ в соответствии с инструкциями. Он ссылается на FollowupId в этой таблице. Поэтому, если A-> B-> C, просто удаление B делает внешний ключ на C недопустимым. Точно так же невозможно просто обновить C, чтобы следовать за A, потому что B уже следует за A, а уникальное ограничение запрещает дублирование.
Проблема, конечно, в том, что удаление последующих записей затруднено, если за этим сообщением следует другое. Мне кажется, что должно быть возможно отключить проверку ограничений, чтобы можно было удалить среднюю проверку, «переместиться» после последующих действий, а затем снова установить проверку. Есть ли способ отключить ограничение только на время транзакции?
(Кроме того, я знаю о возможной несогласованности данных, возникающих при наличии RequestId в этой таблице. Возможно, было бы лучше иметь Followups [FollowupId, Message], InitialFollowups [FollowupId, RequestId] и AfterFollowups [FollowupId, Follows ]. Я думаю, что это излишне усложняет этот пример.)