Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/10/2006, 10h14   #1
Membre du Club
 
Avatar de Jimmy_S
 
Inscription : octobre 2005
Messages : 214
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 214
Points : 50
Points : 50
Par défaut [pb]Modéliser en Merise

Bonjour,

Je pense être face à un cas de schéma qui ne trouve pas sa place dans les SGBD Relationnels , mais plutot dans les fichiers XML. Bref, j'ai besoin de faire un truc sur MySQL , et je ne vois pas comment modéliser ça.

Je vous explique :

J'ai cré une appli en Delphi , qui permet de référencer des documents, c'est à dire générer une référence unique en fonction de plusieurs critères , et de stocker ces infos sur une table dans MySQL.

Après une réunion de travail , il s'est avéré qu'on devait mettre en place un système de "relecteur".

Je m'explique :

Lorsqu'une personne cré une référence , il devra indiquer une liste de relecteurs , c'est à dire une liste de users qui devront valider ou non l'ajout de son document.

Je dois donc d'un côté stocker une liste d'utilisateur , et lier chaque utilisateur aux documents qu'il doit relire.

Ma solution

Créer une BDD nommé USER.
Créer une table par USER , avec deux champs "Id" (Id du document qu'il doit relire) , et "Status" (Accepté , Non relu , Refusé).

Ensuite je pourrai lancer un trigger dans la BDD pour changer le statut du document de la table DOCUMENT en fonction des "Status" de la table USER.
Exemple : Si tout le monde a mis "Accepté" dans la table USER , le champ "Status" de la table DOCUMENT s'update et devient "ACCEPTE".



J'ai un peu de mal à conceptualiser le truc , donc si vous avez une autre idée pour faire fonctionner ça , je vous écoute.
Jimmy_S est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 13h01   #2
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Bonjour,

L'implémentation d'un workflow de relecture relève plus de la logique applicative que d'un travail au niveau SGBD.
Pourquoi ne pas vérifier dans le code, à chaque fois qu'un relecteur valide un document, si tous les relecteurs ont validé et donc si l'état du document doit passer à "Validé" ? Ca éviterait la création d'un trigger complexe et qui grèverait les performances (vérification à chaque fois qu'on fait un UPDATE alors que la modification se fait dans des cas beaucoup plus rares).

Un trigger est un outil adapté pour implémenter des contraintes d'intégrité fortes liées au modèle de données et qui doivent se vérifier à chaque insertion, modification ou suppression, mais pas nécessairement pour des règles de gestion aussi précises et dépendantes du contexte applicatif.
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 15h34   #3
Membre du Club
 
Avatar de Jimmy_S
 
Inscription : octobre 2005
Messages : 214
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 214
Points : 50
Points : 50
Oui , mais où stocker la variable ? (sachant que je suis sur PHP) , je dois bien faire à un moment ou à un autre une entrée BDD pour grouper toutes les demandes.

Et comment ressortir à un user , la liste des documents qu'il a à relire ?

J'ai du mal à saisir ton explication, comment gérer ça au niveau technique ?
Jimmy_S est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 16h16   #4
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Je suis passé un peu vite sur ta modélisation, il vaudrait mieux un truc du genre :

user (id_user, ...)
validation (id_user, id_document, status)
document (id_document, status, ...)

Citation:
Envoyé par Jimmy_S
Oui , mais où stocker la variable ? (sachant que je suis sur PHP) , je dois bien faire à un moment ou à un autre une entrée BDD pour grouper toutes les demandes.
La variable qui indique si un document est validé ? Tu peux très bien avoir une colonne "status" dans la table document. C'est une redondance calculée (on peut avoir la même donnée en passant en revue tous les relecteurs et en regardant s'ils ont tous validé) mais effectivement il vaut mieux la stocker dans la table pour éviter trop de calculs.

Citation:
Envoyé par Jimmy_S
J'ai du mal à saisir ton explication, comment gérer ça au niveau technique ?
En gros je voulais juste dire qu'un trigger n'est peut-être pas la meilleure solution (surtout en l'état des fonctionnalités des triggers sous MySQL), tu peux préférer une gestion entièrement au niveau de ton application. Du genre : à chaque fois qu'un relecteur vient de valider un document, tu regardes si toutes les validations de ce document sont a l'état "validé", et si c'est le cas, tu passes le document lui-même à l'état "validé".
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 17h07   #5
Membre du Club
 
Avatar de Jimmy_S
 
Inscription : octobre 2005
Messages : 214
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 214
Points : 50
Points : 50
Ok parfait .

Je voulais à tout prix éviter la redondance , mais je pense qu'au final , c'est le plus simple à mettre en place.

Merci pour ta réponse , je vais suivre ce raisonnement .

Encore une chose, tous les avis n'ont pas été récolté , normalement le document doit passer en "validé" au bout de 15 jours.

Comment gérer ça ?
Jimmy_S est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 17h28   #6
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Avec un job planifié (script PHP, batch...) qui va vérifier régulièrement ce délai de 15 jours.

Ou alors par une action utilisateur qui va déclencher cette vérification à un moment particulier.
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 17h40   #7
Membre du Club
 
Avatar de Jimmy_S
 
Inscription : octobre 2005
Messages : 214
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 214
Points : 50
Points : 50
Parfait , merci beacoup

J'vais plus pouvoir glander maintenant :p
Jimmy_S est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h40.


 
 
 
 
Partenaires

Hébergement Web