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 :

[mcd]héritage pour gestion des relations


Sujet :

Schéma

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [mcd]héritage pour gestion des relations
    Tout d'abord, bonjour et merci d'avance.
    Je créé actuellement un MCD afin de réaliser une application de gestion d'arbres.
    Malheureusement, je ne l'ai pas sous la main mais cela ne devrai pas poser de problème.

    Je serai tenté de créer une entité parente PRESTATION possédant les attributs (Libellé, Remarque, date_programmation et date_realisation) qui est en relation avec une autre nommée INTERVENTION de telle sorte qu'une intervention regroupe plusieurs prestations.

    Les entités filles TRAVAUX et EXPERTISE n'ont pas de propriétés caractéristiques mais je désire les créer car c'est au niveau des relations qu'elles se distinguent:

    Les expertises identifient et étudient des anomalies et les travaux sont réalisés sur des arbres.

    Cette manière de procéder me parait plus claire mais au niveau de la gestion des données (notamment des requêtes sur les dates de réalisation par exemple) je ne sais pas malgré mes recherches sur ce forum

    Je suis débutant, donc j'espère que vous serez compréhensifs. MERCI

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 100
    Points : 31 538
    Points
    31 538
    Billets dans le blog
    16
    Par défaut
    Bonsoir jmarco,

    Je créé actuellement un MCD afin de réaliser une application de gestion d'arbres
    Vos arbres sont des b-trees ? ou sont-ils ... en bois ?


    Je serai tenté de créer une entité parente PRESTATION possédant les attributs (Libellé, Remarque, date_programmation et date_realisation) qui est en relation avec une autre nommée INTERVENTION de telle sorte qu'une intervention regroupe plusieurs prestations.
    Votre MLD ressemble à quelque chose comme ceci :



    Où la clé primaire de Prestation est composée du couple {InterventionId, PrestationId}. On utilise l’identification relative dans la mesure où une prestation n’est qu’une propriété (multivaluée) d’une intervention, tout comme une ligne de commande n’est qu’une propriété multivaluée d’une commande.
    (Pour modéliser, j’ai utilisé la version gratuite de Toad Data Modeler).

    Les entités filles TRAVAUX et EXPERTISE n'ont pas de propriétés caractéristiques mais je désire les créer car c'est au niveau des relations qu'elles se distinguent
    Il suffit de les modéliser ainsi :



    Du point de vue de la théorie relationnelle il n’y a pas de problème. Maintenant, si vous souhaitez avoir une table PRESTATION, vous l’aurez sous forme de table non pas de base mais dérivée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE VIEW PRESTATION AS 
       SELECT  PrestationId, InterventionId, DateProgrammation, DateRealisation, Libelle
       FROM    TRAVAIL
      UNION ALL
       SELECT  PrestationId, InterventionId, DateProgrammation, DateRealisation, Libelle
       FROM    EXPERTISE ;

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Reaction
    Tout d'abord, je te remercie de m'avoir répondu surtout à une heur aussi tardive.

    Je n'ai pas très bien saisi pourquoi la clé primaire était double, pourqoi la clé id_intervention est indispensable. Est-ce car une intervention se décline soit en expertise, soit en travaux ? parce que ça doit être le cas.

    Sinon, je t'ai joins la pertie de mon mcd qui me pose problème. Tu percevra mieux pourquoi j'insistais sur les relations pour la notion d'héritage.

    Pa exemple, c'est une expertise (de type générale) qui mesure les arbres et non des travaux pourtant leurs entités ont les mêmes proriétés.
    Si j'ai une entité PRESTATION qui regroupe les deux (là, je normalise) mon mcd sera moins compréhensible et je devrai faire appel au code pour respecter tout cela, je pense.

    A partir de ce mcd, sur Access 2000 je dois concevoir une application pour planifier ces "prestations", prendre en compte le coût des interventions correspondantes afin de déterminer ce que coûte l'entretien dechaque arbre.
    Je devrai réaliser de nombreuses requêtes portant sur les dates et j'aurai aimé savoir si mon mcd était correct.

    Je te remercie pour ton aide. Bonne journée

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Piéce jointe
    Navré, j'ai oublié de te joindre le mcd mais je n'arrive pas à l'uploader : il est noté "fichier non valide". Je vais essayer autrement.
    Images attachées Images attachées  

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 100
    Points : 31 538
    Points
    31 538
    Billets dans le blog
    16
    Par défaut
    Bonsoir Jmarco,


    Si j'ai une entité PRESTATION qui regroupe les deux (là, je normalise)
    Pouvez-vous préciser ce que vous entendez par normaliser ? Je ne vois pas à quelle partie de la théorie relationnelle raccrocher ce que vous sous-entendez. Du côté de Merise, faites-vous référence à une règle selon laquelle un nom d’attribut (par exemple : DateProgrammation) serait unique au sein d’un modèle conceptuel ? Si tel était le cas, il s’agit d’une contrainte purement syntaxique due à je ne sais qui. En fait, nous nous intéressons à la conception et le niveau syntaxique n’apporte rien pour le sujet qui nous concerne, sinon des tracasseries inutiles.
    Je ferai quand même une petite remarque : Vous nommez la table Expertise en utilisant le singulier et la table Travaux en utilisant le pluriel. Même si ce n’est pas une obligation, ça serait bien de respecter l’homogénéité de la structuration des noms : Expertises et Travaux ou bien Expertise et Travail. Tant qu’à faire, utilisez le singulier car, dans le cadre de la théorie relationnelle Expertise est un prédicat (cela vaut aussi au niveau conceptuel), et Travail est aussi un prédicat. Par la suite, j’utiliserai donc le terme Travail.

    Un prédicat :

    Le Travail IdTravail, décrit par Libelle, de type IdTypeTravail, faisant suite à l’expertise IdExpertise, ...

    Concernant la table Intervention

    Ou plutôt l’entité-type Intervention, afin de nous placer au niveau conceptuel. J’ai le sentiment que l’on a deux types d’interventions dont l’une est une conséquence de l’autre :
    Chronologiquement, a lieu une intervention de type expertise (pouvant comporter plusieurs expertises), suivie d’une (ou plusieurs ?) intervention(s) de type travail.

    Mes questions sont les suivantes :
    (Q1) peut-il y avoir des interventions de type travail non précédées d’interventions de type expertise ?
    (Q2) Variante : peut-il y avoir des travaux qui ne soient pas des conséquences d’expertises préalables ?
    (Q3) Peut-il y avoir des arbres ayant fait l’objet de travaux sans avoir fait l’objet d’expertises ?
    Vos réponses conditionnent la suite.
    En attendant celles-ci, la représentation graphique de l’ébauche de votre système pourrait être la suivante :





    Je n'ai pas très bien saisi pourquoi la clé primaire était double, pourqoi la clé id_intervention est indispensable. Est-ce car une intervention se décline soit en expertise, soit en travaux ?
    Petite précision de langage : dans notre cas, la clé primaire n’est pas "double", elle est composée d’un couple d’attributs permettant de garantir l’unicité des tuples (lignes).
    Pourquoi la clé d’Expertise (et celle de Travaux, toutes choses égales par ailleurs) est-elle composée de deux attributs ? Remettons les compteurs à zéro, plaçons-nous au niveau de la théorie relationnelle et utilisons un exemple classique.

    Considérez le cas d’une commande de produits de la part d’un client. Cette commande comporte un certain nombre de propriétés :

    - Numéro de commande
    - Date de commande
    - Nom du client, adresse du client
    - Des lignes de commande nommant les produits et indiquant les quantités commandées
    - Etc.

    Dans le cadre de la théorie, la commande fait l’objet d’une variable relationnelle (en abrégé relvar), ce que l’on appelle encore une table en SQL. Les valeurs successives prises par une relvar sont appelées des relations.
    La structure de la relvar Commande est celle-ci (clé primaire soulignée) :
    Commande {N°Commande, DateCommande, NomClient, AdresseClient, ..., LigneCde}
    Puisqu’une commande peut comporter plusieurs lignes de commande, elles-mêmes porteuses de propriétés (produit commandé, quantité), par voie de conséquence l’attribut LigneCde peut prendre des valeurs qui sont des relations (alors que les autres attributs cités prennent des valeurs simples).
    La structure de la relvar Commande devient la suivante :
    Commande {N°Commande, DateCommande, NomClient, AdresseClient, ..., LigneCde {N°LigneCde, N°Produit, Quantite}}
    En notant bien que l’attribut LigneCde est du type relation est donc que chaque ligne de commande doit être unique au sien d’une commande, d’où la mise en œuvre d’une clé pour LigneCde : {N°LigneCde} (qui pourrait aussi être {N°Produit}, mais peu importe).

    Maintenant, il est d’usage que d’un attribut comme LigneCde on fasse une relvar en tant que telle (appelons-la LigneCommande), en l’expulsant de la relvar Commande. La théorie relationnelle prévoit les opérateurs nécessaires ; UNGROUP pour l’expulsion, GROUP pour la réintégration :
    Ainsi, l’opération
    Commande UNGROUP LigneCde
    donne pour résultat la relvar LigneCommande :
    {N°Commande, N°LigneCde, N°Produit, Quantite}
    Ce que l’on peut illustrer par une représentation en extension :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Commande (N°Commande, DateCommande, NomClient, ...)
                  1            d1          c1
                  2            d2          c2
                 ...          ...         ...
    
    LigneCommande (N°Commande, N°LigneCde, ProduitId, Quantité, ...)
                       1           1           p1        q1 
                       1           2           p2        q2 
                       1           3           p3        q3 
    
                       2           1           p4        q4 
                       2           2           p5        q5 
                       2           3           p6        q6 
                      ...         ...         ...       ...
    Vous noterez que les valeurs prises par l’attribut N°LigneCde commencent à 1 pour chaque commande. Ceci n’est pas une obligation, mais illustre le système d’identification auquel conduit naturellement l’application de la théorie relationnelle : il s’agit ici d’un principe d’identification relative, décrit par ailleurs au niveau conceptuel (disons Merise), où l’on dit que l’entité-type LigneCommande est identifiée relativement à l’entité-type Commande.

    Au plan sémantique, on met en évidence le fait que LigneCommande est une entité-type faible (weak entity) comme le signalait Peter Chen en 1976.

    Voyez aussi (entre autres) la discussion avec Knoxville :
    http://www.developpez.net/forums/sho...d.php?t=334439

    Ou la FAQ Merise : "Comment déterminer un bon identifiant (unique) pour une entité ?"
    http://merise.developpez.com/faq/?pa...CD_Identifiant

    Pour reprendre votre cas particulier, lors de mon précédent message, j’ai appliqué aux interventions les principes que je viens de décrire, en remplaçant donc Commande par Intervention, LigneCommande par Expertise (et Travail). A mon sens, Expertise est une entité-type faible et je l’identifie donc relativement à Intervention.

    Vous me direz que rien n’empêche après tout d’ignorer les aspects théoriques et de considérer l’attribut N°LigneCde comme seul composant de la clé primaire de LigneCommande. C’est votre droit, mais la dimension sémantique en prend un coup et au niveau opérationnel, vous risquerez d’en pâtir, en provoquant des phénomènes mal venus d’I/O bound, comme je l’ai mentionné dans ma réponse à Knoxville. Et là, à grande échelle, ramener la durée d’une transaction de 5 secondes à moins d’une seconde, cela vaut le coup. En outre, si vous avez besoin de connaître la date de réalisation d’une intervention concernant l’expertise d’un arbre donné, vous pourrez effectuer une jointure directement entre les tables Rel_Experise_Arbre et Intervention (ou IntervExp) en shuntant la table Expertise. Et quand bien même, vous citeriez Expertise dans la jointure, si votre SGBD n’est pas idiot, il shuntera de lui-même Expertise (c’est en tout cas ce que ferait le mien).


    Merci de me faire part de vos réponses à mes questions,

    Fsmrel

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour mfsrel,
    Tout d'abord excusez-moi de vous répondre aussi tardivement, je suis malheureusement pris par le temps et j'ai du créer ma base sans access (2003) au risque de rencontrer quelques problèmes.

    Mais je tiens à finir cette discussion. Donc, concernant vos questions :

    - J'entendais per "normaliser" le fait que j'obtiens deux entités qui possèdent les mêmes attributs et j'ai cru comprendre qu'il était préférable de les réunir en une seule. Je les distinguerai par la suite au moten de leur type.

    - Au sujet des interventions :

    - Une intervention regroupe l'ensemble des prestations réalisées à un temps T. Pa exemple, une entreprise est intervenu le 16 juillet et a réalisé un travail de type enlèvement de bois mort sur certains arbres puis un travail de type abattage sur l'arbre 32.

    - Question Q1 : En effet, il peut y avoirdes interventions de type travail non précédées d’interventions de type expertise car la détection d'une anomalie peut se faire en dehors d'une expertise (par un employé par ex.) donc je dois prévoir cette éventualité.

    - Q2 : La réponse est donnée dans Q1

    -Q3 : C'est très improbable mais je devrai le prendre en compte, on peut imaginer une intervention de type abattage (pour cause de travaux) sur un arbre qui était en bonne santé et n'avait jamis été expertisé.

    Au sujet du reste de vos explications, je pense comprendre le raisonnement mais les répercussions au niveau opérationnel, j'éprouve des difficultés.
    Une contrainte ne me permet pas d'utiliser une clé constituée du couple intervention et expertise (ou Travail) car dans un premier temps, je programmerai des prestations sans connaître les interventions auxquelles elles seront rattachées car elles n'existent pas.


    Je vous remercie très sincèrement de votre aide.

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

Discussions similaires

  1. Besoin d'aide pour MCD de la gestion des SAV
    Par balolo dans le forum Schéma
    Réponses: 6
    Dernier message: 07/12/2007, 16h06
  2. [PHPMyAdmin] Gestion des relations chez Free
    Par grenoult dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 21/12/2006, 18h56
  3. [Frameworks] pour Gestion des utilisateurs...
    Par blackhorus dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 04/04/2006, 05h25
  4. Réponses: 2
    Dernier message: 22/07/2005, 12h06

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