2008-11-17 8 views
2

Quelle est la meilleure méthode pour déterminer si un utilisateur a consulté un élément de données, c'est-à-dire comme une mise à jour d'un commentaire? Les deux solutions que j'ai pensé sont ces ....Meilleure façon de déterminer si un utilisateur a consulté des données

  1. Utilisez une table séparée qui a une ligne pour chaque utilisateur et l'identifiant de données qui est en cours de visualisation et l'insertion dans l'élément lorsque la dernière vue.

  2. Utilisez la même table et ajoutez une ligne pour chaque utilisateur lorsque l'élément est modifié et supprimez cette ligne lorsque l'utilisateur affiche réellement les données.

Les deux méthodes résoudre le problème, mais en solution 2 lignes maximum pour la table serait au pire égale à celle de la solution 1, ne vu quoi que ce soit, et, au mieux, a 0 lignes, tout a été vu. Je sais que dans la solution 2, vous n'avez aucun moyen de déterminer quand il a été vu.

Pensées?

Modifier: J'utilisais une mise à jour d'un commentaire à titre d'exemple. Dans l'application elle-même, les nouveaux utilisateurs ne devraient pas voir ou lire les anciennes données. Cela ne signifierait rien pour eux car ils viennent de se joindre.

Répondre

3

Il doit y avoir l'option 1:

Tableau 1 (commentaire)

  • comment_id
  • commentaire

Tableau 2 (comment_view)

  • comment_id
  • user_id

Option 2 ne fonctionnera pas parce que chaque nouvel utilisateur aura tous les commentaires existants "marqués comme lus."

3

avez-vous besoin de savoir quand ou combien de fois ils ont regardé une donnée? Sinon, je garderais une table avec un FK à la mise à jour des données et un FK à l'utilisateur. puis une simple vérification pour voir s'ils ont consultées:

select count(*) from DataAlerts where dataid = 1 and userid = 1 

lorsque des données sont des enregistrements d'insertion mis à jour pour les données et les utilisateurs.

lorsqu'une vue utilisateur supprime cet utilisateur.

2

Option 1 est la meilleure approche ici - généralement, la suppression de quelque chose pour indiquer que quelque chose est arrivé est une façon étrange de faire des choses dans une base de données, et comme ng.mangine indiqué ci-dessus, il ne fonctionne même pas ajoutez des lignes à cette table chaque fois qu'il y a un nouvel utilisateur, mais CELA est presque certain d'être un goulot d'étranglement et un problème de perf - considérez ce qui se passe quand vous avez un million de commentaires et qu'un nouvel utilisateur se joint).

L'option 1 est beaucoup plus claire; ne pensez à le changer que si vous rencontrez des problèmes de performances (ou si vous savez à l'avance que votre trafic nécessitera une stratégie plus optimisée, comme des vecteurs binaires sur chaque rubrique représentant lecture/non lu pour chaque utilisateur du système).

1

Option 2 est une inhabituelle façon de faire les choses, qui, dans le monde de la base de données est une façon de le dire pourrait travail, mais il est probablement préférable d'aller avec une approche plus traditionnelle comme l'option 1.

Questions connexes