PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 26-09-2014 11:20:07

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Reflexion sur base de donnée avant programation

Bonjour à toutes et à tous,

Je vais bientôt devoir me lancer dans la programmation d’un système de gestion pour mon  travail.
Je cogite donc préalablement à la vision d’ensemble et à la base de données qu’il me faudra.
Mais je ne suis pas sûr de moi au sujet de la partie liée aux heures effectuées par le personnel.

J’explique ce que je souhaite pour cette partie.
1 projet à plusieurs périodes
1 projet a également plusieurs Work Package (WPs)
Le personnel doit être :
-    rattaché au projet
-    rattaché à un WP
-    rattaché à une période
-    il doit déclarer le nombre d’heures effectués chaque  jour de chaque mois.

voila la modélisation en cours.
je ne pense pas bien procéder pour les mois et les heures et souhaiterais donc votre avis.

https://drive.google.com/file/d/0B0Rb6S … sp=sharing

Merci par avance

Hors ligne

#2 26-09-2014 12:14:48

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Reflexion sur base de donnée avant programation

Bonjour,

Avez-vous voulu faire un MCD ou un MRD? j'en ai aucune idée, bien qu'il semblerait que vous ayez voulu faire un MCD. Sauf que votre modèle semble incohérent à plusieurs titres. Comment justifiez-vous par exemple, une dépendance fonctionnelle de période, de wp ou de projet dans l'entité personne? cela n'a aucun sens.
Je veux bien vous proposer un schéma qui convienne à vos besoins fonctionnels, mais pourriez-vous donner les définitions suivantes:
- Qu'est ce qu'un Work Package et comment se défini-t-il vis-à-vis d'un projet? Peut-on dire par exemple qu'un projet se défini par un ensemble de WP? Merci de détailler.
- Quand vous dites : "il doit déclarer le nombre d’heures effectués chaque  jour de chaque mois." à quoi sont rattachées ces heures de travail? à un work package? à un projet directement? à une autre entité constitutive de votre projet comme une tâche? Admettons qu'il s'agisse d'une tâche, "un personnel" peut-il travailler sur plusieurs tâches une même journée ou que sur une seule pour un jour donnée? Peut-il travailler chaque jour sur une tâche différente?

Merci pour votre retour.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 26-09-2014 12:55:49

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Reflexion sur base de donnée avant programation

Bonjour,

Merci pour votre retour et vos différents commentaires.
j'ai donc bien fait de venir interroger les experts smile

Avez-vous voulu faire un MCD ou un MRD?
euh MCD, je ne connais même pas l'autre.

Explications et schéma d'ensemble:

Admettons un projet X
id_Projet: 1
Titre: Projet X
Date_début: 01/10/2014
Durée: 36 mois
etc.

Ce projet X se segmente en Work-Packages (groupe de taches).
Peut-on dire par exemple qu'un projet se défini par un ensemble de WP? => OUI

Ils ont chacun (par exemple) :
id_WP: 1
leader: P1
titre: WP2
date_début: 01/10/2014
date_fin: 31/10/2015


Parallèlement, un certain nombres de personnes travaillent sur ce projet. Par soucis de reporting, il me faut toutefois avoir au delà du nom de la personne, le ou les WPs auxquels elle aura contribué et le nombre d'heures qu'elle y aura consacré par jour. les justifications des heurs et les déclarations de déplacements (objet du voyage, WP de rattachement, destination, coût) ne seront quant à elle que mensuel

Une personne travaillant sur notre projet X mais peut participer a 1 ou plusieurs WPs sur 1 ou plusieurs périodes du projet.
Chaque jour cette personne pourra donc travailler sur 1 ou plusieurs WPs ou sur aucun du reste.

Exemple!

Bob travaille sur le projet X et participe au WP2 et WP4.
Admettons pour plus de facilité qu'il aura participer à ce projet à hauteur de 15% son temps soit approx: 22.5 heures / mois
Pour encore plus de faciliter admettons qu'il partagé de temps à 50/50 sur les deux WPs soit 11.25h / mois

il faudra donc selon les infos ci dessus déclarer.
BOB sur les WP2 et WP4
exemple; WP4, entre le 01/10/2014 et 31/10/2015, il faudra avoir déclarer pour chaque mois équivalent de 11.25heures réparti sur les jours travaillés (pas les weekends et jour féries). a ces heures, il faudra du reste dans le script php que je puisse enlever les vacances, RTT etc.

Est ce plus clair?

Hors ligne

#4 26-09-2014 14:52:50

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Reflexion sur base de donnée avant programation

Re,

Oui c'est plus clair,

Donc voici un modèle de départ pour ce que vous venez d'exprimer.
Bien qu'il faille faire attention ici car un contrôle d'assertion sera nécessaire pour éviter qu'un utilisateur ne puisse travailler sur un WP avec un rôle qu'il n'a plus au moment où il réalise ce travail. J'ai tenu compte de votre ancien sujet sur la question pour anticiper ici certains besoins. Ici la dépendance entre un WP et un projet n'est pas encore exprimé car un peu tôt pour ce faire.

Merci pour vos commentaires.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#5 26-09-2014 15:05:39

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Reflexion sur base de donnée avant programation

c'est quoi cette manie de drum de préfixer les champs par le nom de la table ???????
je faisais çà y a quelque siècle, mais maintenant, quel intérêt ?

a++

Hors ligne

#6 26-09-2014 15:08:16

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Reflexion sur base de donnée avant programation

@Pierrot : cela évite les homonymies au niveau exploitation et permet d'assurer l'unicité d'une propriété à travers le modèle, pour l'essentiel.

@Darkangel : si tu veux des explications ou s'il y a des choses que tu ne comprends pas, demande wink


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#7 26-09-2014 15:17:13

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Reflexion sur base de donnée avant programation

Merci pour votre retour,

je ne suis pas bien sur de cerner les choses;
1)
La notion de projet est plus qu'essentielle, pas de projet alors pas de WP.
la table Projet est donc par définition la table première de l'ensemble.
Un projet à des WPs
Un projet à des partenaires
Un projet à un annexe technique, un accord réglementaire etc. (ca deviendra ici de la gestion documentaire simple via parcours de dossier)
etc.


2)
Où est passée la notion de période?
cette notion est importante car la période n'est pas corrélée à la durée des WPs.
Un projet à 1 ou plusieurs périodes (dans mon cas, maximum 5)

3) je ne comprends pas trop ici la notion de rôle.
cela correspond il à la fonction de la personne sur le projet?

4) si je prends votre schématisation, et au delà de mes remarques précédentes, j'ai peur de pas comprendre.

les tables de base:
un Work package à une date de début et de fin (table Work Package)
Tout le personnel participant à un projet est indiqué dans table personnel (il faut donc attaché ici l'id Projet je présume) car une personne peut évidemment bosser sur plusieurs projets

les tables liées
c'est là que je suis perdu
1 personne a certes un rôle (si fonction) => en quoi ce rôle à une date de début ou de fin?
faites vous référence au rôle du WP? je suis perdu...

exemple BOB travaillant sur Projet X à la fonction de chargé d'études travaillant sur le WP2 (date_début: 01/10/2014, durée: 12 mois,  date_fin: 31/10/2015)

Hors ligne

#8 26-09-2014 15:40:57

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Reflexion sur base de donnée avant programation

Pour répondre point par point:

1) Votre projet dans son ensemble est une usine à gaz pourrait-on dire à certains égards, et seule la résolution du problème exprimé au départ de ce fil de discussion est modélisée ici. Si cela vous est plus facile, considérez ce modèle comme un sous-modèle du modèle global de votre projet.
Dans le MCD que je viens de vous présenter, ce ne sont pas des tables qui sont représentées mais des entités constitutives de votre modèle et les relations existantes entre elles.

