IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[9i][Best Practice] Conception


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut [9i][Best Practice] Conception
    Bonjour à tous.

    Un bête problème de conception, pour lequel j'ai 2 solutions et je ne sais laquelle choisir.

    Soit une architecture de tables pour le domaine RH (en * les champs de la clé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Identité :
    - nom
    - prénom
    * matricule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Revenu :
    * matricule
    * mois
    - revenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Affectation :
    * matricule
    * mois
    * service
    - coefficient
    On se fiche dans le problème présent de la table Identité, je ne l'ai mise là que pour la forme.

    Mon problème est dans la relation entre Revenu et Affectation.

    En effet, un individu a UN SEUL revenu par mois (donc la clé de Revenu est {matricule, mois}).
    Mais un individu peut avoir plusieurs affectations par mois : il y a un coefficient par service. par exemple il peut être à 0,6 sur la RH et à 0,4 sur le Commercial.

    Donc je créé une ligne pour chaque affectation dans ma table des Affectations.

    Jusque là tout va bien. MAIS, car il y a un MAIS, la RH voudrait aussi pouvoir
    1) connaître le service sur lequel l'individu est affecté en majorité
    2) pouvoir sortir les revenus de l'individu affectés à 100% à ce service là.

    Ce qui veut dire que pour Mr TOTO, matricule 001 qui en janvier a gagné 1000€ par mois et qui est affecté à 0,6 à RH et 0,4 au Commercial ils veulent pouvoir faire :
    TOTO 001 janvier RH 600 €
    TOTO 001 janvier Commercial 400 €
    et
    TOTO 001 janvier RH 1000 €
    Bon soit, ça ne se discute pas.

    Mon problème est le suivant : soit je rajoute une ligne dans ma table des affectations qui contient le service majoritaire avec un coefficient de 1 et un indicateur comme quoi c'est le majoritaire, soit je fait une autre table à côté qui ne contient QUE les services majoritaires. Ce qui donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Affectation :
    * matricule
    * mois
    * service
    * majoritaire
    - coefficient
    MATRICULE MOIS SERVICE MAJORITAIRE COEFFICIENT
    001 janvier RH 0 0,6
    001 janvier Commercial 0 0,4
    001 janvier RH 0 1
    ou ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Affectation :
    * matricule
    * mois
    * service
    - coefficient
     
    Affectation_majoritaire :
    * matricule
    * mois
    - service
    MATRICULE MOIS SERVICE COEFFICIENT
    001 janvier RH 0 0,6
    001 janvier Commercial 0 0,4

    MATRICULE MOIS SERVICE
    001 janvier RH
    Quels sont les pour et les contre à votre avis ?

    Je serais plutôt pour la 1ere solution : plus simple, plus maintenable, 1 seule table mais une clé plus longue, qui intègre 2 visions différentes de la donnée en 1 seule fois.

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Bonjour nuke_y

    Entre les 2 solutions proposées, la seconde me paraît plus propre (pas de lignes inutiles et faisant de la redondance d'informations dans une table).

    Je vois peut-être une troisième solution (si j'ai compris toute l'étendue du problème , pourquoi ne pas sortir le nom du service qui a le plus grand coefficient en t'inspirant de ce qui avait été proposé dans ce post par laurent :
    http://www.developpez.net/forums/sho...5&postcount=19

  3. #3
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Entre ces 2 choix je suis pour le premier mais par contre le flag "majoritaire" ne fait pas partie de la clef, c'est une propriété, pas un identifiant...

    petite remarque:
    tu sais qu'une toute petite fonction analytique de rien du tout te permetrait de te passer de ton champs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select MATRICULE, MOIS, SERVICE, COEFFICIENT
    decode ( row_number() over (partition by MATRICULE, MOIS, SERVICE order by COEFFICIENT desc),1,1,0) MAJORITAIRE
    from Affectation

  4. #4
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Je sais, je sais mais

    1) le système de requête final doit utiliser Business Objects pour la requête. J'ai pas testé mais ça doit marcher quand même, enfin à tester (j'ai peur de ce que peuvent donner les fonctions analytiques avec des group by made in utilisateurs BO.

    2) Ca me gène un peu d'utiliser des fonctions spécifiques à un SGDB alors qu'on se démène depuis tant de temps à faire quelquechose de portable...

    Sinon merci des réponses, les avis sont partagés à ce que je vois

    EDIT :
    Si il est nécessaire, puisque le service majoritaire est AUSSI un service partiel. Sinon il y aura violation de la clé unique.

  5. #5
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Citation Envoyé par nuke_y
    Je sais, je sais mais
    1) le système de requête final doit utiliser Business Objects pour la requête. J'ai pas testé mais ça doit marcher quand même, enfin à tester (j'ai peur de ce que peuvent donner les fonctions analytiques avec des group by made in utilisateurs BO.
    C'est très pratique les fonctions analytique justement pour BO car ce ne sont pas des fonctions de groupement, BO ne génère donc pas de "group by" et ça évite ainsi de faire des gros tris qui rament....

    Citation Envoyé par nuke_y
    2) Ca me gène un peu d'utiliser des fonctions spécifiques à un SGDB alors qu'on se démène depuis tant de temps à faire quelquechose de portable...
    Personnellement, j'ai entendu des centaines de fois cet argument, mais j'ai jamais vu ni d'univers, ni d'applicatifs qu'on se soit amusés à porter comme ça...


    Citation Envoyé par nuke_y
    Si il est nécessaire, puisque le service majoritaire est AUSSI un service partiel...
    c'est exactement l'argument que j'emploirais pour dire qu'il n'entre pas dans la clef primaire... il doit y avoir un mal-entendu quelque part...

  6. #6
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    remi4444 a écrit :
    Personnellement, j'ai entendu des centaines de fois cet argument, mais j'ai jamais vu ni d'univers, ni d'applicatifs qu'on se soit amusés à porter comme ça...
    C'est pas faux


    nuke_y a écrit :
    Si il est nécessaire, puisque le service majoritaire est AUSSI un service partiel...
    Si on prend ce cas là :
    MATRICULE MOIS SERVICE MAJORITAIRE COEFFICIENT
    001 janvier RH 0 0,6
    001 janvier Commercial 0 0,4
    001 janvier RH 0 1
    Je ne peux pas créer une clé primaire sur MATRICULE, MOIS et SERVICE car j'ai un doublon sur 001 janvier RH. Je suis obligé d'inclure MAJORITAIRE dans la clé pour obtenir l'unicité. Ou alors je suis à côté de mes pompes ?

  7. #7
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par nuke_y
    Je ne peux pas créer une clé primaire sur MATRICULE, MOIS et SERVICE car j'ai un doublon sur 001 janvier RH. Je suis obligé d'inclure MAJORITAIRE dans la clé pour obtenir l'unicité.
    D'accord avec toi

  8. #8
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Citation Envoyé par nuke_y
    Je ne peux pas créer une clé primaire sur MATRICULE, MOIS et SERVICE car j'ai un doublon sur 001 janvier RH. Je suis obligé d'inclure MAJORITAIRE dans la clé pour obtenir l'unicité. Ou alors je suis à côté de mes pompes ?
    Ok, j'avais mal compris en fait... effectivement, il ne vaux mieux pas mélanger les torchons et les serviettes, donc mettre tes lignes de types "majoritaire" dans une autre table car elles signifient autre chose...

    Dans ce cas là, suis donc d'accord avec plaineR!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 16/06/2006, 13h46
  2. swing best practices.
    Par bbclone dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 07/06/2006, 10h14
  3. Réponses: 4
    Dernier message: 23/05/2006, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo