Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question de conception de la base.

Tables et Clés étrangères

Sujet résolu
    21 décembre 2010 à 11:57:29

    Bonjour,

    Je l'avoue j'aime pas bien l'UML et la conception et toutes ces règles que je trouve complexes ... mais je compte avancer dans ce sens, car c'est important de maîtriser cette tache.. ^^

    J'ai rencontré quelques problèmes avec les clé étrangères... c'est pour ça je vous demande de m'aider sur le plan de conception.



    Voilà un petit modèle du problème, j'espère trouver des réponses.

    J'ai 3 tables:
    - Voiture (identifié par immatriculation)
    - Vidanges
    - Depenses

    Le problème dans ma conception c'est que: "depense" peut être liée à une voiture ou NON. (par exemple: depenses -> avance sur salaire, achat matériel informatique)
    La différence entre les types de dépenses c'est que lorsque la dépense est en relation avec une voiture, il faut mettre immatriculation comme clé étrangère (faisant référence à la voiture) Sinon les dépenses ont les autres données en commun.

    Ma conception initiale, qui est fausse (je trouve :-° ):
    Image utilisateur


    Une autre conception, que pensez vous de ça?
    Image utilisateur

    Mettre une table avec des clés étrangères faisant référence aux clés primaires de voiture et dépenses.
    Si: depense = voiture alors: inserer into depenses & insert into depenses_voiture
    Sinon: insert into depenses


    Merci ;)
    • Partager sur Facebook
    • Partager sur Twitter
      21 décembre 2010 à 14:00:45

      et si tu faisais une table 'depense' globale incluant tous les types de dépense...

      * une dépense pour la voiture EST UNE dépense
      * une dépense pour l'informatique EST UNE dépense
      * ...

      Pour moi ta table depense_voiture n'est pas correcte.

      EDIT:
      * la vidange EST UNE depense_voiture qui EST UNE depense ;)

      je verrais ça comme ça:

      table depenses (
      id,
      date,
      montant,
      PK (id)
      );
      
      depense_voiture {
      id,
      id_depense, -- FK ref depense(id)
      description,
      PK (id),
      FK id_depense references depenses (id)
      );
      
      depense_informatique (
      id,
      id_depense, -- FK ref depense(id)
      description,
      PK (id),
      FK id_depense references depenses (id)
      );
      


      A améliorer ;)
      • Partager sur Facebook
      • Partager sur Twitter
        21 décembre 2010 à 14:33:57

        Salut,

        Je déplace dans la section "Bases de données". :)
        • Partager sur Facebook
        • Partager sur Twitter
          21 décembre 2010 à 17:20:16

          Merci Christouphe pour votre réponse ;)

          Pour la vidange, c'est juste pour noter les infos d'entretient concernant la voiture. (Kilométrage, détails: huile seulement OU huile + filtres ...) Ensuite les dépenses sont noté à part.



          Si quelqu'un a une autre proposition, je serais ravi :D

          Merci ;)



          • Partager sur Facebook
          • Partager sur Twitter
            22 décembre 2010 à 12:34:55

            La solution proposée par christouphe est celle qu'on utilise en générale lorsque l'on sait qu'on voit avoir plein de sorte de dépense à ajouter; modifier ou supprimer: on a juste à créer une nouvelle table et voila. La notion d'héritage est souvent modéliser ainsi
            Après si tu n'a pas ce genre de contrainte, d'autres solutions sont possibles mais moins adaptable et donc moins maintenable
            Par exemple, tu peux te contenter d'une seul table dépense avec une colonne "typeDepense" qui aura pour valeur "voiture", "informatique" ...
            Ainsi pour choper une dépense de voiture, tu fais un where typeDepense="voiture" et le tour est joué
            Après ça dépend de ton appli je dirai.
            A priori la solution de christouphe est plus élégante mais en as tu vraiment besoin ?

            • Partager sur Facebook
            • Partager sur Twitter
              22 décembre 2010 à 13:47:13

              Merci angelo pour la réponse. ^^

              Je pense que j'ai trouvé la solution... tout ce problème etait à cause de la clé étrangère. C'est une longue histoire... o_O

              Mais voilà: J'ai fait une table "depenses" avec clé étrangère immatriculation: valeur par defaut NULL.
              Si: c'est une dépense qui est en relation avec les voitures alors immaticulation=valeur
              Sinon: immatriculation=NULL

              Je pense que ma slution est vraie, non?!
              • Partager sur Facebook
              • Partager sur Twitter

              Question de conception de la base.

              × 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