Вопрос : Как поддерживать даты таблицы истории выровнял без зазоров?

Hi,

I должно поддерживать таблицу истории, где после того как оно дало новый вход или показатель обновлен, воссоздана или realigned таблица (только для показателей с таким же удостоверением личности). Должно быть никакие зазоры между показателями. Каждый показатель имеет StartDate и EndDate. Под схима таблицы: ТАБЛИЦА

CREATE [dbo]. [История] (ТОЖДЕСТВЕННОСТЬ bigint
[HistoryID] (1, 1) НЕ NULL,
[удостоверение личности] int НУЛЕВОЕ, datetime
[StartDate] НУЛЕВОЙ, NULL
[EndDate] datetime, NULL tinyint
[состояния], СВЯЗАННЫЙ КЛЮЧ ОГРАНИЧЕНИЮ ПО
[History_pk] ГЛАВНЫМ ОБРАЗОМ ([HistoryID]),
GO

Here
ON
ОГРАНИЧЕНИЮ ПО
[History_uq] УНИКАЛЬНО ([удостоверение личности], [StartDate])) [ГЛАВНЫМ ОБРАЗОМ] данные по образца при выровнянные даты:

The DateFormat будет удостоверение личности StartDate EndDate Status
1 1 dd/mm/yyyy

HistoryID 01/01/2010 10/01/2010 1
2 1 11/01/2010 15/01/2010 2
3 1 16/01/2010 20/01/2010 3

Rules:
1.Get освобожданное всех рядков находятся вс внутри ряд нового будучи введенными рядка или updated.
example:

INSERT В конец ResultSet

The
VALUES истории (удостоверения личности, StartDate, EndDate, состояния) (1, «01/01/2010», «17/01/2010», 2) должно быть следующим образом: удостоверение личности StartDate EndDate Status
6 1
HistoryID
01/01/2010 17/01/2010 2
3 1 18/01/2010 20/01/2010 3

Note что показатель с HistoryID=3 имеет StartDate увеличило 1 из-за EndDate ранее рекордного (6) большле чем StartDate показателя под (3), которого рядом было от 16/01/2010 к 20/01/2010.

The такое же поведение должно примениться если потребитель делает уточнением на любом показателе на любом .

Following поля (StartDate, EndDate, состояния) ранее resultset, то препятствует ВСТАВКЕ больше данных в удостоверение личности StartDate EndDate Status
6 1 table.

HistoryID 01/01/2010 17/01/2010 2
3 1 18/01/2010 20/01/2010 3

INSERT В историю (

ResultSet
VALUES удостоверения личности, StartDate, EndDate, состояния) (1, «05/01/2010», «10/01/2010», 1) после вставки: удостоверение личности StartDate EndDate Status
6 1

HistoryID 01/01/2010 04/01/2010 2
7 1 05/01/2010 10/01/2010 1
8 1 11/01/2010 17/01/2010 2
3 1 18/01/2010 20/01/2010 3

Now потребитель изменяет показатель с HistoryID=3, с folowing УТОЧНЕНИЕМ:
УСТАНОВЛЕННОЕ StartDate='17/01/2010', EndDate='19/01/2010', Status=1
WHERE HistoryID=3

Resultset
UPDATE: удостоверение личности StartDate EndDate Status
6 1

HistoryID 01/01/2010 04/01/2010 2
7 1 05/01/2010 10/01/2010 1
8 1 11/01/2010 16/01/2010 2
3 1 17/01/2010 19/01/2010 1
9 1 20/01/2010 20/01/2010 ВСТАВОК 3


Another:

INSERT В

Resultset
VALUES истории (удостоверения личности, StartDate, EndDate, состояния) (1, «01/01/2010», «18/01/2010», 1): удостоверение личности StartDate EndDate Status
10 1

HistoryID 01/01/2010 19/01/2010 1
9 1 20/01/2010 20/01/2010 3

Note что показатели 7.8.3 были уничтожены. Новый добавленный показатель принимает EndDate доработанное до 19/01/2010 из-за EndDate показателя нет 3 имел такое же состояние, то середины, что не будет потребности держать или дорабатывать показатель нет 3 также, как раз для того чтобы принять EndDate его а одеть в его нов введенное record.

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

That´s оно. Если, то любое сомнение о правилах, пожалуйста, препятствует мне know.

Thanks! отношения

Best,

Marco André
class=

Ответ : Как поддерживать даты таблицы истории выровнял без зазоров?

hi Marco,

Большое количество показателей может ввести проблемы в эксплуатации в обоих сценариях. Существенный вопрос о представлении всегда этим же: Испытайте все сценарии и сравните результаты.

Находить ваш правильно показатель истории просто:

ВЫБЕРИТЕ ВЕРХНЮЮ ЧАСТЬ 1 * ОТ [HistoryTable] ГДЕ [дата] <>
Вы можете использовать потребителя - определенная функция таблиц-значения для того чтобы высчитать этот показатель, а я не можем угадать о своем представлении. Возможно холодная соединяют, но я не могу представить одно право теперь;)

Множественный потребитель, котор проблемы этими же в обоих разрешениях, им будет такой же проблемой о atomicity как в известной проблеме перехода счета в банк. Вам нужно точное управление трудыов помещая вашу логику и уровень изоляции после того как я прочитан поручает или улучшает.

mfG
--> stefan <-->
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
ВЫБЕРИТЕ  *
ОТ    [EventTable] e
        КРЕСТ ПРИМЕНЯЕТСЯ [dbo]. [FindHistory] (E. [удостоверение личности], E. [EventDate]) h;

-- с

СОЗДАЙТЕ ФУНКЦИЮ [FindHistory]
    (
      @ID КАК INT,
      @EVENTDATE КАК DATETIME
    )
ТАБЛИЦА ВОЗВРАЩЕНИЙ
КАК
ВОЗВРАЩЕНИЕ
    (ОТБОРНАЯ ВЕРХНЯЯ ЧАСТЬ 1
                H.*
      ОТ      [HistoryTable] h
      ГДЕ     H.ID = @ID
                И H. [HistoryDate] = @EventDate
      ЗАКАЗ   H. [HistoryDate] DESC
    )
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us