Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1297 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SGBD/SQL] structure de tables [RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SGBD/SQL] structure de tables [RESOLU]

n°1264646
patastronc​h
Posté le 12-12-2005 à 16:06:21  profilanswer
 

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
mood
Publicité
Posté le 12-12-2005 à 16:06:21  profilanswer
 

n°1264658
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-12-2005 à 16:17:09  profilanswer
 

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

n°1264661
Elmoricq
Modérateur
Posté le 12-12-2005 à 16:18:14  profilanswer
 

Suffit d'un flag j'imagine.

n°1264666
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-12-2005 à 16:23:42  profilanswer
 

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
n°1264667
patastronc​h
Posté le 12-12-2005 à 16:24:33  profilanswer
 

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
n°1264669
Elmoricq
Modérateur
Posté le 12-12-2005 à 16:25:42  profilanswer
 

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.

n°1264672
patastronc​h
Posté le 12-12-2005 à 16:27:38  profilanswer
 

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 ?

n°1264680
patastronc​h
Posté le 12-12-2005 à 16:33:40  profilanswer
 

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...)

n°1264694
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-12-2005 à 16:55:17  profilanswer
 

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.

n°1264717
patastronc​h
Posté le 12-12-2005 à 17:12:06  profilanswer
 

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
mood
Publicité
Posté le 12-12-2005 à 17:12:06  profilanswer
 

n°1264735
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-12-2005 à 17:21:57  profilanswer
 

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 ;)

n°1264739
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-12-2005 à 17:22:56  profilanswer
 

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 !

n°1264749
patastronc​h
Posté le 12-12-2005 à 17:26:34  profilanswer
 

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
n°1264757
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-12-2005 à 17:33:57  profilanswer
 

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...

n°1264778
patastronc​h
Posté le 12-12-2005 à 17:46:10  profilanswer
 

Ok je vois bien comment faut faire maintenant, merci.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SGBD/SQL] structure de tables [RESOLU]

 

Sujets relatifs
[SQL] Multiplication de colonneProblème de structure de page
[résolu] Comment faire une boucle de ce code au lieu de l'ecrir(vb6] copie de feuille avec formatage [ résolu ]
Transferer ma base de donnée SQL sur un autre serveur.Ajouter 15 jours à une date [resolu]
[HTML/CSS] Probleme incomprehensible [RESOLU]Partager une seule base SQL pour deux sites ? Est-ce contre indiqué ?
[SQL] pb de format avec AVGSQL Server et ASPX
Plus de sujets relatifs à : [SGBD/SQL] structure de tables [RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR