[RESOLU] aide pour un mcd

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] aide pour un mcd

Re: aide pour un mcd

par miiidooo19 » 09 avr. 2013, 22:23

merci vraiment Moogli ta requête est super :)

Re: aide pour un mcd

par moogli » 09 avr. 2013, 22:01

oui sauf que l'id du père doit être null.

Pour la requete as tu essayé un max et un group by ?
select 
    iddiscution, contenu, max(dateMessage)
from
    messages
group by (iddiscution)
par exemple

Attention ce n'est pas forcément une bonne idée je préfère celle avec deux tables :)

@+

Re: aide pour un mcd

par miiidooo19 » 09 avr. 2013, 00:04

donc c'est j'ai bien compris le id de première message d'une discussion sera le id de la discussion ? et quand j'aurai une réponse j'insert le id de première message dans le idParent comme

exemple :

1er message

id sujet contenu date idparent
1 | test | blabla | 12/12/2011 12:20:00 | 1
2 | re : test | blabla2 | 22/12/2011 12:00:00 | 1
3 | test2 | nouveu Blabla | 17/01/2012 12:20:00 | 3
.
.
.
c'est bien comme ça ?

Re: aide pour un mcd

par moogli » 08 avr. 2013, 23:28

c'est exactement ça.

Afin de pourvoir chaîner les messages facilement tu n'as pas beaucoup de solutions :
- Tu ajoute des Re dans le titre et fait les liaisons a grand coup de regexp.
- Tu ajoute l'id du premier comme parent et du coup tu trouve facilement tous les messages du fils (quia comme id celui du 1er message).


@+

Re: aide pour un mcd

par miiidooo19 » 08 avr. 2013, 22:59

humm c'est un grand effort de ta part moogli et je tiens a te remercie avant.

concernant tes explication, j'avoue que j'ai bien compris le deuxième cas (une discussion > 2 utilisateurs) plus que le cas de base (une discussion = 2 utilisateurs)

jusqu'ici, tout est ok
Image

l'association envoyer et recevoir vont me générer apres dans la BDD les deux clé étranger idEmmeteur et idDestinataire donc c'est nikel pour le moment (sauf et je pense que tu l'as oublié, il manque le champs sujet ds la table message non ? ).

ce que j'ai du mal a comprendre c'est le rôle de parenté ? ilParente que j'aurai après dans ma bdd jouera le rôle de idDiscussion comme dans le 2eme cas ?

Image

Merci encore

Re: aide pour un mcd

par moogli » 08 avr. 2013, 22:38

La parenté c'est indiquer qu'un tuple dépend d'un autre. On parle aussi d'auto jointure.
donc en clair dans une table tu as une clef primaire et une colonne du même type que la clef primaire nullable. lorsque tu insére un tuple tupeu mettre dans cette seconde colonne la clef primaire d'un autre tuple (tu peux comme indiquer qui sont les parents d'une personnes sans créer d'autre table ;)).


Le cas de base, une discution c'est deux personnes

le mcd peux être ainsi
Image

Comme tu peux le voir mon mcd est "faux" car j'y mentionne l'idParent qui n'a rien a y faire. celui ci étant implicite par la relation parenté.

C'est pour cela que tu ne vois pas de colonne "idemmeteur" ou "idreceveur" elles sont implicite avec les relations envoyer et recevoir.

au finale la table message contiendra idMessage, idEmmeteur,idDestinataire (oui je change pour indiquer que rien n'est figé ;) ) message, dateMessage et idParent

Second cas une discutions c'est plusieurs personnes :

Par exemple
Image

Même principe sauf que l'on créer une entité discutions avec un titre (bon tu peux mettre autre chose comme la date c'est pas mal aussi ;) ).
ensuite la relation "appartenir" indique les messages qui appartiennent au file de discution.
cela se traduit par une colonne idDiscution dans la table message.

Pour sélectionner tous les messages d'un fil de discutions un simple select les champs from message where iddiscution=xxx, suffit :)

voila un exemple fonctionnel, après il faudrait une étude plus complète de ton problème mais globalement on peux faire un truc comme ça :)


@+

Re: aide pour un mcd

par miiidooo19 » 08 avr. 2013, 14:56

Oui et oui.
Pour avoir le fil de discutions tu ajoute une relation de parenté (nullable) sur l'entité message.
hum une relation de parenté ? peux-tu m'expliquer plus ? j'ai regarder sur net mais j'ai pas trop compris le principe

et avec cette relation j'aurai pas des problème si je veux mettre à jour mon système (une discussion a > 2 utilisateurs )

Re: aide pour un mcd

par moogli » 08 avr. 2013, 14:49

Oui et oui.

Deux entités suffisent. L'entité message aura un utilisateur qui envoi le message et un qui le reçois.

Pour avoir le fil de discutions tu ajoute une relation de parenté (nullable) sur l'entité message.


@+

Re: aide pour un mcd

par miiidooo19 » 08 avr. 2013, 14:38

Pas 4 tables 2.

Sais tu ce qu'est une clef étrangère ?


Si j'ai le temps je te ferais un exemple ce soir.


@+
2 Tables? utilisateur et message ?

euh une clé étrangère c'est un champ qui lie une table a une autre non ?

Merci et désolé pour dérangement.

Re: aide pour un mcd

par moogli » 08 avr. 2013, 14:34

Pas 4 tables 2.

Sais tu ce qu'est une clef étrangère ?


Si j'ai le temps je te ferais un exemple ce soir.


@+

Re: aide pour un mcd

par miiidooo19 » 08 avr. 2013, 14:30

Bonjour Moogli merci pour votre réponse,
Salut,
La discussion est une entité qui est déduite des messages tu n'as pas besoin de table pour cela.
donc je n'ai pas besoin de créer l'entité discussion dans mon MCD ?
Ensuite tu as deux relations entre message et utilisateur :
- Envoyer
- recevoir

Un utilisateur peux envoyer 0 ou n message
Un utilisateur peux recevoir 0 ou n message.
selon toi alors j'aurai 4 tables utilisateur, message, envoyer, recevoir ? mais comment gérer les discussions c'est j'ai pas la table discussion ?
Dans un mcd on ne met pas les clefs étrangères, dans un mpd a la limite elles sont déduites des relations entre entités.
@+

Ou est ce que tu as vu une clé étranger ?

merci encore

Re: aide pour un mcd

par moogli » 07 avr. 2013, 23:29

Salut,

La discussion est une entité qui est déduite des messages tu n'as pas besoin de table pour cela.

Ensuite tu as deux relations entre message et utilisateur :
- Envoyer
- recevoir

Un utilisateur peux envoyer 0 ou n message
Un utilisateur peux recevoir 0 ou n message.

Dans un mcd on ne met pas les clefs étrangères, dans un mpd a la limite elles sont déduites des relations entre entités.


@+

aide pour un mcd

par miiidooo19 » 07 avr. 2013, 19:58

Bonjour à tous le monde,

je suis entrain de créer un système de messagerie pour un site et j'aimerai que vous m'aidez pour créer un mcd correct pour ce système.

j'ai 3 tables principales (utilisateur, message, discussion)

un utilisateur peut envoyer 0 ou plusieurs Messages
un message peut être envoyer par un et un seul utilisateur.

un message peut appartenir a une et une seul discussion
une discussion peut contenir 1 ou plusieurs messages

un utilisateur peut participer a une ou plusieurs discussions
une discussion concerne 2 utilisateurs

voila c'est les relations que mon système doit gérer

j'ai donc fait un MCD mais je suis pas sur que c'est propre le voici :

Image

Que pensez vous ?

Merci d'avance