Partage
  • Partager sur Facebook
  • Partager sur Twitter

Help, choix et organistaion bdd sql ?

Sujet résolu
    26 novembre 2010 à 0:27:16

    Salut à tous.

    Voilà mon problème :
    Je suis en train de créer un système de "gestion du personnel" en php qui sera sur le réseau interne de mon entreprise.
    J'ai donc une BDD qui va regrouper plusieurs tables (je pense environ 10 tables).

    Chaque table correspond à un domaine particulier, exemple :

    -une table suivi qualification langage international qui comprendra :NOM/PRENOM/MATRICULE/NIVEAU ANGLAIS/RESULTAT ANGLAIS/DATE OBTENTION/ ...

    -une table des permis de conduire qui comprendra :NOM/PRENOM/MATRICULE/PERMIS/DATE PERMIS /VALIDITE/ ...

    -une table des différentes licences obtenues qui comprendra :NOM/PRENOM/MATRICULE/NIVEAU BS/NIVEAU CM/OPERATEUR N1/OPERATEUR N2/ ...

    - ...

    Dans chaque table il y aura en données redondantes le nom , le prénom et le matricule de la personne voir plus encore.

    1.Comment organiser ces tables ? (chaque table contiendra la même liste du personnel c-à-d une centaine de personne)
    2.Faut-il utiliser les jointures entre tables et comment ? (là j'ai un peu de mal à mettre en pratique, j'aurai bien besoin de schéma pour comprendre la logique clé primaire...)
    3.Faut-il utiliser un id automatique et invisible ou bien utiliser le matricule comme id qui lui apparaitra dans les tableaux de suivi du personnel ?

    Merci d'avance pour votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      26 novembre 2010 à 1:14:52

      1. Comme tu l'as remarqué, si dans chaque table tu met le nom, le prénom et la matricule de l'employé, c'est redondant. Je te suggère plutôt de créer une table employé, dans laquelle une entrée correspond à un employé et à ses données personnelles, qualifications, etc.
      Ensuite dans les autres tables, tu fera intervenir l'id de l'employé, qui est unique.

      Maintenant je prends l'exemple des licences obtenues par chaque employé. Il est possible qu'une licence soit obtenue par plusieurs employés, auquel cas c'est difficile à gérer dans une seule table.
      Soit tu prévois un nombre max. d'employés (100 par ex.), et si jamais à un moment tu dépasses cette limite, tu es bloqué.
      Soit tu définis un nombre très grand de champ, et tu aura énormément de champs vices.

      L'idée ici est de créer une table liste_licence qui contiendra toutes les licences obtenables. Ensuite tu créés une autre table licence qui associe un employé à une licence. Ainsi si un employé a plusieurs licences, il suffira d'ajouter une entrée dans cette table. De même, le fait que plein d'employés aient la même licence ne pose pas de souci.
      Un petit schéma explicatif :
      Image utilisateur
      Les flèches signifient "donne son id. à". (belle faute d'orthographe dans le schéma mais flemme de corriger)

      2. Tu aura sans nul doute besoin des jointures. Par exemple si tu veux récupérer le nom et le prénom des employés qui ont eu la licence toto :
      SELECT e.nom, e.prenom
      FROM employe e
      JOIN licence l
      ON e.id = l.id_employe
      JOIN liste_licences ll
      ON ll.id = l.id_licence
      WHERE ll.nom = 'toto'
      


      3. J'ai une préférence pour l'id automatique. :)

      Bref, je ne développe pas plus car il est tard, je ne sais pas si t'as déjà entendu parler du modèle Entités/Relations et du modèle relationnel, mais c'est très utile lors de la conception de base de données. Si tu as besoin de plus d'infos je reste dispo (demain !).
      • Partager sur Facebook
      • Partager sur Twitter
        26 novembre 2010 à 9:48:38

        > une table suivi qualification langage international qui comprendra :NOM/PRENOM/MATRICULE/NIVEAU ANGLAIS/RESULTAT ANGLAIS/DATE OBTENTION/ ...

        Et si tu as plusieurs langues ?

        Solution : table langues, table employés comme dit plus haut, et une table de lien qui contient employe_id, langue_id, et les informations pour cet employé dans cette langue (niveau, notes, etc)

        Même chose pour les licences, et pour les permis.
        • Partager sur Facebook
        • Partager sur Twitter
          27 novembre 2010 à 0:25:32

          Merci à toi Ti boss et à toi Lord Casque Noir.

          Je penses que je suis sur la bonne voie pour la compréhension des jointures.

          Mais je bloque encore sur la logique et l'adaptabilité à ma BDD.
          Je m'explique :

          Ma 1ere table "personnel" contiendra l'ensemble du personnel.
          id nom prenom matricule date_naissance
          1 DUPOND Paul AJ23000F 02/10/1978
          2 ROGER Pierre AS45000R 23/05/1973
          etc ... ... ... ...


          Ma 2eme table "toeic" contiendra l'ensemble des TOEIC obtenus par le personnel.
          id note_toeic date_toeic id_personnel pls obsservation
          1 435 25/02/2008 2 2222 Neant
          2 254 12/04/2009 1 1111 Neant
          etc ... ... ... ... ...


          Ma 3eme table "permis" contiendra l'ensemble des permis obtenus par le personnel.
          id vl pl spl tc date_validité id_personnel
          1 oui oui non oui 12/10/2001 2
          2 oui oui oui non 14/02/1998 1
          etc ... ... ... ... ... ...

          Voilà grosso modo l'aspect qu'aurait la bdd d'après vos informations.

          Maintenant comment je vais faire pour , par exemple, ajouter une nouvelle personne dans la bdd à partir d'un formulaire ?
          Et aussi comment modifier une fiche personnel ?

          J'ai bien compris l'utilisation des jointures pour récupérer des données mais pour créer des données dans la bdd, là je coince un peu !!!!

          Le fonctionnement du site sera :

          1- une page pour la gestion des "toeic" avec la liste des personnels ayant un toeic, un formulaire pour enregistrer une nouvelle personne ainsi que la modification de la fiche d'une personne.

          2- une page pour la gestion des "permis" avec idem que pour les toeic...

          3- ainsi de suite.........................

          SI vous avez des idées sur l'architecture et l'organisation je suis preneur.

          Merci encore pour l'aide apporter.

          • Partager sur Facebook
          • Partager sur Twitter
            27 novembre 2010 à 0:56:20

            Si tu veux ajouter toutes les données sur un employé à partir d'un seul formulaire, il te faudra forcément plusieurs requêtes.

            Ton script doit donc :
            • créer une entrée dans la table personnel ;
            • récupérer l'id qui vient d'être généré et qui correspond donc au nouvel employé : il te servira à créer les entrées dans tes autres table (en PHP, voir du côté de mysql_insert_id ou de PDO::lastInsertId) ;
            • créer les entrées dans les tables associées à l'employé (toiec, permis, etc.) grâce à l'id précédemment récupéré.


            Ensuite pour la gestion après enregistrement, je pense que ça pose moins de souci vu que l'utilisateur existe déjà, il te suffit de faire tes requêtes en fonction de l'id de l'employé que t'es en train de modifier.

            Si tu as besoin de plus de précisions, n'hésite pas.
            • Partager sur Facebook
            • Partager sur Twitter
              27 novembre 2010 à 16:43:37

              Merci encore de répondre si rapidement : :)

              Cela devient de plus en plus limpide !!!!!

              - Donc créer une entrée dans la table personnel
              - Récupérer l'id qui vient d'être généré et qui correspond donc au nouvel employé

              Que me conseilles-tu pour cet id ?
              Je l'utilise en temps qu'id principal dans la nouvelle table en lieu et place de l'id Auto-increment‎ ?
              Ou je crée dans cette nouvelle table un champ id_personnel égal à celui de la table personnel tout en gardant un id auto-increment propre à celle-ci?

              J'espère que je suis assez clair ^^
              • Partager sur Facebook
              • Partager sur Twitter
                27 novembre 2010 à 18:38:34

                Il est préférable que tu créés un champ id_personnel dans tes autres tables. Si jamais tu créés une table "licences" par exemple, et qu'un même employé peut avoir plusieurs licences, les id ne seront pas uniques.
                • Partager sur Facebook
                • Partager sur Twitter
                  29 novembre 2010 à 9:24:35

                  Ok merci...je vais essayer tout cela...en pratique.
                  Je reviendrai si jamais je coince encore quelque part.
                  ENCORE MERCIIIIIIIIIIIIIIIIIII !!!!!!!!!!!!!!
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Help, choix et organistaion bdd sql ?

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown