8
votes

Schéma de base de données pour feuille de temps

Quelqu'un pourrait-il m'aider avec un schéma de base de données approximatif d'une application de la feuille de temps où je serais en mesure de

  1. Magasin d'heures par jour pendant une période (2 semaines) pour différents projets. Ex personne A peut mettre 3 heures pour le projecta et 4 heures pour le projecteur le même jour

  2. Faites-le que c'est facile d'obtenir des rapports sur les heures totales mis pour un projet ou d'obtenir des heures totales sur tous les projets par une personne donnée

    Edit: Une autre exigence serait que chaque feuille de temps pour une période de temps particulière pour chaque personne doit avoir un champ indiquant que la personne a soumis la feuille de temps et un autre dit qu'il a été approuvé


2 commentaires

Vous ne pouvez pas simplement soumettre et approuvé, vous avez besoin d'un processus retourné. Sinon, il n'y a pas de point à un processus d'approbation. Vous concevez une application de feuille de temps sans savoir-faire étendu des exigences légales, des exigences du contrat, des contrôles internes, de la fraude de la feuille de temps et de la prévention de l'informatique et de l'audit. Tous sont essentiels à la conception d'une application de feuille de temps. Il vaut mieux en acheter un de quelqu'un qui a fait la recherche juridique nécessaire à la croissance de votre propre et de créer plus de problèmes que vous ne pouvez l'imaginer maintenant.


@Hlgem Vous pourriez dire cela potentiellement sur tout le logiciel de l'étagère et simplement vous échapper du code touchante. Vous pouvez créer une demande de concept et travailler à travers les problèmes et apprendre en cours de route. Vous en apprendrez plus de problèmes que autre chose.


5 Réponses :


0
votes

une table pour les personnes (1)

une table pour les projets (2)

Une table pour les réservations (3) - Qui a fait le travail (FK en 1), quel projet ont-ils travaillé sur (FK en 2), quand ont-ils fait le travail, combien de travail ont-ils fait?

Sélectionnez Somme (Time_Booked) à partir de (3) où la personne est égale (une pièce d'identité de 1) et du projet = (Quelqu'un ID de 2)

ou

Sélectionnez Somme (Time_Booked) à partir de (3) où la personne est égale (une pièce d'identité de 1)

etc ...


0 commentaires

1
votes

Cela ressemble un peu à des devoirs, mais je commencerais probablement avec quelque chose comme ceci: xxx


4 commentaires

Et comment puis-je indiquer une feuille de temps particulière pour une personne qu'elle a été soumise par cette personne? Je ne serais pas capable de le faire dans la table de travail.


@TP - Si ce n'est pas cette personne, qui d'autre le soumettrait? PersonID est déjà sur la table de temps de travail.


Ce que je veux dire, c'est que la personne peut le remplir mais doit le soumettre pour approbation.


@TP - alors vous allez simplement ajouter un champ "soumis" à la table de travail avec un champ "approuvé" (comme d'autres ont suggéré)



2
votes

Voici un croquis rugueux qui vous donnera un bon départ: xxx

modifier: comme alternative au drapeau approuvé dans chaque ligne de projetMesheet, vous pouvez plutôt séparer le statut approuvé à une table séparée. Par exemple, pour permettre l'approbation de la feuille de temps d'un employé sur une période donnée, un gestionnaire ajouterait une entrée d'approbation à la table d'homologation: xxx


5 commentaires

Et comment puis-je indiquer une feuille de temps particulière pour une personne qu'elle a été soumise par cette personne?


Vous pouvez ajouter un drapeau approuvé à la table ProjectTimeheet pour indiquer qu'il a été approuvé. Le processus est, la feuille de temps est soumise - approuvée == 0. Feuille de temps approuvée par gestionnaire: approuvé == 1.


Mais je dois garder une trace d'heures pour des jours individuels. Est une ligne dans la feuille de projet pour une période (2 semaines) ou pour des jours individuels? Si c'est pendant des jours, je devrais mettre à jour 14 lignes pour la colonne approuvée à chaque fois qu'une personne soumet la feuille de temps.


Désolé, je voulais m'expliquer un peu plus, mais a été distrait. Chaque ligne de la feuille de projet est pour un seul projet travaillé. Sémarrage / EndTime est supposé être le même jour, un projet fonctionné sur plusieurs jours inclut plusieurs rangées. Oui, l'approbation d'une période de 2 semaines impliquera la mise à jour de 14 rangées. L'alternative consiste à séparer l'approbation d'une table séparée, que j'ai ajoutée comme édition.


@TP - Mieux vaut simplement mettre à jour les 14 lignes plutôt que d'avoir une table d'approbation distincte. La mise à jour de 14 lignes n'est pas une grosse affaire - les bases de données sont conçues pour ce type de choses.



16
votes

Emprunter à partir d'ERIC PETROELJE & MDMA:

PayrollCycle
- PayrollCycleID (PK)
- PayrollCycleYear
- PayrollCycleNumber
- StartDate 
- EndDate
- DirectDepositDate
- CheckDate
- Other_fields


0 commentaires

0
votes

Le code suivant est extrait de la ] Project-Ouvrir [ Système Open-Source dans la syntaxe PostgreSQL et Edité.

Veuillez noter la table "Conf_Objects" avec des informations d'approbation / de confirmation. Lorsque l'utilisateur "soumet" une feuille de temps, toutes les heures soumises sont attribuées à un nouveau Conf_Object. C'est le travail du superviseur de définir le statut du Conf_Object à "approuvé". Le superviseur ou l'utilisateur peut supprimer la conf_Object à tout moment, ce qui marquera les heures comme "non soumises" (hour.conf_object_id = null) à nouveau, de sorte que ces heures se retrouveront sur le rapport "Heures non soumises". P>

CREATE TABLE projects (
    project_id                      integer constraint projects_pk primary key,
    project_name                    text not null,
    parent_id                       integer constraint projects_parent_fk references projects,
[...]
    project_type_id                 integer not null constraint projects_prj_type_fk references categories,
    project_status_id               integer not null constraint projects_prj_status_fk references categories,
    description                     text,
    start_date                      timestamptz,
    end_date                        timestamptz
);


CREATE TABLE users (
    user_id integer constraint users_pk primary key,
    first_names text,
    last_name text
[...]
);

-- Confirmation (=approval) objects
CREATE TABLE conf_objects (
    conf_id         integer constraint conf_id_pk primary key,
    conf_status_id  integer constraint conf_status_nn not null
);


CREATE TABLE hours (
    user_id                 integer constraint hours_user_id_nn not null constraint hours_user_id_fk references users,
    project_id              integer constraint hours_project_id_nn not null constraint hours_project_id_fk references projects,
    day                     date constraint hours_day_nn not null,
    hours                   numeric(5,2) not null,
[...]
    note                    text,
    conf_object_id          integer constraint hours_conf_object_fk references conf_objects
);


0 commentaires