2) La notion de période y est représentée car la 6e forme normale y est modélisée (forme temporelle), et donc la notion d'historique.
M. X peut être leader d'un wp 2 au 5 septembre 2014, et M.Y peut être leader d'un wp du 6 à aujourd'hui. De Même M.Z peut être développeur sur un wp du 2 au 8 septembre sur un wp pendant qu'il contrôle le travail sur un autre wp sur la même période à des heures différentes (et donc avec un rôle différent).

3) L'entité ROLE défini l'ensemble des fonctions où rôles pouvant exister au sein de votre modèle global. WP_ROLE est l'entité représentant l'historique des rôles par WP.

4) l'entité WORK_PACKAGE (et non la table), a une date de fin (supposée prévue et non réelle). Concernant un projet, vous l'avez bien dit il s'agit d'un sur-ensemble de WP. Ce fait ne rends pas incorrect le schéma proposé car une personne travaille sur un WP d'un projet (et sur un projet par extension). C'est le WP sur lequel il travaille qui définira sur quel projet il est. Il y a en effet une dépendance fonctionnelle entre un projet et un WP.

Le modèle proposé permet de contrôler le travail effectué seconde par seconde. Qui peut le plus peut le moins. Connaître la période de travail d'un employé sur un projet se fera avec une simple requête SQL.

++

Dernière modification par Jc (26-09-2014 15:42:04)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#9 26-09-2014 16:00:44

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Reflexion sur base de donnée avant programation

Oula il me falloir digérer cela.
le fait d'avoir plusieurs interconnexions ne peut pas dire que cela est une usine à gaz.
je dois certainement mal m'exprimer afin que vous arriviez à cette conclusion.

je comprends bien que cette schématisation n'est pas la vue d'ensemble et qu'un sous segment là n'est pas le soucis hormis le fait que la notion de projet reste pour moi et mon objectif élémentaire et primordiale.
En effet, je suis pas forcément d'accord avec votre point de vue. Quand vous dites qu'une personne travaillant sur un ou plusieurs WP travaille par extension sur un projet, je ne suis que partiellement d'accord. Car il pourra arriver que des Wps aient plus ou moins les même titres.. et il arrive que des projets quasi similaire se chevauchent également sur les dates. Donc dans ma vision des choses, même si je peux me tromper, la notion de projet est bien la base. C'est parce que le projet X existe que Mr A pourra travailler sur tels ou tels partie (WPs). sans ce projet, ses recherches n'auront pas pu etre entamé faute d'argent etc..


mais ce qui est certain c'est que je ne comprends cette notion d'entité vs table.
En quoi une entité se diffère t'elle d'une table?
dans vos entités, on y voit bien des clés primaires

Votre commentaire indiquerait que vos entités auront dont plus de champs qui n'apparaissent pas.

Connaître la période de travail d'un employé sur un projet se fera avec une simple requête SQL.
il n'est pas ici question de la période de travail d'un employé, enfin oui et non.

Oui => par rapport à ses heures effectués sur tel ou tel WP
Non => pas uniquement, il y a bien une notion de période globale au niveau projet qui régule l'arrivée des financements

Admettons un projet X:
2 périodes de 12 mois pour faire simple
Période 1: Du  01/10/2014  au 31/10/2015
Périodes 2 Du 01/11/2015 au 31/11/2016

admettons également 2 WPs
WP1 du mois 0 au mois 15
WP2 du mois 13 au mois 36

Bob travaille donc sur le WP1 et à la fonction de chargé d'etudes, il travaille à 100% sur 6 mois de la première période.
Dupont ravaille sur le WP2 et le WP1 et à la fonction de controleur, il travaille  sur toute la durée du projet à 30% de son temps soit 45 heures par mois dont 30h sur le WP1 et 15h sur WP2.

le fait de savoir que dupont a travailler sur  WP1 qui s'étale du mois 0 au mois 15 ne donnera pas la période concernée par requête SQL.

Hors ligne

#10 26-09-2014 18:36:57

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Reflexion sur base de donnée avant programation

Bonsoir,

1) Vu que cela vous a perturbé, j'ai rajouté l'entité projet pour que cela aille mieux : Modèle modifié 1a.

2)

Quand vous dites qu'une personne travaillant sur un ou plusieurs WP travaille par extension sur un projet, je ne suis que partiellement d'accord. Car il pourra arriver que des Wps aient plus ou moins les même titres.. et il arrive que des projets quasi similaire se chevauchent également sur les dates.

Attention ici ce que vous dites est dangereux. Un WP n'est pas défini par un titre au même titre qu'une personne n'est pas définie par son nom et son prénom. Vous pouvez avoir deux personnes s'appelant "Francis DUPONT" travaillant sur deux projets différents en même temps.
Un WP ne peut appartenir qu'à un seul projet et un projet peut être constitué de plusieurs WP. Ce qui identifie un WP c'est ici sa clé technique id_wp au même titre que ce qui défini un élément de l'entité personnel, on pourrait l'appeler plutôt employé est son identifiant technique id_personnel.
De plus il n'y a aucune limitation dans le modèle d'ordre chronologique dans la réalisation d'un ou de plusieurs Projets.
Donc pour le moment le modèle reste conforme à vos besoins.

3) Une entité n'est pas une table mais une représentation d'un élément matériel ou immatériel ayant un rôle dans le système que l'on décrit. Une table en général contient un nombre de colonnes >= nombre de propriétés d'une entité et pas l'inverse. Le terme table n'intervient qu'à partir du niveau logique, et fait partie du vocabulaire SQL. Seules les dépendances fonctionnelles ici sont exprimées ou presque au niveau MCD.

4)

le fait de savoir que dupont a travailler sur  WP1 qui s'étale du mois 0 au mois 15 ne donnera pas la période concernée par requête SQL.

"La période concernée" peut s'obtenir par requête SQL, mais on en est pas à ce stade, c'est un peu mettre la charrue avant les bœufs.

++

Dernière modification par Jc (26-09-2014 19:00:14)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#11 27-09-2014 21:14:37

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Reflexion sur base de donnée avant programation

>>@Pierrot : cela évite les homonymies au niveau exploitation et permet d'assurer l'unicité d'une propriété à travers le modèle, pour l'essentiel.
j'ai pas compris là roll

nomDeTable.NomDeChamp et tout est évité wink

a++

Hors ligne

#12 27-09-2014 22:01:58

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Reflexion sur base de donnée avant programation

@Pierrot : SELECT t0.id, t1.xyz, t2.xyz, t0.name, t1.name, t2.name  FROM table1 AS t0 LEFT JOIN table2 AS t1 on t0.id=t1.id LEFT JOIN table3 AS t2 ON t0.id=t2.id 
et ça commence déjà à être le début de la fin... mais bon il me semble que tu fais tout en php non?

Dernière modification par Jc (27-09-2014 22:02:30)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#13 29-09-2014 10:03:55

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Reflexion sur base de donnée avant programation

Bonjour JC,

Je ne vais pas rentrer dans votre débat d'expert entre Pierrot et toi smile
Je vous laisse débattre selon vos expériences respectives.

1) Merci d'avoir ajouter l'entité Projet.
2) Vous avez parfaitement raison ce sont les id des lignes qui permette l'identification.
3) cela reste un petit peu abstrait à mes yeux. Mais si je comprends bien le fait de faire une architecture MCD ne donne donc pas la schématisation de sa base de donnée mais seulement une schématisation des entités du système.

A mon niveau cela complique encore plus les choses j'ai peur.
Quel intérêt au final hormis pour de gros projets difficile à définir? le fait de schématiser la base de donnée en direct ne permet elle pas une lisibilité plus simple? je n'ai aucune envie de remettre en cause votre avis sur la chose mais j'ai jute l'impression que cela complique un peu plus la mise en place de l'architecture.

mais bon je vais tenter de prendre en compte votre vision et de me perfectionner smile
Si je prends votre nouvelle modélisation d'entité.

nous avons donc 1 projet représenté par l’entité Projet.
Celle ci au niveau base de donnée comprendra entre autre.
-l'id projet
-Le titre projet.
-l'acronyme projet
-la durée initiale
-la date de début
-la date de fin théorique
-la durée de prolongation si besoin
-la date de fin réelle (date initiale + prolongation)


Ce projet est constitué de WP représente également par l'entité Work Package
Celle ci au niveau base de donnée comprendra entre autre
- L'id du projet auquel ce WP est rattaché
- L'id du WP en question
- un titre
- sa date de début
- sa date de fin
- on pourrait admettre un potentielle prolongation à ce niveau également donc je rajoute
- prolongation
-date fin réelle

C'est à ce niveau que les choses se compliquent pour moi.

Un certain nombre de personnes vont travailler sur un ou plusieurs WP du projet mais pouvant également participer à plusieurs projets il faut créer une entité intermédiaire.

Nous avons donc une entité personnes.
Celle ci au niveau base de donnée comprendra entre autre
- l'id de la personne
- son nom
- son prenom
- son login de connexion
- son mot de passe crypté
- son  adresse mail


Viens alors l'entité intermédiaire à une personne et un WP.
C'est au sein de cette entité que l'on va pouvoir indiquer une fonction / un rôle pour cette personne sur un WP d'un projet.
Celle ci au niveau base de donnée comprendra entre autre (c'est une table de liaison n:m n'est ce pas?)
-l'id du WP
- l'id de la personne ( a priori ici p.id) mais je ne savais pas que l'on pouvait renommer les clés si c'est bien cela
- l'id du rôle

A ce point une question: A quoi cela sert il d'avoir une autre entité / table Roles./ il y aura certainement des roles récurrents mais pourquoi créer une table distinctes?
- la date début de son intervention
-L'idée du WP role
-la date de fin de son intervention


A ce stade on parle en jours en mois en année ou directement en heures?
je ne comprends pas la distinction entre l'entité WP Role et la WP travail.
La WP role définit déja le début et la fin d'une personne pourtant cela se redéfini dans WP travail.
comment puis je distinguer les deux?

Il faut rester réaliste, il arrive que certaines personnes ne déclarent pas les heures par jour , il faudra faire donc un calcul de répartition en fin de période..

Enfin, je ne cerne pas bien où se trouve la notion de période projet.
je ne parle pas de la période de travail de telle ou telle personne mais de la période projet (financement)

Dernière modification par Darkangel (29-09-2014 12:53:22)

Hors ligne

#14 29-09-2014 13:21:38

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Reflexion sur base de donnée avant programation

Je pense qu'il est important de clarifier les choses sur ce que vous venez de dire, c'est trop important pour les laisser passer surtout sur un site de débutants comme PHP débutants et même si ce que l'on fait ici sort du contexte PHP et du monde de débutants.


cela reste un petit peu abstrait à mes yeux. Mais si je comprends bien le fait de faire une architecture MCD ne donne donc pas la schématisation de sa base de donnée mais seulement une schématisation des entités du système.

Ceci est inexact dans le sens ou le MCD reste la schématisation de sa base de données mais au niveau conceptuel. Le MCD (Modèle Conceptuel de données) est la schématisation de sa base de données au niveau conceptuel contrairement au MLD (Modèle Logique Données) et enfin au MRD (Modèle Relationnel données). Je vous laisse lire ceci : Transformation MCD -> MLD/MRD qui restent des informations de base à connaître. Après d'autres notions seront à implémenter en fonction du SGBDR choisi notamment lors de la transcription de l'héritage, des exclusions, des contrôles d'assertion, etc...
Un des points important donc : Le MCD fait abstraction de tout moteur SGBDR et de toutes ses particularités.


1 projet représenté par l’entité Projet.
Celle ci au niveau base de donnée comprendra entre autre.
-l'id projet
-Le titre projet.
-l'acronyme projet
-la durée initiale
-la date de début
-la date de fin théorique
-la durée de prolongation si besoin
-la date de fin réelle (date initiale + prolongation)

l'id projet : ok;
Le titre du projet : ok sauf s'il est envisagé de définir une application internationalisée.
L'acronyme du projet : ok
la date de début : ok.
la date de fin théorique : ok.

