IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Systéme de notification


Sujet :

Schéma

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 150
    Points : 157
    Points
    157
    Par défaut Systéme de notification
    Bonjour,

    J'ai une table Membre qui comporte des attributs basiques tel : nom,prenom,email,...
    Afin d'historiser le changement de n'importe qu'elle attribut j'ai créer des tables qui suivent l'évolution de chaque attribut : Nom_H, Prenom_H, .... Elles contiennent l'ancienne donnée et l'heure de leur insertion.

    Cependant je voudrais que cela soit visible pour les autres utilisateurs sous forme de notification : Membre1 à modifier son nom, Membre2 à modifier son prénom,...
    C'est là que je vous intervenez, dois-je simplement ajouter un boolean dans Nom_H,Prénom_H,.... (false : notification (non vue), true : plus de notification (vue) ) ou est-ce mieux d'insérer les notifications dans une autre table relier à l'historisation de chacun ce qui engendrer : présence de ligne dans la table = notification, absence = pas de notification.

    PS: Je ne sais pas comment représenter ce modèle, j'y suis allez à " la logique ".

    Merci pour votre aide.

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Crackerz,

    Citation Envoyé par Crackerz
    ... des tables qui suivent l'évolution de chaque attribut...
    ==> suggestion :
    Attribut_a_ historiser(NomTable, NomAttribut, ...)
    Attribut_historique(#NomTable, #NomAttribut, Date, Heure, Valeur, ...)

    Citation Envoyé par Crackerz
    ... je voudrais que cela soit visible pour les autres utilisateurs sous forme de notification... false : notification (non vue), true : plus de notification (vue)...
    ==> souhaites-tu gérer la vue des notifications utilisateur par utilisateur ou au global (un utilisateur qui a vu une notification implique que tous les utilisateurs ont vu cette notification) ?

  3. #3
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 113
    Points : 31 588
    Points
    31 588
    Billets dans le blog
    16
    Par défaut
    Bonjour Crackerz,


    S’il s’agit seulement de savoir si oui ou non un tuple de Nom_H a été vu, un booléen suffit. S’il fallait enregistrer d’autres données ayant trait à l’événement, la 3NF en prendrait un coup (a fortiori la 6NF ), auquel cas il faudrait attacher une table ad-hoc à Nom_H.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 150
    Points : 157
    Points
    157
    Par défaut
    Merci vos réponse très rapide.

    ==> suggestion :
    Attribut_a_ historiser(NomTable, NomAttribut, ...)
    Attribut_historique(#NomTable, #NomAttribut, Date, Heure, Valeur, ...)
    Ce à quoi j'ai pensé :
    Membre(idMembre,nom,prenom,...)
    Membre_Nom_H(idMembre,timestamp,ancienneValeur)
    Membre_Prenom_H.....

    Pourriez-vous m'indiquer en quoi votre méthode est-elle mieux ?

    ==> souhaites-tu gérer la vue des notifications utilisateur par utilisateur ou au global (un utilisateur qui a vu une notification implique que tous les utilisateurs ont vu cette notification) ?
    Je souhaite que cela soit gérer par globale, par curiosité j'aimerai bien savoir à quoi correspondrai celle par utilisateur mais bon ces bonus...

    S’il s’agit seulement de savoir si oui ou non un tuple de Nom_H a été vu, un booléen suffit. S’il fallait enregistrer d’autres données ayant trait à l’événement, la 3NF en prendrait un coup (a fortiori la 6NF ), auquel cas il faudrait attacher une table ad-hoc à Nom_H.
    A l'heure actuel cela sert uniquement pour savoir si un changement de Nom a été vu ou non. Faut-il prendre en considération une évolutivité qui n'arrivera peut-être jamais ou créer pour le besoin actuel ? ^^

  5. #5
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Citation Envoyé par Crackerz
    Pourriez-vous m'indiquer en quoi votre méthode est-elle mieux ?
    ==> eh bien, avec ta méthode, tu es obligé de créer autant de tables que d'attributs, ce qui n'est pas très bon en termes d'évolutivité (ajout d'un attribut => ajout d'une table avec tout se qui va avec...).
    Avec la méthode présentée, il y a autant d'enregistrements que d'attributs, dans une seule et même table.

    Citation Envoyé par Crackerz
    Je souhaite que cela soit gérer par globale
    ==>
    Attribut_a_ historiser(NomTable, NomAttribut, ...)
    Attribut_historique(#NomTable, #NomAttribut, Date, Heure, Valeur, DateHeureVu, ...)

    Citation Envoyé par Crackerz
    par curiosité j'aimerai bien savoir à quoi correspondrai celle par utilisateur
    ==>
    Attribut_a_ historiser(NomTable, NomAttribut, ...)
    Attribut_historique(#NomTable, #NomAttribut, Date, Heure, Valeur, ...)
    Attribut_historique_vu_membre(#NomTable, #NomAttribut, #Date, #Heure, #IdMembre, DateHeureVu, ...)

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 150
    Points : 157
    Points
    157
    Par défaut
    C'est beaucoup plus claire

    Si j'ai bien compris tu pré-remplit cette table avec le nom de la table que tu veux historiser ainsi que le nom de ces attributs : Attribut_a_ historiser(NomTable, NomAttribut, ...). Derrière ces "..." penses-tu à des attributs en particulier ou non ?

    Enfin, la table Attribut_historique(#NomTable, #NomAttribut, Date, Heure, Valeur, DateHeureVu, ...) est associer à la table précédente. Cependant, comment fait-tu le lien entre les deux ? (dans la pratique).

    Ne serait-ce pas plus simple de passer par une unique table : Historisation_Attribut(NomTable,NomAttribut,Date&Heure,Valeur,DateHeureVu); ?

  7. #7
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Citation Envoyé par Crackerz
    Derrière ces "..." penses-tu à des attributs en particulier ou non ?
    ==> ça pourrait être le libellé de l'attribut "en clair". Par exemple, le champs "NCli" est le "Nom du client".

    Enfin, la table Attribut_historique(#NomTable, #NomAttribut, Date, Heure, Valeur, DateHeureVu, ...) est associer à la table précédente. Cependant, comment fait-tu le lien entre les deux ? (dans la pratique).
    ==> eh bien, c'est indiqué via le signe # qui indique les clés étrangères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Attribut_a_ historiser(       NomTable,  NomAttribut, ...)
                                       ^           ^
                                       |           |
    Attribut_historique(          #NomTable, #NomAttribut, Date,  Heure, Valeur, ...)
                                       ^           ^         ^     ^
                                       |           |         |     |
    Attribut_historique_vu_membre(#NomTable, #NomAttribut, #Date, #Heure, #IdMembre, DateHeureVu, ...)
    pas le temps de faire un schéma... mais, tu pourrais t'y coller.

    Citation Envoyé par Crackerz
    Ne serait-ce pas plus simple de passer par une unique table : Historisation_Attribut(NomTable,NomAttribut,Date&Heure,Valeur,DateHeureVu); ?
    ==> c'est plus évolutif avec plusieurs tables. Mais bon, c'est vrai, c'est possible.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 150
    Points : 157
    Points
    157
    Par défaut
    ==> eh bien, c'est indiqué via le signe # qui indique les clés étrangères
    J'ai bien compris la notion de clé étrangère ce que je voulais dire ce situer plus sur la manipulation des tables. Autrement dit pour moi les informations sembles redondantes entre les deux tables suivantes :
    Attribut_a_ historiser( NomTable, NomAttribut, ...)
    ^ ^
    | |
    Attribut_historique( #NomTable, #NomAttribut, Date, Heure, Valeur, ...)
    Afin de bien comprendre la nécessité de cette combinaison pourrai-tu être plus précis en me donnant quelques exemples qui se cache derrière ta dernière phrase : " ==> c'est plus évolutif avec plusieurs tables. "

    Enfin le problème majeure que je pourrai rencontrer dans ce système est l'historisation d'attribut ayant un type différent d'une table à une autre ou même dans la même table.
    Exemple :
    Attribut_a_ historiser(NomTable, NomAttribut, ...)
    NomTable(varchar)
    -Membre

    NomAttribut(varchar)
    -Nom
    -DateInscription

    Attribut_historique(#NomTable, #NomAttribut, Date, Heure, Valeur, ...)
    NomTable(varchar)
    -Membre (fk)

    NomAttribut(varchar)
    -Nom
    -DateInscription
    ....

    Valeur(Type : date ? varchar ? char ? ... ?)
    -...

  9. #9
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Crackerz,

    Citation Envoyé par Crackerz
    Afin de bien comprendre la nécessité de cette combinaison pourrai-tu être plus précis en me donnant quelques exemples qui se cache derrière ta dernière phrase : " ==> c'est plus évolutif avec plusieurs tables. "
    ==> Avec la méthode initiale (multi-tables), tu es obligé de créer autant de tables que d'attributs, ce qui n'est pas très bon en termes d'évolutivité (ajout d'un attribut => ajout d'une table avec tout se qui va avec...).
    Avec la méthode présentée (mono-table), il y a autant d'enregistrements que d'attributs dans une seule et même table.

    L'évolutivité évoquée se situe au niveau d'ajouts de champs : si un champ est ajouté dans la table Membre, dans la méthode initiale, il faut créer une table supplémentaire et modifier les codes/requêtes/formulaire/... de manière plus complexe qu'en ne gérant qu'une seule table.

    Citation Envoyé par Crackerz
    Valeur(Type : date ? varchar ? char ? ... ?)
    ==> il est clair qu'il faut que le champ Valeur soit de type varchar car il doit accepter les valeurs de type texte, numérique, date, booléen, etc... Comme il ne s'agit que de notification (pas de calcul), cela ne semble pas porter à conséquence.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 150
    Points : 157
    Points
    157
    Par défaut
    Bonjour Richard,

    Mon blocage réside dans le fait de passer par deux tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Attribut_a_ historiser(NomTable,  NomAttribut, ...)
                                       ^           ^
                                       |           |
    Attribut_historique(#NomTable, #NomAttribut, Date,  Heure, Valeur, ...)
    au lieu d'une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Historisation_Attribut(NomTable,NomAttribut,Date&Heure,Valeur,DateHeureVu)
    . Quoi qu'il en soit merci je vais continuer de réfléchir afin de comprendre ce que tu as essayé de me dire à ce propos.

    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Un système de notifications
    Par TheBleedz dans le forum AJAX
    Réponses: 9
    Dernier message: 10/11/2013, 15h24
  2. Réponses: 1
    Dernier message: 23/06/2013, 15h18
  3. Système de notification
    Par ifiii dans le forum Android
    Réponses: 2
    Dernier message: 04/05/2013, 14h47
  4. [2.x] Bonne pratique : système de notification (facebook like)
    Par selmaksga dans le forum Symfony
    Réponses: 2
    Dernier message: 14/04/2013, 17h18
  5. Firefox : Mozilla travaille sur un système de notifications Push
    Par Hinault Romaric dans le forum Firefox
    Réponses: 4
    Dernier message: 07/02/2012, 03h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo