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

Schéma Discussion :

Modéliser une GED : multiples index pour un objet [Modèle Relationnel]


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 17
    Points : 19
    Points
    19
    Par défaut Modéliser une GED : multiples index pour un objet
    Bonjour,

    Dans le cadre du développement d'une GED interne, j'ai les règles de gestion suivantes :
    • Un fichier (objet) peut être qualifié par plusieurs index
    • Un index a un type et une valeur


    Par exemple, mon fichier "facture-05.pdf" aurait les index suivants :
    • Nature de document : facture
    • Date du document : 01/05/2011
    • Nom du client : DUPOND
    • N° du client : 201


    Cela donne la modélisation suivante :



    Les 4 index de l'exemple sont stockés dans INDEXATION, et pointent tous vers l'unique OBJET correspondant à mon fichier.

    L'avantage de cette conception est qu'elle est très souple au niveau de la configuration de la GED : on peut créer les types d'index que l'on veut, et n'utiliser que ceux dont on a besoin pour chaque objet.

    Mon souci se trouve au niveau de l'interrogation de cette base.
    Imaginons les critères de recherche suivants :

    • Nature de document : facture
    • Nom du client : DUPOND


    Ma requête va se traduire par :

    • Une recherche des enregistrements de INDEXATION où FkIdTypeIndex = "Nature de document" ET ValeurIndex = "Facture". Cela nous donne une première sélection.
    • Une recherche des enregistrements de INDEXATION où FkIdTypeIndex = "Nom du client" ET ValeurIndex="DUPOND". On a une deuxième sélection.
    • Une recherche dans OBJET des enregistrements qui correspondent aux FkIdObjet de la réunion des deux sélections de INDEXATION


    Vue la relative complexité de cette requête pourtant basique, j'ai peur d'être en train de partir sur un modèle inadapté.

    Quel est votre avis ?

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Grasdubide ,

    Je trouve que c'est assez bien joué !

    Citation Envoyé par Grasdubide
    Vue la relative complexité de cette requête pourtant basique, j'ai peur d'être en train de partir sur un modèle inadapté.
    ==> en fait, il ne faudrait pas parler, là, de la simplicité apparente de la requête, mais plutôt de la "variabilisation" du nombre et du type d'index : tous les cas sont prévus, dans ton analyse : (bis). Et donc, du fait de cette "variabilisation" extrême, l'extraction de la moindre donnée s'en trouve complexifiée. Logique.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  3. #3
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 065
    Points
    2 065
    Par défaut
    Bonjour,

    En faisant un peu de rétro-ingénierie vers le niveau conceptuel (au sens Merise), il apparaît que la table INDEXATION est issue d'une association entre OBJET et TYPE_INDEX.
    [ TYPE_INDEX ]--0,n----( INDEXATION )----0,n--[ OBJET ]

    Il s'ensuit que la clé de la table INDEXATION doit être {IdObjet, IdTypeIndex} (version 2) ce qui prémunit cette table de l'introduction de doublons ; chose que ne peut garantir la clé {IdIndexation} (version 1) et qu'il faut garantir d'une autre manière.

    Autres avantages :
    - Dans la version 1, si les colonnes IdObjet et IdTypeIndex ne sont pas indexées, alors la performance des requêtes avec la version 2 sera largement supérieure (sensiblement identique si ces colonnes ont un index en version 1).
    - Avec une colonne en moins, la table INDEXATION est simplifiée.
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour JPhi33,

    C'est exact.

    Il s'agit du débat éternel entre [un ID de type "numérotation automatique" en clé primaire et le couple {IdObjet, IdTypeIndex} en index unique] et [le couple {IdObjet, IdTypeIndex} en clé primaire, tout court].

    Suivant le soft de programmation, la première version peut s'avérer plus pratique (Access, par exemple).
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    C'est de la modélisation par méta-données. Elle a ses avantages et ses inconvénients.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Merci à tous pour vos commentaires.

    Finalement, je m'aperçois que les quelques divergences se situent au niveau des clefs à utiliser dans la table d'indexation.

    J'ai pour ma part un avis personnel plutôt tranché, à savoir que je conserve un identifiant unique malgré la présence des 2 clefs étrangères qui pourraient en faire office. D'expérience, je trouve que la manipulation d'une table sans clef primaire est indigeste.

    En tout cas, vos réponses me confortent dans le modèle que j'envisage. Encore merci.

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    la clef primaire de votre table sera le couple des deux FK, en quoi est-ce indigeste ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Dans le code, lorsque l'on doit conserver une référence à un enregistrement particulier, il est beaucoup plus aisé de manipuler une variable contenant l'identifiant primaire plutôt que 2.

    C'est encore plus vrai lorsque l'on manipule plusieurs enregistrements à la fois.

    Ma remarque n'est peut être pas vraie pour tous les langages, mais pour celui que j'utilise (4D), c'est le cas.

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

Discussions similaires

  1. modéliser une question à multiples choix
    Par pifpafpoof dans le forum UML
    Réponses: 3
    Dernier message: 09/12/2011, 09h51
  2. Connexion à une source de données pour un objet pivotTable
    Par totocasagrandi dans le forum Access
    Réponses: 2
    Dernier message: 12/01/2007, 10h45
  3. logging des index pour une BD standby
    Par learn dans le forum Oracle
    Réponses: 8
    Dernier message: 14/12/2005, 12h14
  4. Créer un index pour une Base de données
    Par john7 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 31/01/2005, 21h43
  5. Réponses: 7
    Dernier message: 21/10/2004, 09h13

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