Ensuite pour la durée initiale, la durée de prolongation, la date de fin réelle, je dirais attention car :
Ce sont des informations déjà présentes dans le modèle et qui pourront être extraites via requête. Ainsi les "remettre" dans la futur table projet, va consister à la dénormaliser (l'atomicité des données et donc la première et la deuxième forme normale ne seront plus respectées). Ce choix devra donc être pris le plus tard possible en fonction des besoins de production. La date de fin réelle sera la plus légitime car elle peut éviter de refaire plusieurs fois les calculs. Si toutefois on souhaite ne pas polluer le modèle par ce genre d'information dénormalisante, il pourra être judicieux de créer une table d'archive de projet qui elle stockera toutes ces informations car elles n'auront pas à être modifiées dans le temps, et qui permettra d'avoir toutes les informations clés d'un projet par une simple lecture de la table. On pourrait même créer un nouveau schéma dans la base de données à cette fin d'archivage d'information, schéma alors utilisé en lecture seule et placé sur des unités disques spécifiques et optimisés pour ce genre d'accès.

Pour les WPs il en va de même.
La date de fin, comme je l'ai dit est ici censée être théorique (celle prévue initialement). Cela permet de conserver la normalisation, car elle permettra de connaître la prolongation en faisant une comparaison avec la durée totale de travail sur ce WP dans la future table wp_travail.
En ce qui concerne la date de fin réelle d'un WP, je dirais par expérience qu'elle n'a pas sa raison d'être ici. (Cela n'engage que moi). Si toutefois vous souhaitez la mettre, n'oubliez pas la considération précédente faite pour les projets.

- l'id de la personne ( a priori ici p.id) mais je ne savais pas que l'on pouvait renommer les clés si c'est bien cela

Attention : l'id de la personne n'est pas p.id mais "p_id". Le renommage était au niveau SQL avec l'utilisation d'Alias donc rien à voir avec notre MCD.

A ce point une question: A quoi cela sert il d'avoir une autre entité / table Roles./ il y aura certainement des roles récurrents mais pourquoi créer une table distinctes?

Pour préserver la normalisation. D'un côté nous avons l'entité qui défini les rôles pouvant exister au sein du modèle, et de l'autre l'historisation des rôles exercés par WP dans le temps en fonction de l'entité PERSONNEL.

Nous avons donc une entité personnes.
Celle ci au niveau base de donnée comprendra entre autre
- l'id de la personne
- son nom
- son prenom
- son login de connexion
- son mot de passe crypté
- son  adresse mail

Oui mais cela reste encore à définir et ne faisait pas partie du post initial. Si un historique doit être géré au niveau des accès avec login/mot de passe alors son login/mot de passe doit être absent de l'entité PERSONNE. (une entité est toujours au singulier). Pour l'adresse email elle pourra rester dans l'entité PERSONNE, car elle peut être dans l'absolu, différente de celle de connexion si elle est utilisée dans le cadre de la récupération d'un mot de passe perdu notamment.

Un certain nombre de personnes vont travailler sur un ou plusieurs WP du projet mais pouvant également participer à plusieurs projets il faut créer une entité intermédiaire.

C'est déjà fait, pas besoin d'en rajouter encore une ici.

A ce stade on parle en jours en mois en année ou directement en heures?

Rien de tout cela. On stocke ici l'information sous forme de date et heure (YYYY-mm-dd hh:mm:ss) pour le début et la fin.
Il ne s'agit que de relever l'information, on n'effectue aucun calcul ici. On réserve cela à plus tard aux VUES SQL.

je ne comprends pas la distinction entre l'entité WP Role et la WP travail.
La WP role définit déja le début et la fin d'une personne pourtant cela se redéfini dans WP travail.

Dans WP_ROLE, on exprime par exemple que M.X est déclaré/défini sur le WP n°123 comme contrôleur du 2 au 10 septembre 2014
Dans WP_TRAVAIL, on exprime par exemple que M.X, à travaillé sur ce même WP en tant que contrôleur le 3 septembre de midi à 18h et le 5 septembre de 15h à 18h.

Il faut rester réaliste, il arrive que certaines personnes ne déclarent pas les heures par jour , il faudra faire donc un calcul de répartition en fin de période..

Ceci est un problème et peut remettre en cause le modèle que je vous ai proposé.
En effet, le modèle proposé permet de gérer exactement et donc précisément le temps de travail de chaque employé sur tous les projets. Si c'est un besoin et donc une contrainte d'exploitation essentielle pour l'entreprise, il faudra vous donner les moyens de la faire respecter sur le terrain (avec système de pointage si nécessaire).
Si le temps passé l'est à travers l'informatique, il peut y avoir des moyens détournés de récupérer cette information en temps réel sans la demander aux employés. Si c'est hors informatique (chantier BTP par exemple), il faudra obliger à ce que les employés consignent leur temps de travail (heure de début et de fin).

Si des heures ne sont pas déclarées, les calculs sur le temps passé seront faux et les coûts de revient par projet, deviendront estimatifs et non réels. A vous d'assumer vos choix, ou du moins à ceux qui vont utiliser votre système.

A vous de me dire ce que vous décidez à ce niveau.

++

Dernière modification par Jc (29-09-2014 13:24:03)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#15 29-09-2014 14:21:23

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Reflexion sur base de donnée avant programation

Bonjour Jc,

Merci pour votre retour.
Je prends effectivement le temps de clarifier les choses avant de me lancer.

J'ai tout d'abord lu la présentation de votre lien.
Je comprends déjà plus les niveaux d'architecture, mais la dernière indication me conforte:
Toute entité devient une table dans laquelle les attributs deviennent les colonnes.

Cela confirme bien ce que vous dites, à savoir que le MCD reste la schématisation de sa base de données


Le titre du projet : ok sauf s'il est envisagé de définir une application internationalisée.

Est ce bien à un changement de nom de projet auquel vous faites référence?
Si oui, même dans le cadre de projet à l'international, enfin dans mon domaine, la langue de référence est l'anglais et de fait le titre du projet restera en anglais pour tous les pays.


Ce sont des informations déjà présentes dans le modèle et qui pourront être extraites via requête. Ainsi les "remettre" dans la futur table projet, va consister à la dénormaliser (l'atomicité des données et donc la première et la deuxième forme normale ne seront plus respectées). Ce choix devra donc être pris le plus tard possible en fonction des besoins de production. La date de fin réelle sera la plus légitime car elle peut éviter de refaire plusieurs fois les calculs. Si toutefois on souhaite ne pas polluer le modèle par ce genre d'information dénormalisante, il pourra être judicieux de créer une table d'archive de projet qui elle stockera toutes ces informations car elles n'auront pas à être modifiées dans le temps, et qui permettra d'avoir toutes les informations clés d'un projet par une simple lecture de la table. On pourrait même créer un nouveau schéma dans la base de données à cette fin d'archivage d'information, schéma alors utilisé en lecture seule et placé sur des unités disques spécifiques et optimisés pour ce genre d'accès.

a ma connaissance et selon ma compréhension de votre schéma, il est bien question de prolongation au niveau des WP mais dans 90% des cas que je rencontre la notion d'extension est lié au projet dans son ensemble et donc à tous les Wps. Il arrive cependant que seul certain WP soit effectivement concerné dans les 10% de cas restants. mais dans le système mis en place il faudrait donc dans ce cas modifier tous les WP du dit projet et indiquer une extension de x.

En ce qui concerne votre remarque sur la normalisation des données, je vous fait confiance sur la chose car je ne maîtrise pas cela.
La date de fin réelle est effectivement ce dont j'ai besoin et ne s'applique qu'une fois.  Il ne m'est jamais arrivé d'avoir deux prolongations successives.
mais si j'envisageais le cas comme vous le soulignez ( table d'archive)  il suffirait en théorie d créer une table extension rattache a la table projet avec l'historique des extensions et les dates de fin réelles calculées en conséquence non? mais il s’avérerait que cette table devra etre modifiable du coup...

Pour les WPs il en va de même.
La date de fin, comme je l'ai dit est ici censée être théorique (celle prévue initialement). Cela permet de conserver la normalisation, car elle permettra de connaître la prolongation en faisant une comparaison avec la durée totale de travail sur ce WP dans la future table wp_travail.
En ce qui concerne la date de fin réelle d'un WP, je dirais par expérience qu'elle n'a pas sa raison d'être ici. (Cela n'engage que moi). Si toutefois vous souhaitez la mettre, n'oubliez pas la considération précédente faite pour les projets.

la date de fin d'un WP ou d'un projet n'a rien de théorique enfin dans mon domaine. cela est réglementé et fixe sauf si prolongation.
iil y a donc effectivement une date réelle de début et une date de fin fixe qui peut se modifier si extension accordée mais les deux dates en questions ont besoins d’être connu.
Dans mon domaine le travail doit être effectué dans la période indiquée car au delà les dépenses ne sont plus éligibles.


Pour préserver la normalisation. D'un côté nous avons l'entité qui défini les rôles pouvant exister au sein du modèle, et de l'autre l'historisation des rôles exercés par WP dans le temps en fonction de l'entité PERSONNEL.

je ne cerne pas trop cette notion de normalisation comme souligner précédemment mais ok pourquoi pas.
si je comprends bien cela:

admettons 2 personnes.
Dupont (chargé d'études)
Pierrot (data manager)

le champ dupont sera enregistré dans la table personnel
chargé d’étude sera enregistré dans role.
l'association des deux dans le cadre d'un projet se fera dans la table intermédiaire WP: Role.
mais alors cela engendre un problème futur que je je souligne dès maintenant.
Cela obligera a terme de vérifier si le rôle existe ou non dans la base role avant de créer l'association.
Au vue de la multitude de fonction que cela peut couvrir bien que 90% soient récurrentes je l'admet cela alourdira il me semble la recherche.

Oui mais cela reste encore à définir et ne faisait pas partie du post initial. Si un historique doit être géré au niveau des accès avec login/mot de passe alors son login/mot de passe doit être absent de l'entité PERSONNE. (une entité est toujours au singulier). Pour l'adresse email elle pourra rester dans l'entité PERSONNE, car elle peut être dans l'absolu, différente de celle de connexion si elle est utilisée dans le cadre de la récupération d'un mot de passe perdu notamment.

aucun historique d'accès n'est réellement nécessaire mais bon pourquoi pas dans l'absolu. dans le post initial je ne faisais partie qu'a une partie du projet  dans sa globalité. Ok pour séparer la notion de connexion de la table personne en vue d'envisager un système d'accès plus pertinent.


Rien de tout cela. On stocke ici l'information sous forme de date et heure (YYYY-mm-dd hh:mm:ss) pour le début et la fin.
Il ne s'agit que de relever l'information, on n'effectue aucun calcul ici. On réserve cela à plus tard aux VUES SQL.

ok je suis d'accord avec vous pour les calculs via sql.

Dans WP_ROLE, on exprime par exemple que M.X est déclaré/défini sur le WP n°123 comme contrôleur du 2 au 10 septembre 2014
Dans WP_TRAVAIL, on exprime par exemple que M.X, à travaillé sur ce même WP en tant que contrôleur le 3 septembre de midi à 18h et le 5 septembre de 15h à 18h.

je ne suis pas sur de bien comprendre.
si on définit dans Role que Mr X à bossé comme contrôleur du 2 au 10 pourquoi reprendre une autre fonction dans une autre table?
pourquoi selon votre schématisation ne pas mettre les 2 infos dans wp role directement?
sauf si on considère d’après ma deuxième lecture de la chose que la table travail serait le détail d'activités et la table rôle juste une date de début et de fin d'intervention et donc la période du WP en référence?

Ceci est un problème et peut remettre en cause le modèle que je vous ai proposé.

je suis parfaitement d'accord avec votre point de vue et c'est pourquoi j'ai souligné ce point dès maintenant.
c'est un point assez compliqué.

Deux approches à ce point et en vue de répondre à cette problématique que je rencontre déjà.
-
si Mr X complète ses heures régulièrement dans ce futur système alors ok pas de soucis. Même s'il complète cela chaque semaine cela ne posera pas de problème.
Encore faut il envisager au niveau sql /php que la personne pourra style indiquer 15h consacré sur WP1 sur 3 jours dans la semaine donc 5heures par jours à enregistrés dans la base automatiquement mais cela s’avérera encore le cas simple

- bien malgré moi et toute une équipe, le personnel ne suit bien évidemment pas toujours les règles...
très et trop difficile de pouvoir les inciter à le faire car déjà bien surchargé.

il arrive assez souvent que les personnes en question nous déclare un % de temps effectué sur le projet et la période concernée correspondant plus ou moins à la réalité. cela vaut dans les deux sens: temps complètement dépasser ou travail réalisé en moins de temps que prévu.

C'st un principe admis par les hautes autorités dans la plupart des pays.

Tout ça pour dire que dans certains cas il arrive que la personne n'a rien déclarer. Alors il nous faut composer d'après l'estimatif.
budget de 160k€ estimatif pour un data manager sur tant de temps.
On décompose ce montant en fonction de la durée de la période , de son % de temps déclarer et on constitue les feuilles d'heures justificatives comme cela.
salaire de l'année * heures déclarées = salaire éligible . encore faut il pouvoir le justifier par des résultats

il me faut pouvoir composer selon ces 2 réalités..

Hors ligne

#16 29-09-2014 15:22:39

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Reflexion sur base de donnée avant programation

Bonjour,

- Ok pour ne pas internationaliser (gérer plusieurs langues) l'application. Donc tout sera en Anglais.

il est bien question de prolongation au niveau des WP mais dans 90% des cas que je rencontre la notion d'extension est lié au projet dans son ensemble et donc à tous les Wps.

Merci de clarifier et de détailler cette gestion d'extension de durée de projet.

Il ne m'est jamais arrivé d'avoir deux prolongations successives.
mais si j'envisageais le cas comme vous le soulignez ( table d'archive)  il suffirait en théorie d créer une table extension rattache a la table projet avec l'historique des extensions et les dates de fin réelles calculées en conséquence non? mais il s’avérerait que cette table devra etre modifiable du coup...

Tout d'abord, veuillez m'excuser pour mon abus de langage quand j'ai dit "lecture seule" ce n'est jamais le cas en pratique mais il s'agit en fait d'un contexte, où les lectures sont majoritaires et optimisées prioritairement aux écritures (par exemple 80%/20%).

Dans mon domaine le travail doit être effectué dans la période indiquée car au delà les dépenses ne sont plus éligibles.

Ce critère est essentiel est majeur car il constitue à la fois une règle de gestion et de validation métier. Donc oui si tel est le cas la date de fin fixe devient parfaitement légitime et prends tout son sens. Du coup il peut être en effet judicieux de mettre en place une entité WP_EXTENSION pour gérer ces extensions au sein du modèle, et d'autant plus, dans un contexte de gestion de workflow.

Cela obligera a terme de vérifier si le rôle existe ou non dans la base role avant de créer l'association.

Oui vous avez raison.

Au vue de la multitude de fonction que cela peut couvrir bien que 90% soient récurrentes je l'admet cela alourdira il me semble la recherche.

Pas de récurrence ici, cette entité constituera dans le modèle relationnel une table de référence (paramétrage) qui ne contient aucun doublon. Cela n'alourdira aucunement la recherche, si cela peut vous rassurer.

si on définit dans Role que Mr X à bossé comme contrôleur du 2 au 10 pourquoi reprendre une autre fonction dans une autre table?
pourquoi selon votre schématisation ne pas mettre les 2 infos dans wp role directement?
sauf si on considère d’après ma deuxième lecture de la chose que la table travail serait le détail d'activités et la table rôle juste une date de début et de fin d'intervention et donc la période du WP en référence?

C'est votre 2e lecture qui est la bonne, sauf qu'ici le modèle n'est pas spécifique à une date de début et de fin d'intervention GLOBALE, mais elle autorise la journalisation de l'information car il s'agit d'un historique. Vous pouvez vous en servir toutefois dans le mode qui vous conviendra le mieux.
Ensuite pour répondre au pourquoi de votre première lecture: Il est important que votre SGBDR connaisse à un instant T, qui travaille sur quoi et où, surtout dans un contexte où la gestion de workflows (processus transverses) peut intervenir au sein de votre SI. Toujours dans votre première lecture le terme "bosse" est faux au premier degré du mot. On sait qui fait quoi au sein d'un WP et donc par extension au sein d'un projet à un instant T, permettant de faire une carte du personnel de l'entreprise et de leur fonction au sein de son organigramme (directeur de projet, chef de projet, chef d'équipe, etc...) mais cette entité ne renseigne en rien sur les heures de travail de ces personnes à leurs postes respectifs.

Tout ça pour dire que dans certains cas il arrive que la personne n'a rien déclarer.

Pour éviter ce genre de problèmes, le planning de gestion du personnel peut servir à cela: pour un jour donné, M.X travaille sur tel poste à faire telle tâche et pas une autre. Ainsi il est plus aisé de savoir qui fait quoi pendant combien de temps. Reste à gérer les transitions de tâche "j'ai terminé telle tâche et commencé la tâche suivante en fin de journée (env.2h)".. Après c'est à l'entreprise de s'adapter.

Question que faites-vous de ce temps travaillé en plus et qui est considéré comme non éligible? comment doit-il être traité?

Merci.

Dernière modification par Jc (29-09-2014 15:23:51)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#17 29-09-2014 15:31:19

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Reflexion sur base de donnée avant programation

Pour vous donner une idée d'exemple de journalisation de travail effectué (travail pointé)

Extrait d'un post issu de PHP débutant dont voici l'extrait qui nous interesse: (MySQL)

Voici un exemple de modélisation partielle (attention il peut ne pas être adapté à certaines contraintes)

Table WORK_TIMES (A voir comme un log des temps de travail)
id                    INT UNSIGNED NOT NULL AUTO_INCREMENT (PK)
employee_id    INT UNSIGNED NOT NULL  (ajouter un index)
intervention_id INT UNSIGNED NOT NULL  (ajouter un index)
work_start       DATETIME NOT NULL
work_end        DATETIME NOT NULL

Après cela peut se construire différemment selon les besoins. Disons juste que l'aspect de la gestion des temps de travail sous forme de log est minimaliste, performant et suffisant sur ce point. Pour avoir le temps total travaillé par employé et par intervention il suffit de faire un regroupement par employee_id et intervention_id et de calculer SUM((UNIX_TIMESTAMP(work_end)-UNIX_TIMESTAMP(work_start))/1200) pour avoir le nombre d'heures totales travaillées par cet employé sur l'intervention choisie.

NB: Ce genre de système peut s'interfacer très simplement avec un système de pointage de surcroit wink et il te permet de garder la souplesse que tu peux avoir besoin pour sortir n'importe quelle stat sur le temps travaillé pour un employé donné.

Dernière modification par Jc (29-09-2014 15:50:56)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#18 29-09-2014 15:52:44

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Reflexion sur base de donnée avant programation

Re bonjour,

Ok pour ne pas internationaliser (gérer plusieurs langues) l'application. Donc tout sera en Anglais.

clarifions les choses à ce niveau.
il n'est pas nécessaire d'internationaliser les éléments de la base.
l'application en tant que telle pourra quant elle être en français et en anglais mais cela se fait très bien via php et le détection de la langue utilisée ou choisie

Merci de clarifier et de détailler cette gestion d'extension de durée de projet.

Deux choses à distinguer.
il y a le projet avec une date de début et une date de fin théorique ou réelle
et il y a les Wps avec également une date de début et une date de fin théorique.

dans le cas d'une extension et comme je le soulignais précédemment il peut y avoir deux cas.
majoritairement: le projet dans son ensemble est prolongé de disons 6 mois ou 1 an et que les coûts deviennent donc éligibles pour tout le projet et durant cette extension.

Dans l'autre cas, beaucoup moins fréquent, seulement le WPx est allongé mais pas tout le projet ce qui signifie que seul les dépenses liées aux activités de ce WP seront encore éligibles.

mais votre schématisation semble répondre à ces deux possibilités car si on indique la durée au travers des WP directement, mais il faudra donc aller récupérer la date la plus lointaine d'un des WP ou connaitre la date de fin réelle... pas très pratique en soi . mais je ne vois pas comment optimiser a part d'indiquer dans la table projet si extension lié au projet ou au wp et procéder via les deux techniques en parallèle..
mais pas très catholique pour un expert comme vous je présume...

Tout d'abord, veuillez m'excuser pour mon abus de langage quand j'ai dit "lecture seule" ce n'est jamais le cas en pratique mais il s'agit en fait d'un contexte, où les lectures sont majoritaires et optimisées prioritairement aux écritures (par exemple 80%/20%).

oullala pas besoin de vous excuser, c'est moi la personne qui doit se perfectionner...
mais ok smile

Ce critère est essentiel est majeur car il constitue à la fois une règle de gestion et de validation métier. Donc oui si tel est le cas la date de fin fixe devient parfaitement légitime et prends tout son sens. Du coup il peut être en effet judicieux de mettre en place une entité WP_EXTENSION pour gérer ces extensions au sein du modèle, et d'autant plus, dans un contexte de gestion de workflow.

oui date de période = éligibilité des coûts. donc ok avec votre analyse.
reste a distinguer par rapport au premier point si on fonctionne par extension projet vs extension WP ou les deux ...

Pas de récurrence ici, cette entité constituera dans le modèle relationnel une table de référence (paramétrage) qui ne contient aucun doublon. Cela n'alourdira aucunement la recherche, si cela peut vous rassurer.

euh ?? table de paramétrage je peux comprendre sous réserve que cela corresponds bien à l'enregistrement de toutes les fonctions possibles de tous les projets...


C'est votre 2e lecture qui est la bonne, sauf qu'ici le modèle n'est pas spécifique à une date de début et de fin d'intervention GLOBALE, mais elle autorise la journalisation de l'information car il s'agit d'un historique. Vous pouvez vous en servir toutefois dans le mode qui vous conviendra le mieux.
Ensuite pour répondre au pourquoi de votre première lecture: Il est important que votre SGBDR connaisse à un instant T, qui travaille sur quoi et où, surtout dans un contexte où la gestion de workflows (processus transverses) peut intervenir au sein de votre SI. Toujours dans votre première lecture le terme "bosse" est faux au premier degré du mot. On sait qui fait quoi au sein d'un WP et donc par extension au sein d'un projet à un instant T, permettant de faire une carte du personnel de l'entreprise et de leur fonction au sein de son organigramme (directeur de projet, chef de projet, chef d'équipe, etc...) mais cette entité ne renseigne en rien sur les heures de travail de ces personnes à leurs postes respectifs.

j'ai donc bien fait de me relire avant de poster smile
mais de ce fait et dans votre modèle pourquoi indiquer cela dans les deux entités?
mais ok pour la journalisation et l'aspect d'historique. c'est juste que je ne cerne pas l'utilisé d'avoir ce que je perçois comme un doublon
oui bien vu, je suis parfaitement d'accord avec votre analyse.


Pour éviter ce genre de problèmes, le planning de gestion du personnel peut servir à cela: pour un jour donné, M.X travaille sur tel poste à faire telle tâche et pas une autre. Ainsi il est plus aisé de savoir qui fait quoi pendant combien de temps. Reste à gérer les transitions de tâche "j'ai terminé telle tâche et commencé la tâche suivante en fin de journée (env.2h)".. Après c'est à l'entreprise de s'adapter.
Question que faites-vous de ce temps travaillé en plus et qui est considéré comme non éligible? comment doit-il être traité?

C'est là toute la complexité de la chose. je travaille dans le domaine de la santé et leurs activités sur le projet sont très très variables.
c'est pourquoi j'insiste sur le besoin de devoir articuler les choses dans les deux sens tel qu'indiqué dans mon précédent post.
le personnel doit bien évidemment indiquer sur quelles taches il y a travailles mais travaillant sur plusieurs et parfois en parallèle, leur imposer un tel système serait parfaitement utopiste.

je ne pensais pas aller aussi loin dans l'application en tant que telle.
j'envisageais plus tôt au vue de mon niveau de me limiter aux seuls enregistrements des heures
avec le compte rendu donné par la machine une adéquation coût personnel / horaires était plus aisé
mais bon plus je cogite avec vous de la mise en place au global et si je ne peux adapter les choses au fur et a mesure, il va réellement falloir que je présente les choses plus largement (au dela des services annexes, il faudrait prévoir qu'un projet à des membres  (coordinateur ou partenaires ou sous contractants d'un partenaire ou meme tierce partie d'un partenaire. Chacun travaillant sur une tache du projet. mais cela n'aurait qu'un aspect consultatif interne, pas question de gérer les feuille d'heures de tous les membres d'un projet.. aucun utilité.  la seule notion serait par exemple de suivre l'avancement des WP si nous étions coordinateur.

Question que faites-vous de ce temps travaillé en plus et qui est considéré comme non éligible? comment doit-il être traité?

c'est une perte mais qui est couvert par les coûts indirects (coût d'un projet pour lesquels aucunes justifications n'est demandé) mais c'est justement une chose que l'on évite et c'est pourquoi des feuilles d'heures s'impose.

Hors ligne

#19 29-09-2014 15:55:42

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Reflexion sur base de donnée avant programation

merci pour votre partage de scripts.
me parait bien mais quelque peu minimaliste car une notion n'a pas été abordé.
prenons un calendrier et un mois concerné. Il faut pouvoir générer un calendrier du mois avec les jours travaillés en omettant bien évidemment de déclarer quelqu’un les weekends ou pendant ses congés par exemple..

Hors ligne

#20 29-09-2014 16:51:14

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Reflexion sur base de donnée avant programation

l'application en tant que telle pourra quant elle être en français et en anglais mais cela se fait très bien via php et le détection de la langue utilisée ou choisie

Désolé mais php ne fait pas non plus le café.... Si votre base de données n'est gérée qu'en Anglais, et que l'on prends par exemple la description d'un code de facturation en anglais, php ne sera pas le traduire seul s'il doit afficher cette explication en Français.... Le code langue de l'affichage doit à ce moment être transmis à la base de données qui elle sera le prendre en compte et restituer l'information dans la langue souhaitée.

En ce qui concerne les extensions
Votre base de données doit savoir différencier un temps de travail éligible d'un non éligible, sinon vous ne serez pas capable de différencier cette information au sein de votre application.

mais votre schématisation semble répondre à ces deux possibilités car si on indique la durée au travers des WP directement...

En l'état actuel du modèle la réponse est NON.
Pour répondre à cette problématique, je vais supposer d'abord, que seuls un ou plusieurs profils particuliers au sein de votre modèle sont autorisés à déclarer officiellement une extension de validité de projet. Les droits d'une telle action sont donc normalement très spécifiques et une telle entité PROJET_WORK_EXT doit être modélisé pour cela. Reste à définir ses dépendances et ses règles de gestion/validation pour la modéliser correctement.

En ce qui concerne la partie extension WP.
La façon de modéliser ici va dépendre des choix de gestion de l'entreprise. Voici des exemples possibles dans ce choix de gestion (qui induisent chacune une implémentation dans le modèle distincte):
On contrôle au niveau de l'application si la déclaration d'une nouvelle période de travail s'inscrit dans une durée éligible. Si ce n'est pas le cas :
- soit on décide que l'application autorise toute nouvelle déclaration et considère par défaut cette nouvelle déclaration comme non éligible. Et à ce moment il faudra qu'une personne autorisée puisse changer le statut d'une telle déclaration en éligible ultérieurement.
- soit on décide que l'application interdit toute nouvelle saisie de période de travail et c'est la personne avec les droits suffisants qui devra intégrer dans le système chaque nouvelle déclaration avec le statut éligible ou non.
- Soit on met en place un système identique aux extensions de projet pour les extensions de WP. Cette extension devra être effectuée par la personne autorisée préalablement à la saisie de toute nouvelle déclaration de travail.

il va réellement falloir que je présente les choses plus largement (au dela des services annexes, il faudrait prévoir qu'un projet à des membres  (coordinateur ou partenaires ou sous contractants d'un partenaire ou meme tierce partie d'un partenaire. Chacun travaillant sur une tache du projet. mais cela n'aurait qu'un aspect consultatif interne, pas question de gérer les feuille d'heures de tous les membres d'un projet.. aucune utilité.  la seule notion serait par exemple de suivre l'avancement des WP si nous étions coordinateur.

Je confirme cette nécessité et de détailler le contexte de gestion et de consultation.

Dernière modification par Jc (29-09-2014 16:52:56)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#21 30-09-2014 08:45:46

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Reflexion sur base de donnée avant programation

Bonjour JC,

Merci pour votre retour.
Tout d'abord ne serait il pas plus pertinent de voir cela via un autre moyen que le forum?
J'ai peur de polluer un peu avec une demande extérieur au codage pur pour le moment..


question de langues:
Je ne pense pas m’être correctement exprimé.
Je sais bien que le php ne fait pas tout. je faisais référence aux vues renvoyées par php.
exemple menu de la page / présentations etc.. nous n'allons pas stocker cela dans la base mais bien dans des variables php non?
dans de petits sites anciens que j'avais fait, la traduction se faisait bien par php.

exemple


define('TXT_MENU_ACCEUIL', 'Accueil');
define('TXT_MENU_ACCEUIL', 'Startseite');
 

En ce qui concerne ensuite ce que j'appellerai le back office, tout pourra être en anglais..
Toutes les données projets sont en anglais...

En ce qui concerne les extensions et pour répondre à votre question:

Il n'est pas nécessaire de se compliquer autant la vie.
Un temps de travail est éligible si celui ci est réalisé pendant la période du projet et pendant la période de son WP de surcroît.
Comptabiliser le temps non éligible ne m'est pas nécessaire.
Dans le pire des cas, même si une personne faisait une déclaration bidon d'heures cela s’avérait inutile car non proportionnel au coût de personnel déclaré en amont de négociation du contrat et basé sur les ressources RH. aussi et en fonction des remontées de nos contrôleurs financiers, je devrai adapter moi même leurs déclarations d'heures pour les rendre adéquat. Obligatoire si un audit venait à nous tomber dessus.

Aussi la base sera différencier si travail éligible ou non!
admettons une période de 1 an.
1 janvier 2014 au 31/12/2014. si la personne déclare 5% de son temps sur 1 an et 1 mois le système lui refusera le mois en dehors de la période.
En même temps le système ne lui proposera même pas dans ma vision des choses.


Pour répondre à cette problématique, je vais supposer d'abord, que seuls un ou plusieurs profils particuliers au sein de votre modèle sont autorisés à déclarer officiellement une extension de validité de projet. Les droits d'une telle action sont donc normalement très spécifiques et une telle entité PROJET_WORK_EXT doit être modélisé pour cela. Reste à définir ses dépendances et ses règles de gestion/validation pour la modéliser correctement.

La seule personne habilitée à déclarer dans l'appli une extension de validité est moi. Nous pourrions cependant anticiper l'avenir et prévoir le cas que 2 ou 3 personnes max puissent le faire mais encore faudrait il que je leur délègue le droit.


On contrôle au niveau de l'application si la déclaration d'une nouvelle période de travail s'inscrit dans une durée éligible.

=> Oui en fonction des dates du projets et des dates du ou des WPs concernés.


- Soit on met en place un système identique aux extensions de projet pour les extensions de WP. Cette extension devra être effectuée par la personne autorisée préalablement à la saisie de toute nouvelle déclaration de travail.

Petites explications

Un amendement de contrat est déposé en vue de demander une extension de projet et donc d’éligibilité de coup.
Si la réponse est défavorable alors les dates projets restent celles annoncées précédemment et l'appli doit refuser toute déclaration au delà de cette date.
Si la réponse est favorable:
cas extension projet (fréquent): Tous les WP sont concernés et les coûts sont donc éligibles tant qu'ils rentrent dans l'enveloppe budgétaire que nous avions recu.
cas extension WP (rare): seul un WP est prolongé et seuls couts liés à ce wP sont encore éligibles. l'appli refusera les dépenses pour les autres wps.

Je confirme cette nécessité et de détailler le contexte de gestion et de consultation.

je vais y cogiter mais je n'envisageais initialement pas de vous embêter avec l'ensemble
Voila une première représentation sans reprendre le détail rôle et travail qui vienne se connecter à cela.
https://drive.google.com/file/d/0B0Rb6S … sp=sharing

pour info, j'aurais du modifier l'entitée partenaires par l'entité membre. car un membre peut soit etre coordinateur soit partenaires du projet mais reste un membre tout de même.

Dernière modification par Darkangel (30-09-2014 11:23:36)

Hors ligne

#22 30-09-2014 12:06:59

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Reflexion sur base de donnée avant programation

Bonjour,

Définir quelques variables en multilangue au niveau PHP ça peut être pratique pour un petit site statique, mais pas pour une application web. Surtout que les define sont chargés en mémoire une bonne foi pour toutes. La raison d'être d'un define c'est pour du paramétrage applicatif (options fonctionnelles / modes d'affichage ...), et pas pour remplacer une pseudo dll de ressources d'une application compilée.

Voici le nouveau modèle

N'oubliez pas d'implémenter la règle d'assertion pour la création de wpt_end de WP_TRAVAIL.
1) wpt_end <= PROJET.pj_enddate ou wpt_end <= PROJET_EXTENSION.pj_newend s'il existe une extension pour ce projet
ou
2) wpt_end <= WP.wp_end ou wpt_end <= WP_EXTENSION.wp_newend s'il existe une extension pour ce wp.

