Problème d'analyse

Problème d'analyse - SQL/NoSQL - Programmation

Marsh Posté le 10-01-2014 à 09:45:23    

Bonjour,
 
Je travaille sur une gestion de planning,
 
Voici ma BDD à l'heure actuelle:
 
http://img15.hostingpics.net/pics/653497bdd.jpg
 
Journée représente une journée de travail, elle contient des heures qui ont différentes catégories (heures double/triples etc.).
(L'id n'est qu'un int autoincrémenté)
 
Donc je me suis rendu compte en développant que ma BDD n'était pas du tout au point.
 
Je pense mettre une entité faible Catégorie à Heure, et dans heure ajouter une PK (Heure,Jour).
>>> les heures n'ont pas toute la même catégorie suivant les jours(ex: 15h le lundi != 15h le samedi).
Je gère les catégorie des 24h pour chaque jour.
Donc en gros au final j'aurais 168 lignes
 
Alors, j'ai 2 questions, comment résoudriez vous ce problème de gestion?
 
et la deuxième, si ma PK contient 2 colonnes dois-je représenter aussi les 2 colonnes pour une clé étrangère?
 
PS: j'ai remplacé "type" par "catégorie", pour eviter les confusions.
 
Ma GROSSE question est : comment gérer les clé étrangère pour une PK à double colonnes?
 
Merci d'avance!

Reply

Marsh Posté le 10-01-2014 à 09:45:23   

Reply

Marsh Posté le 10-01-2014 à 10:38:33    

Pour ma part, si d'un point de vue théorique (Merise), ma clé primaire doit être une compo de plusieurs clés, ben je le fais pas, toutes mes clés primaires sont des ID auto-incrémentés (un entier donc) et je m'en sert comme clé étrangère dans les autres tables. Et pour accélérer les requêtes, je rajoute des index sur les champs identifiés comme servant à la compo de ma clé primaire théorique, quitte à mettre des index type "unique".
 
C'est bien plus simple à gérer et ça marche très bien. D'autant que certains SGBD ne savent pas faire des clés primaires comme des étant des compos de plusieurs champs. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-01-2014 à 10:49:24    

Cette solution me parait acceptable :), c'est dingue il arrive des moments où on cherche absolument à se compliquer la vie pour rien :D!
 
Merci, je suis toujours ouvert si quelqu'un a des idées pour le modèle par contre.


Message édité par eduenss le 10-01-2014 à 10:50:22
Reply

Marsh Posté le 10-01-2014 à 11:54:07    

Pour avoir des idées, faudrait plutôt que tu donnes les règles de gestions. Comme ça, on partira pas sur des idées préconçues déduites de ton actuel MCD ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-01-2014 à 12:29:13    

J'ai eu plus où mois ma réponse ici http://fr.openclassrooms.com/forum [...] e-85106941

Reply

Marsh Posté le 10-01-2014 à 15:18:23    

24*7 = 168 lignes oui et non ...
ta table heures = id, heure, type, rémuneration...  
donc pour une même heure tu peux avoir plusieurs types et de plusieurs rémunérations... (si tu as des échelons de rémunarations différents en fonction de tes intervenants)...
7 jours *24 h* x types * x rémunérations  
c'est donc bien "infini" ...  
en plus ta table heure, c'est bizzard, ne comporte q'une zone heure? tu n'as pas besoin d'une période? HD et HF?
car si j'ai bien vu et lu, tu as amplitude dans une de tes tables, relatives à l'intervention...
 
Comment gères tu les jours fériès?, les heures de nuit de "jours fériés"? (via des types d'heure différents avec des rémunérations différentes?)
Comment gères tu les interventions qui passent d'une tranche horraire de 1 à une tranche horraire de 2?  
ex: ton intervention commence le vendredi à 17h et elle se finit le lundi à 15h?  
Est ce que tu as prévu de gérer des groupes d'intervenant?
 
Pourquoi, ne pas utiliser des champs DH début et DH fin (timestamp)? puis après utiliser les fonctions bien utiles liées de ce type de champs?
date, heure, jour de la semaine...


Message édité par gpl73 le 10-01-2014 à 15:35:48
Reply

Marsh Posté le 10-01-2014 à 16:35:45    

A mon sens, une intervention doit avoir un timestamp de début et de fin. Le calcul de la rémunération de l'intervention en fonction des différentes périodes/catégories... qu'elle couvre relève de la logique métier, en fonction de paramètres définis dans un fichier de conf ou en base.
 
Ex :  
J'ai une intervention qui débute à 17h un vendredi et qui se finit un samedi à 18h -> 1 seule entrée dans la table. Charge à l'appli de découper en période de rémunération différente, par ex :
17h->20h "tarif normal", 20h->24h du vendredi "tarif nuit jour normal, 00h->08h du samedi "tarif nuit jour férié", 08h->18h du samedi "tarif jour férié.
 
Après, si une intervention peut être composé de plusieurs types d'activités, on peut faire une entité au-dessus de la table interventions, (ex : table "prestations" ) qui aura une relation 1-n avec la table "interventions". La table prestations n'aura pas besoin de date début et fin car ça sera la date min de et date max des prestations qui la composent. Après, à des fins d'optimisation ou facilité le requêtage, pourquoi pas ajouter ces 2 champs dans "prestations". Mais tant que tu peux respecter une forme 3NF de ta BD, ça sera pas plus mal ;)


Message édité par rufo le 10-01-2014 à 16:36:20

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 13-01-2014 à 00:08:53    

Ce n'est qu'une esquisse pour le moment,c'est pour ça qu'il manque des données, pour les interventions finalement je n'ai pas à le gérer je dois uniquement faire le compte des heures d'une journée de travail.
 
pour la gestion des heures, j'utilise un identifiant composé jour+heure, je n'ai pas besoin d'autres choses pour gerer le début et fin d'une journée de travail (j'ai la date de début dansla table).
 
Je n'ai finalement pas à calculer la rémunération, je ne gère donc plus la table intervention.
 
ma table heure aura bien 168 lignes, car le but et de calculer automatiquement les heures sans rien avoir a choisir.
une option sera ajouté pour préciser si c'est un jour férié ou autre.
 
Merci de votre intéret, je pense avoir résolu mon problème pour le moment.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed