J'ai cette situation si j'ai besoin d'inclure des Personnes dans un Groupe.
Pour cela, je crée une relation comme celle montrée dans l'image.Enregistrement d'un groupe de personnes et de toutes les modifications
table diagram http://img189.imageshack.us/img189/6076/imagetkr.png
Les groupes sont en constante évolution (plusieurs fois par jour, plusieurs personnes sont ajoutés et supprimés d'un groupe).
J'ai besoin de sauvegarder le statut du groupe chaque fois qu'il change (quelles personnes étaient dedans et entre quelles dates), pour une analyse ultérieure.
Pour cela, chaque fois qu'une personne doit être ajouté ou supprimé d'un groupe, mon application effectue les opérations suivantes:
- obtenir le groupe actuel (et les personnes à l'intérieur)
- créer une liste (en mémoire) des personnes du groupe, à l'exclusion ou en ajoutant ceux à bem enlevé ou ajouté
- mise à jour du EndDate sur le groupe actuel
- crée un nouveau groupe
- insérer les personnes (de la liste au point 2) dans le groupe
- retour la nouvelle GroupId
Ce GroupId est utilisé pour enregistrer un journal des changements dans le groupe.
Un exemple des données générées après quelques mouvements:
PERSON:
PersonId Name
1 John
2 Sally
3 Pete
-Ajout John:
GROUP:
GroupId Description StartDate EndDate
1 John added 31/7/2009 11:00:00 null
GROUPPERSON:
GroupPersonId GroupId PersonId
1 1 1
-Ajout Sally:
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
-Ajout Pete:
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
-Retirez John:
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
C'est la conception que je suis venu avec, mais comme je suis un développeur, je crains que je ne vois pas clairement.
Pouvez-vous me signaler d'autres (meilleures) façons d'obtenir les mêmes caractéristiques?
Pour savoir quel groupe est celui que je veux, je sauvegarde l'identifiant du groupe actuel dans un autre emplacement, donc avant de créer le nouveau groupe, je vérifie quel est le courant et le remplace. Merci pour votre réponse. –