Il devra y avoir également un contrôle d'assertion au niveau des droits utilisateurs pour chaque entité d'extension.

Attention également, en France les applications qui gèrent les déclarations d'heures travaillées doivent en général ne pas permettre la modification pour éviter les fraudes.
Des logs actions devront peut être êtres mis en place pour audit ultérieur.

Le modèle actuel ne gère pas la déclaration d'heure non éligibles, conformément à vos dernières exigences.

Dernière modification par Jc (30-09-2014 12:08:15)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#23 30-09-2014 13:18:33

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Reflexion sur base de donnée avant programation

Bonjour JC,

Définir quelques variables en multilangue au niveau PHP ça peut être pratique pour un petit site statique, mais pas pour une application web.

Dois je comprendre par là que que tous mes menus, autres titres etc. avec leurs traductions devront être stockes dans la base de donnée?
Si oui, auriez vous un lien à me proposez qui montre une façon
ou une autre de procéder de façon optimisé?

merci pour votre nouveau modèle que je vais décortiquer.
Dans ma schématisation ma façon de procéder avec les sous contractants de partenaires (ou membre après correction) est elle correcte?.

N'oubliez pas d'implémenter la règle d'assertion pour la création de wpt_end de WP_TRAVAIL.

euh là je sèche. Implémenter la règle d'assertion?? kesako?
je connais un peu même très peu les contraintes d'intégrités et d’âpres mes lectures cela y semble lié mais jamais employé.


