У меня сложилась такая ситуация. Мне нужно включить лиц внутри группы.
Для этого я создаю отношение, подобное изображенному на изображении.Сохранение группы лиц и каждое изменение в ней
table diagram http://img189.imageshack.us/img189/6076/imagetkr.png
Группа постоянно меняется (несколько раз в день, добавляют несколько людей и удалены из группы).
Мне нужно сохранить статус группы каждый раз, когда она изменяется (какие люди были в ней и между какими датами), для последующего анализа.
Для этого, каждый раз, когда Личность должна быть добавлена или удалена из группы, мое приложение делает следующее:
- получить текущую группу (и лиц, находящихся в нем)
- создать список (в памяти) лиц в группе, за исключением или добавляющих те, в BEM удалены или добавлены
- обновляют EndDate на текущей группе
- создает новую группу
- вставки Лица (из списка в точке 2) в возвращении группы
- новый GroupID
Этот GroupID используется для сохранения журнала изменений в группе.
Пример данных, полученных после некоторых движений:
PERSON:
PersonId Name
1 John
2 Sally
3 Pete
-Добавление Джон:
GROUP:
GroupId Description StartDate EndDate
1 John added 31/7/2009 11:00:00 null
GROUPPERSON:
GroupPersonId GroupId PersonId
1 1 1
-Добавление Салли:
GROUP:
GroupId Description StartDate EndDate
1 John added 31/7/2009 11:00:00 31/7/2009 11:35:00
2 Sally added 31/7/2009 11:35:00 null
GROUPPERSON:
GroupPersonId GroupId PersonId
1 1 1
2 2 1
3 2 2
-Добавление Пит:
GROUP:
GroupId Description StartDate EndDate
1 John added 31/7/2009 11:00:00 31/7/2009 11:35:00
2 Sally added 31/7/2009 11:35:00 31/7/2009 12:10:00
3 Pete added 31/7/2009 12:10:00 null
GROUPPERSON:
GroupPersonId GroupId PersonId
1 1 1
2 2 1
3 2 2
4 3 1
5 3 2
6 3 3
-Remove Джон:
GROUP:
GroupId Description StartDate EndDate
1 John added 31/7/2009 11:00:00 31/7/2009 11:35:00
2 Sally added 31/7/2009 11:35:00 31/7/2009 12:10:00
3 Pete added 31/7/2009 12:10:00 31/7/2009 12:24:00
4 John removed 31/7/2009 12:24:00 null
GROUPPERSON:
GroupPersonId GroupId PersonId
1 1 1
2 2 1
3 2 2
4 3 1
5 3 2
6 3 3
7 4 2
8 4 3
Это дизайн я придумал, но я единственный разработчик, я боюсь, я не вижу, это ясно.
Можете ли вы указать мне другие (лучшие) способы достижения тех же функций?
Чтобы узнать, какая группа является той, которую я хочу, я сохраняю текущий идентификатор группы в другом месте, поэтому перед созданием новой группы я проверяю, что такое текущее значение и его замените. Спасибо за Ваш ответ. –