par
sadeq » 03 oct. 2006, 12:16
moi j'aime pas les merises
a part dans un bocal avec de la goutte
Ce n'est pas Merise qui fait le bon analyste mais c'est le bon analyste qui fait Merise.
Ton idée rentre tout à fait dans la logique (même si tu n'es pas merisien) une personne dispose d'une liste de N personnes bannies.
Ceci se modélise :
Personne --- banni (1, n) ---> Personne
et
Personne --- est bannie (0,n fois) par ---> Personne
Ce conceptuel donne une entité "Personne" associée à elle même par l'association "banni" qui représente le fait qu'une personne puisse bannir plusieurs autres personnes.
Le modèle logique lui fait donc apparaitre une nouvelle table "banni" qui représente cette association à occurences multiples.
En fait c'est une table de références (clé étrangères) qui va contenir les couples de personnes dont un banni l'autre.
On sait alors que la personne qui banni plusieurs autres personnes aura plusieurs occurences de son id dans cette table et puisqu'il ne peut bannir une même personne plusieurs fois, le couple de références est un index unique qui identifie d'une façon unique une occurence de "banni" sachant en plus que celui qui banni ne peut pas bannir lui même, les valeurs des 2 rôles de l'association sont alors différentes pour toute occurence.
Le MLD final:
- Personne (id clé primaire, ...)
Banni (id_qui_banni clé étrangère de Personne.id,
id_banni clé étrangère de Personne.id,
index unique (id_qui_banni, id_banni)
contrainte (id_qui_banni != id_banni) )
Traitements:
Ajout:
Pour bannir 3 personnes p1, p2 et p3, la personne X doit remplir sa liste des "banni" :
Code : Tout sélectionner
insert into banni (id_qui_banni, id_banni) values ('X', 'p1');
insert into banni (id_qui_banni, id_banni) values ('X', 'p2');
insert into banni (id_qui_banni, id_banni) values ('X', 'p3');
Consultation:
Pour afficher la liste des personnes bannies par X :
Code : Tout sélectionner
select id_banni from banni where id_qui_banni = 'X' order by id_banni
Supprimer:
Pour supprimer la personne p1 de la liste des bannis de X :
Code : Tout sélectionner
delete from banni where id_qui_banni = 'X' and id_banni = 'p1'
Pour supprimer tous les bannis de la liste de X (=> supprimer la liste de X):
Pour supprimer p1 de toutes les listes des bannis quelque soit le propriétaire.
[quote="fred9999"]moi j'aime pas les merises
a part dans un bocal avec de la goutte :lol:
[/quote]
Ce n'est pas Merise qui fait le bon analyste mais c'est le bon analyste qui fait Merise.
Ton idée rentre tout à fait dans la logique (même si tu n'es pas merisien) une personne dispose d'une liste de N personnes bannies.
Ceci se modélise :
Personne --- banni (1, n) ---> Personne
et
Personne --- est bannie (0,n fois) par ---> Personne
Ce conceptuel donne une entité "Personne" associée à elle même par l'association "banni" qui représente le fait qu'une personne puisse bannir plusieurs autres personnes.
Le modèle logique lui fait donc apparaitre une nouvelle table "banni" qui représente cette association à occurences multiples.
En fait c'est une table de références (clé étrangères) qui va contenir les couples de personnes dont un banni l'autre.
On sait alors que la personne qui banni plusieurs autres personnes aura plusieurs occurences de son id dans cette table et puisqu'il ne peut bannir une même personne plusieurs fois, le couple de références est un index unique qui identifie d'une façon unique une occurence de "banni" sachant en plus que celui qui banni ne peut pas bannir lui même, les valeurs des 2 rôles de l'association sont alors différentes pour toute occurence.
[b]
Le MLD final:[/b]
[list][b]Personne[/b] (id [i]clé primaire[/i], ...)
[b]Banni[/b] (id_qui_banni [i]clé étrangère de Personne.id[/i],
id_banni [i]clé étrangère de Personne.id[/i],
[i]index unique (id_qui_banni, id_banni) [/i]
[i]contrainte (id_qui_banni != id_banni) [/i])
[/list]
[b]
Traitements:[/b]
[u][i]Ajout:[/i][/u]
Pour bannir 3 personnes p1, p2 et p3, la personne X doit remplir sa liste des "banni" :
[code]insert into banni (id_qui_banni, id_banni) values ('X', 'p1');
insert into banni (id_qui_banni, id_banni) values ('X', 'p2');
insert into banni (id_qui_banni, id_banni) values ('X', 'p3');[/code]
[u][i]Consultation:[/i][/u]
Pour afficher la liste des personnes bannies par X :
[code]select id_banni from banni where id_qui_banni = 'X' order by id_banni[/code]
[u][i]Supprimer:[/i][/u]
Pour supprimer la personne p1 de la liste des bannis de X :
[code]delete from banni where id_qui_banni = 'X' and id_banni = 'p1'[/code]
Pour supprimer tous les bannis de la liste de X (=> supprimer la liste de X):
[code]delete from banni where id_qui_banni = 'X'[/code]
Pour supprimer p1 de toutes les listes des bannis quelque soit le propriétaire.
[code]delete from banni where id_banni = 'p1'[/code]