commentaire audit

je relève votre commentaire bien que ce ne soit pas les autorités françaises qui nous auditent.
mais vous avez parfaitement raison sur le principe et c'est pourquoi je dois dores et déjà prévoir un log de connexion et un suivi des modifs des heures.

de même dans ma dernière modélisation et selon vos précédentes recommandations,  j'avais mis en place une entitée code personnel externe à personnel est ce ok que vous sous entendiez les choses?
Enfin si je dois prévoir un historique de connexion et modification puis je laisser la table directement a personnel?

Dernière modification par Darkangel (30-09-2014 13:45:56)

Hors ligne

#24 30-09-2014 13:52:53

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : Reflexion sur base de donnée avant programation

une autre notion rentre en compte que j'ai omis de mentionner.
dans le cas d'un projet il peut effectivement y avoir un amendement de sorte à avoir une extension de durée mais il peut aussi y avoir des amendements autres (nouveau partenaire, retirer un partenaire )
aussi j'aimerai pouvoir garder un historique des amendements, de leur date et de leur motif.

Hors ligne

#25 30-09-2014 14:15:44

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Reflexion sur base de donnée avant programation

Pour commencer avec les contraintes SQL, il y en a un total de  7 dont 5 sont des contraintes de table.

Pour les contraintes de table :
- Contrainte de clé primaire (PK)
- Contrainte d'obligation de valeur (NOT NULL)
- Contrainte de clé étrangère (FOREIGN KEY)
- Contrainte de validation (CHECK)
- Contrainte d'unicité (UNIQUE)

Les 2 dernières étant:
- Contrainte de Domaine (INT, VARCHAR, ...)
- Contrainte d'assertion

Note: MySQL par exemple ne les implémente pas toutes contrairement à d'autres moteurs comme postgreSQL ou SQLServer pour ne citer que ceux là.

Une contrainte d'assertion est une expression logique (prédicat) devant toujours être évaluée à vrai et peut concerner plusieurs tables. Elle permet la mise en place de règle de validation entre différentes colonnes de différentes tables. Une contrainte d'assertion est au sens de la norme SQL un objet de la base de données.
Un exemple : Faire en sorte que le montant des commandes non réglées ne dépasse pas 20% du CA réalisé par un client.

Pour les langues, le plus simple et le plus performant est d'utiliser la table de paramétrage PAYS (qui est à la base présente dans une gestion des adresses normalisée), de sortir toutes les colonnes de type VARCHAR de chaque table concernée et de les mettre dans une nouvelle table de localisation comme suit :

tables SQL

L'avantage en plus c'est que la table représentant l'entité de base devient en général après cette modification, une table statique, ce qui en augmente les performances.

Pour les amendements, faudrait lister les types possibles en faire une table de référence aussi, savoir si les droits de création peuvent changer en fonction du type, etc... faut tout développer.

Dernière modification par Jc (30-09-2014 14:17:30)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums