[SGBD/SQL] structure de tables [RESOLU]

structure de tables [RESOLU] [SGBD/SQL] - SQL/NoSQL - Programmation

Marsh Posté le 12-12-2005 à 16:06:21    

Je me demandais comment c'etait géré au niveau des bases de données les messages non lu dans un forum.
Je me posais egalement la meme question pour l'envoie multiple des messages privés concernant le deja lu et la supression.
 
Ca doit etre classique,mais je suis un vrai débutant en base de données, si quelqu'un peutm eclairer afin que je fasse pas n'importe quoi  :D


Message édité par patastronch le 12-12-2005 à 17:46:29
Reply

Marsh Posté le 12-12-2005 à 16:06:21   

Reply

Marsh Posté le 12-12-2005 à 16:17:09    

y'a un topic dédié au développement de forums

Reply

Marsh Posté le 12-12-2005 à 16:18:14    

Suffit d'un flag j'imagine.

Reply

Marsh Posté le 12-12-2005 à 16:23:42    

une table de flag je dirais... avec comme clé "id_user, id_topic"
 
ze only matter étant la taille du truc.
 
a mon avis, plutôt que de stocker les "non lu" (potentiellement énorme), il faut mieu stocker la date de dernière lecture (ou le max(id) du post dans le topic) et le remplacer à chaque lecture.
en faisant une purge au bout de 6 mois par exemple (histoire de garder un peu d'historique) on doit pouvoir conserver des perfs correctes et pas trop bouffer de place dans la base)

Message cité 1 fois
Message édité par Arjuna le 12-12-2005 à 16:25:22
Reply

Marsh Posté le 12-12-2005 à 16:24:33    

un flag pour chaque topic et chaque utilisateur ? c'est bourrin non ? et tu geres ca comment dans la db ? un table expres pour les forums deja lu ?
 
genre 2 colonnes : id_post, id_user_ayant_lu  ?
et on suprime la ligne a la lecture ?


Message édité par patastronch le 12-12-2005 à 16:25:40
Reply

Marsh Posté le 12-12-2005 à 16:25:42    

Je pensais qu'il s'agit des messages non-lus pour les messages privés.
 
J'ai mélangé les deux premières phrases du sujet initial.

Reply

Marsh Posté le 12-12-2005 à 16:27:38    

Arjuna a écrit :

une table de flag je dirais... avec comme clé "id_user, id_topic"
 
ze only matter étant la taille du truc.
 
a mon avis, plutôt que de stocker les "non lu" (potentiellement énorme), il faut mieu stocker la date de dernière lecture (ou le max(id) du post dans le topic) et le remplacer à chaque lecture.
en faisant une purge au bout de 6 mois par exemple (histoire de garder un peu d'historique) on doit pouvoir conserver des perfs correctes et pas trop bouffer de place dans la base)


 
Ok tu penses qu 'a la place de deja lu, vaut mieu faire nouveaux posts depuis la derniere connexion ? mais tu mets ca comment a jour ? pas a laconnexion sinon le garsil en li un et hop tout est considéré comme non nouveau apres non ?

Reply

Marsh Posté le 12-12-2005 à 16:33:40    

Elmoricq a écrit :

Je pensais qu'il s'agit des messages non-lus pour les messages privés.
 
J'ai mélangé les deux premières phrases du sujet initial.


 
en fait le meme probleme se pose quand c est un message posté aplusieurs utilisateurs ( a la difference pres que c est un nombre fixe d user qui sont concerné et non tout lemonde, ce qui evite les problemes a linscription d un nouevl utilisateur qui doit avoir tous les mesages du forums en non lu. Enfin je dis ca j en sais rien a la fois...)

Reply

Marsh Posté le 12-12-2005 à 16:55:17    

patastronch a écrit :

Ok tu penses qu 'a la place de deja lu, vaut mieu faire nouveaux posts depuis la derniere connexion ? mais tu mets ca comment a jour ? pas a laconnexion sinon le garsil en li un et hop tout est considéré comme non nouveau apres non ?


nan
 
c'est pourtant clair.
 
dans la talbe, tu met le MAX(ID) du post lut par topic.
 
exemple :
 
topic 1, post 1, 2, 3
topic 2, post 1, 2, 3
 
je me logue
j'ai rien dans la table.
 
donc topic1 et topic2 sont allumués, car topic1 + post3 > ce qu'il y a dans ma table.
 
une fois que j'ai cliqué, je met "topic 1, post 3" dans la table de lecture.
il ne reste que topic2 qui s'allume.
 
maintenant, qq1 écrit dans topic1 un post 4.
 
topic1 post4 > topic1 post3
 
donc je rallume topic1.
 
quand je clique à nouveau sur topic1, alors je remet "topic1 post4" à la place de "topic1 post3"
 
puis, au bout de 6 mois, je vais virer toutes les lignes dans cette table qui n'ont pas été modifiée depuis plus de 6 mois, histoire de fairedu nettoyage.

Reply

Marsh Posté le 12-12-2005 à 17:12:06    

OK d'accord je vois a peu pres, et a l 'inscription d' un membre je rajoute autant de ligne que de topic dans ma table pour ses topics non lu ? ou alors je suposse que si un topic n est pas présent a coté de l id_user c 'est qu'il ne l a jamais lu ? et je cré une ligne uniquement pour le topic pour l'user quand celui ci lit le topic pour la premiere fois ?
 
En tous cas merci, ca je me sens plus éclairé la, par contre je sais pas ce que j'esperais, mas je trouve ca enorme pour une option aussi insolite.


Message édité par patastronch le 12-12-2005 à 17:14:15
Reply

Marsh Posté le 12-12-2005 à 17:12:06   

Reply

Marsh Posté le 12-12-2005 à 17:21:57    

suppose, c'est mieu que de mettre 1000000 lignes dans la base pour un gars qui s'inscrit avec un faut email et qui ne reçoit jamais son mot de passe ;)

Reply

Marsh Posté le 12-12-2005 à 17:22:56    

sinon, ouais, c'est un peu super lourd. c'est la meilleur solution qui m'est venue à l'esprit. mais j'y ai réflécit 30 secondes, je te garantis pas qu'il n'y a pas mieu...
va faire un tour dans le topic dédié, t'auras peut-être de meilleurs solutions !

Reply

Marsh Posté le 12-12-2005 à 17:26:34    

Oui en effet :)
 
Et pour les messages privés je fais une table : id_mess id_user deja_lu suprime ?
 
et je suprime le message physiquement quand tout le monde l a vraiment suprimé et/ou au bout d'un certain temps ?
 
p.s: petite question : une primary key est obligatoire ou si il y en a pas mysql (ou autre) se charge de faire sa propre clef ?
 
edit : ou alors est ce possible que l'associations de deux champs (id_mess et id_user par exemple) puissent faire office de clef primaire ?


Message édité par patastronch le 12-12-2005 à 17:31:21
Reply

Marsh Posté le 12-12-2005 à 17:33:57    

mmmm, nan
 
id_topic, id_post
 
=> A la création, tu repli la table
=> A chaque ajout de post, tu mets à jour la table avec le topic_id (sans ajouter de ligne)
=> Quand le user supprime, alors tu supprimes la ligne
 
Par contre, quand une personne répond, il faut vérifier qu'il reste au moins une personne qui peut le lire... à voir selon les cas si tu recrées les lignes pour tous les destinataires, ou si tu effaces les deux dernières lignes lorsque tu supprimes l'avant dernière...

Reply

Marsh Posté le 12-12-2005 à 17:46:10    

Ok je vois bien comment faut faire maintenant, merci.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed