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 :

Gérer les changements dans la BDD après validation


Sujet :

Schéma

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Gérer les changements dans la BDD après validation
    Bonjour à tous,

    Tout d'abord désolé si je ne suis pas dans la bonne partie du forum pour vous faire part de mon problème. Il s'agit plus d'un problème global d'organisation de ma BDD que d'un problème technique MySQL (même si c'est le SGBDD que j'utilise).

    Prenons un exemple pour illustrer mon problème :

    Je souhaite dévolopper un site où les membres peuvent publier une annonce décrivant leur voiture. Leur du processus de création de l'annonce, ils sont amenés à remplir tout un tas de champs/cocher tout un tas de cases, etc, pour pouvoir entrer tout ce qui est nécessaire (description, critères, ...) dans la base de données.

    On en vient à ma question : je souhaiterai que, une fois ce processus terminé, cette annonce ne soit pas publiée sur le site tant que l'administrateur ne l'approuve pas.
    Bon a priori le plus simple est juste d'ajouter un champ dans ma bdd spécifiant si oui ou non cette annonce est validée. OK.

    On en vient maintenant au vrai "problème". L'utilisateur aura toujours la possibilité d'éditer lui même son annonce (après publication sur le site), pour y modifier la photo, la description, que sais-je encore ... Mais encore une fois, ces modifications seront sujettes à la validation de l'administrateur, et en attendant cette validation l'annonce (dans son ancienne version) doit toujours etre disponible sur le site.

    Du coup a priori il y a plusieurs possibilités : dupliquer chaque champ susceptible d'etre edité, ou alors avoir un duplicata de cette bdd (de ces tables) qui ferait tampon, i.e. stockerait les annonces apres modifs mais avant validation.
    J'imagine qu'il y a d'autres solutions, possiblement encore meilleures.

    Il me semble que ce genre de 'modération de modifications' est quelque chose qui est assez répandu, pourtant j'ai farfouillé des heures sur le net sans rien trouver de convaincant ... Un grand merci si vous avez la clé !

    Topinambour

    PS: Question subsidiaire : le top serait a la fin de voir immédiatement ce qui a été modifié par une opération qui trouverait la différence entre deux champs avant et apres modifs (pour voir par exemple quel mot a été changé). J'imagine que c'est possible en MySQL mais je sais aps trop quelle fonction utiliser. Mais bon, c'est accessoire.

    Merci encore

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ça s'appelle une gestion de versions !

    Dans Drupal, chaque noeud est identifié par son "nid" (id du noeud) et son "vid" (id de la version). Idem pour tout ce qui s'y rattache.

    En s'inspirant de ce principe, tu peux avoir une table des annonces, une table des versions et X tables pour les propriétés des annonces qui font référence à la table des versions.

    MCD :
    annonce -1,n----avoir----(1,1)- version -0,n----associer----0,n- propriete

    Tables :
    annonce (anc_id, anc_id_auteur, anc_date_creation, anc_texte...)
    version (vrs_id_annonce, vrs_num_version, vrs_est_validee...)
    propriete (prp_id, prp_libelle...)
    vrs_associer_prp (vap_id_annonce, vap_num_version, vap_id_propriete, vap_valeur...)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Tout d'abord merci pour la réponse !

    Je pense déja qu'en me documentant sur la gestion de version je trouverai plus de choses.

    Pour être sur d'avoir bien compris ce que tu préconises :

    1 table "annonce" qui stockera les données immuables (qui ne peuvent etre modifiées par la suite)

    1 table "version" qui determinera les versions existantes de chaque annonce (et leur validation)

    X tables "propriete_x" gerant les differentes proprietes de l'annonce qui sont modifiables ?

    Pas sur d'avoir compris cette table

    (et ensuite la table de jointure (n,n), ok)

    J'aurai tout de meme une interrogation, si tant est que j'ai bien interprété ce que tu as expliqué : lorsque l'on interrogera la base de données pour faire une recherche sur les annonces (et leur propriétés), il faudra spécifier de ne faire le select que sur les champs des tables proprietes correspondant a des versions validées (pour ne pas se retrouver avec des annonces 'anciennes versions')
    Ca ne risque pas de 'bouffer' pas mal de temps ce genre de requete en plus ?

    (C'est une question vraiment venant d'un ignorant vis à vis des performances MySQL et de ce qui ralentit ou non.)

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Topinambour Voir le message
    Pour être sur d'avoir bien compris ce que tu préconises :

    1 table "annonce" qui stockera les données immuables (qui ne peuvent etre modifiées par la suite)

    1 table "version" qui determinera les versions existantes de chaque annonce (et leur validation)

    X tables "propriete_x" gerant les differentes proprietes de l'annonce qui sont modifiables ?

    Pas sur d'avoir compris cette table
    Si ce ne sont que des annonces de voitures, tu pourras avoir par exemple une table pour les couleurs, une table pour les types (berline, coupé...), une table pour le carburant (sans-plomb, gazole, GPL,hybride, tout électrique) ou alors faire une modélisation par méta-données.

    J'aurai tout de meme une interrogation, si tant est que j'ai bien interprété ce que tu as expliqué : lorsque l'on interrogera la base de données pour faire une recherche sur les annonces (et leur propriétés), il faudra spécifier de ne faire le select que sur les champs des tables proprietes correspondant a des versions validées (pour ne pas se retrouver avec des annonces 'anciennes versions')
    Ca ne risque pas de 'bouffer' pas mal de temps ce genre de requete en plus ?
    Non. C'est juste une condition sur la colonne "vrs_est_validee". De toute façon, tu auras sans doute besoin de joindre les tables annonce, version et les X tables de propriétés pour restituer l'annonce complète mais il ne faut pas avoir peur des jointures, c'est le principal boulot d'un SGBD et c'est l'opération la plus optimisée.

    (C'est une question vraiment venant d'un ignorant vis à vis des performances MySQL et de ce qui ralentit ou non.)
    Par contre, si ce n'est pas trop tard et si MySQL ne t'est pas imposé, intéresse toi plutôt à Postgresql.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Si ce ne sont que des annonces de voitures, tu pourras avoir par exemple une table pour les couleurs, une table pour les types (berline, coupé...), une table pour le carburant (sans-plomb, gazole, GPL,hybride, tout électrique) ou alors faire une modélisation par méta-données.
    A vrai dire ce n'est pas une BDD sur les voitures, mais sur des voyages, ce qui ne change pas grand chose, sinon augmente un peu la complexité (par exemple chaque voyage peut avoir differentes dates de departs, ou differentes destinations -pour le cas d'un circuit).


    Citation Envoyé par CinePhil Voir le message
    Non. C'est juste une condition sur la colonne "vrs_est_validee". De toute façon, tu auras sans doute besoin de joindre les tables annonce, version et les X tables de propriétés pour restituer l'annonce complète mais il ne faut pas avoir peur des jointures, c'est le principal boulot d'un SGBD et c'est l'opération la plus optimisée.
    Ok, c'est vrai que dans mon modele actuel j'ai deja un certain nombre de jointures.
    Petite aparte : la colonne "vrs_est_validee" ne peut etre egale a 1 (et pas a 0) uniquement une fois par annonce_id (pour ne pas avoir deux versions de la meme annonce). C'est juste un détails à prendre en compte dans la validation ? A savoir que lors de la validation d'une version tu passes à 0 le champ "validation" de l'ancienne version ?
    Désolé c'est sans doute une question stupide/evidente mais je manque d'experience dans ce genre de trucs

    Citation Envoyé par CinePhil Voir le message
    Par contre, si ce n'est pas trop tard et si MySQL ne t'est pas imposé, intéresse toi plutôt à Postgresql.
    Ah non pour l'instant il n'est pas du tout trop tard, c'est juste que MySQL etait mon choix car je connais mieux et puis j'utilise Wamp avec phpMyAdmin.
    Pour quelles raisons penses tu que PostgreSQL est plus adapté que MySQL dans mon cas ?

    Merci beaucoup en tout cas, tu m'as oté une belle épine du pied

Discussions similaires

  1. [DAO] Comment gérer les liens avec la bdd dans mes classes?
    Par Wormus dans le forum Autres
    Réponses: 6
    Dernier message: 22/02/2006, 16h14
  2. Réponses: 5
    Dernier message: 28/11/2005, 09h52
  3. A quoi servent les index dans une BDD ?
    Par Melvine dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 25/10/2005, 12h14
  4. Supprimer les guillemets dans un fichier après écriture
    Par soulryo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/03/2005, 11h39
  5. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39

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