Обеспечение правильных данных в MS SQL Server, уровень БД - PullRequest
2 голосов
/ 20 мая 2009

Скажем, у меня есть таблица со следующей раскладкой:

Id  Int PRIMARY KEY IDENTITY
DateFrom datetime NOT NULL
DateTo datetime NOT NULL
UserId Int

UserId - это внешний ключ к таблице пользователей, и, очевидно, есть еще данные, которые не имеют отношения к этому вопросу.

Что я хочу сделать, это убедиться, что для каждого пользователя не может быть никаких перекрывающихся «периодов», то есть, скажем, у нас есть ряд данных для пользователя 1, с 15 мая 2009 по 18 мая мая 2009 года, тогда в базе данных не может быть никаких других строк, содержащих какие-либо из этих дат (15-18 мая 2009 года, включая обе даты).

Как бы я поступил так лучше? Вначале я думал о том, чтобы использовать триггеры, но я не совсем уверен, как и / или есть ли более эффективный способ проверки данных, как этот?

Ответы [ 4 ]

2 голосов
/ 20 мая 2009

Мой друг, я верю, что ты на месте. Именно по этой причине триггеры предназначены для реализации бизнес-правил.

В документации Books Online есть несколько примеров, которые помогут вам начать работу.

http://msdn.microsoft.com/en-us/library/ms189799.aspx

1 голос
/ 20 мая 2009

Распространенная проблема. Вы можете использовать ограничения:

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/03/08/storing-intervals-of-time-with-no-overlaps.aspx

1 голос
/ 20 мая 2009

Вам необходимо использовать триггер INSERT / UPDATE. При написании триггера убедитесь, что он обрабатывает случай, когда одновременно вставляется или обновляется более одной строки.

0 голосов
/ 20 мая 2009

Один из способов сделать это, особенно если ваша гранулярность находится на уровне дня (и, кстати, если это так, и вы SQL Server 2008, то вам, вероятно, следует использовать тип даты вместо datetime), это иметь другую таблицу, как: UserId int, Дневное время, Первичный ключ (идентификатор пользователя, день) А затем вставьте, удалите, обновите все дни для пользователя при любой вставке, удалите, обновите в исходной таблице и просто позвольте ограничению уникальности сервера на ПК выполнить проверку за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...