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 :

Stocker des mesures -> Association ternaire ? [MCD]


Sujet :

Schéma

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 58
    Par défaut Stocker des mesures -> Association ternaire ?
    Bonjour tout le monde,

    Je voudrais réaliser une application PHP/MySQL qui me permettrait de stocker des mesures dans un BdD.
    Je vais essayer de faire simple et concis :
    • Il existe plusieurs types de mesures, chacune d'elle pouvant être brute ou traitée (par exemple débruitée)
    • les mesures traitées dérivent d'une mesure brute. End'autres termes, une mesure est brute si, et seulement si, elle n'a subi aucun traitement. D'où la nécessité d'établir une association entre une mesure brute et une mesure traitée.

    Ci-joint une ébauche du MCD, réalisée avec Dia (les losanges devraient être des ellipses, mais la méthode MERISE n'est apparement pas supportée par Dia...). Les cardinalités n'y figurent pas, car je ne suis même pas sûr de mon schéma !
    En effet :
    1. Ai-je bien fait de décrire une association ternaire entre les entités "Type_traitement" et "Mesure" ?
    2. Dois-je plutôt distinguer mesures brutes et mesures traitées en créant 2 entités différentes ?
    3. Ou bien, devrais-je ajouter un attribut booléen dans l'entité "Type_Mesure", qui signalerait si la donnée est brute ou traitée ?


    Merci d'avance pour votre aide !
    Images attachées Images attachées  

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 815
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par menas Voir le message
    • Il existe plusieurs types de mesures, chacune d'elle pouvant être brute ou traitée (par exemple débruitée)

    Ca veut dire que 'brute' et 'traitée' sont les deux seuls types de mesure ?

    • les mesures traitées dérivent d'une mesure brute. End'autres termes, une mesure est brute si, et seulement si, elle n'a subi aucun traitement. D'où la nécessité d'établir une association entre une mesure brute et une mesure traitée.

    Ceci beut-il dire qu'on conserve les donnée de la mesure brute après son traitement ?
    Ci-joint une ébauche du MCD, réalisée avec Dia (les losanges devraient être des ellipses, mais la méthode MERISE n'est apparement pas supportée par Dia...). Les cardinalités n'y figurent pas, car je ne suis même pas sûr de mon schéma !
    Tu peux utiliser le logiciel de modélisation OpenModelsphere.

    En effet :
    1. Ai-je bien fait de décrire une association ternaire entre les entités "Type_traitement" et "Mesure" ?
    2. Dois-je plutôt distinguer mesures brutes et mesures traitées en créant 2 entités différentes ?
    3. Ou bien, devrais-je ajouter un attribut booléen dans l'entité "Type_Mesure", qui signalerait si la donnée est brute ou traitée ?

    Si les types de traitements sont ce que tu as appelé précédemment des types de mesures et que ceux-ci ne sont et ne seront toujours que 'brute' ou 'traitée', un simple booléen suffit.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 58
    Par défaut
    Salut, et merci pour ta réponse


    Ca veut dire que 'brute' et 'traitée' sont les deux seuls types de mesure ?
    Non, il y a plusieurs types de mesures, par exemple I=f(Vc), I=f(Vt,t), I=F(Vc,Vrf)...bref, on obtient des graphiques de natures différentes. Chacun de ces types de mesure peut subir un traitement (comme un débruitage par exemple)

    Ceci veut-il dire qu'on conserve les donnée de la mesure brute après son traitement ?
    Tout à fait, la mesure traitée n'écrase PAS la mesure brute. On crée une (ou des) nouvelle(s) mesure(s) : la(les) mesure(s) traitée(s).

    Si les types de traitements sont ce que tu as appelé précédemment des types de mesures et que ceux-ci ne sont et ne seront toujours que 'brute' ou 'traitée', un simple booléen suffit.
    Il est dans tous les cas, nécessaire d'associer une mesure brute à sa "fille" qui a été traitée. Si j'opte pour l'attribut booléen dans une unique entité "MESURE", alors une association réflexive est nécessaire. Ce qui nous amène à l'association ternaire entre "TYPE TRAITEMENT" et "MESURE".
    Or, je me demande si cette modélisation est normalisée. A vrai dire, je la trouve un peu tordue, et je flippe que ça pose des problèmes de cohérence.
    De plus, j'ai lu que ce type de topologie (association ternaire) est difficile à implémenter (difficultés au niveau des cardinalités)
    BREF, tu penses que c'est normalisé ?

    Thx

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 815
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par menas Voir le message
    Non, il y a plusieurs types de mesures, par exemple I=f(Vc), I=f(Vt,t), I=F(Vc,Vrf)...bref, on obtient des graphiques de natures différentes.
    Donc on a le MCD suivant :
    type_mesure -0,n----typer----1,1- mesure

    Chacun de ces types de mesure peut subir un traitement (comme un débruitage par exemple)
    Soyons précis de nouveau : Sont-ce les types de mesures qui peuvent subir des traitements ou les mesures ?
    Autrement dit, une mesure étant d'un certain type subira t-elle toujours les mêmes traitements ou bien les traitements sont différents selion des mesures de même type ?

    Tout à fait, la mesure traitée n'écrase PAS la mesure brute. On crée une (ou des) nouvelle(s) mesure(s) : la(les) mesure(s) traitée(s).
    Petite subtilité ici...
    Si on s'en tient au sens direct, en différenciant les mesures brutes et les mesures traitées, on a ce MCD :
    Mesure (brute) -0,n----engendrer----1,1- Mesure (traitée)

    Mais si une mesure traitée a les mêmes attributs qu'une mesure brute, alors c'est une seule entité pour les deux catégories de mesures et il faut passer au MCD suivant :
    Mesure (brute) -0,n----engendrer----0,1- Mesure (traitée)

    J'ai laissé les parenthèses pour plus de clarté. Eventuellement, elles pourraient dans un vrai MCD se transformer en rôles sur les branches de l'association.

    Ce dernier MCD se traduirait par :
    "Une mesure (brute) peut engendrer plusieurs mesures (traitées) et une mesure (traitée) peut être engendrée par une seule autre mesure (brute)."

    Dans le premier cas, la table Mesure_traitee aurait une clé étrangère référençant la mesure brute qui l'a engendrée.
    Dans le second cas, le couple de cardinalités {0,n - 0,1} engendrera normalement une table associative, comme dans le cas du couple {0,n - 0,n}.

    Il est dans tous les cas, nécessaire d'associer une mesure brute à sa "fille" qui a été traitée.
    D'après la phrase précédemment citée, une mesure brute peut engendrer plusieurs mesures filles. C'est donc plutôt la fille qui doit référencer sa mère et pas l'inverse. Ce qui veut sire que, si on met une clé étrangère faisant référence à la mesure mère dans la table des mesures, toutes les mesures brutes auront cette clé étrangère à NULL, ce qui n'est pas terrible. fsmrel dirait je crois que la thorie relationnelle l'interdit.

    C'est pour cela que normalement on se retrouve dans le cas du second MCD et il y aura une table associative.

    [quote]Si j'opte pour l'attribut booléen dans une unique entité "MESURE", alors une association réflexive est nécessaire. Ce qui nous amène à l'association ternaire entre "TYPE TRAITEMENT" et "MESURE".[quote]
    Le booléen n'est plus nécessaire.
    On peut compléter le MCD :
    type_mesure -0,n----typer----1,1- mesure
    |--------------------1,n----générer----1,1- traitement

    A voir si un traitement ne s'applique qu'à un seul type de mesure ou s'il peut s'appliquer à plusieurs pour déterminer les cardinalités.

    Maintenant, on change l'association 'engendrer' en 'traiter' :
    Mesure -0,n--(brute)--traiter---(traitée)-0,1- Mesure
    Traitement -0,n------------|

    Il faut ajouter dans le MCD une contrainte d'inclusion entre les associations 'traiter' et 'typer' pour le traitement corresponde au type de mesure.

    je flippe que ça pose des problèmes de cohérence.
    La contrainte sur le MCD doit se gérer au niveau BDD par une contrainte CHECK.
    Si le SGBD ne supporte pas les contraintes CHECK (MySQL), alors il faut sans doute passer par un trigger. Je n'ai jamais eu encore à mettre ce genre de truc en place.

    De plus, j'ai lu que ce type de topologie (association ternaire) est difficile à implémenter (difficultés au niveau des cardinalités)
    Bof, je viens de le faire ci-dessus pour les cardinalités.

    Au niveau des tables, ça donne ceci pour les premières :
    type_mesure (tm_id, tm_libelle, tm_description)
    mesure (m_id, m_id_type, m_date...)
    traitement (t_id, t_libelle, t_description)
    tm_generer_t (tmt_id_traitement, tmt_id_type_mesure)

    Pour la table issue de l'association 'traiter', la mesure traitée n'apparaît qu'une fois. Elle peut donc constituer seule la clé primaire :
    traiter (trt_id_mesure_traitee, trt_id_mesure_brute, trt_id-traitement...)
    Si une mesure brute ne peut subir qu'une seule fois un certain traitement pour engendrer une seule mesure traitée, alors il faudra ajouter une contrainte d'unicité sur le couple {trt_id_mesure_brute, trt_id-traitement}.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 58
    Par défaut
    Tout d'abord, merci encore pour le temps que vous me consacrez !

    type_mesure -0,n----typer----1,1- mesure
    Tout à fait d'accord ! Je débute, ça me prend un peu de temps pour acquérir les automatismes, mais j'ai finalement trouvé pareil.
    ________________________________________________
    Soyons précis de nouveau : Sont-ce les types de mesures qui peuvent subir des traitements ou les mesures ?
    Autrement dit, une mesure étant d'un certain type subira t-elle toujours les mêmes traitements ou bien les traitements sont différents selion des mesures de même type ?
    Les traitements peuvent être différents pour des mesures qui sont du même type. Les traitements peuvent également être les mêmes pour des mesures de types différents. Les mesures subissent des traitements indépendamment de leur type_mesure.

    J'obtiens les cardinalités suivantes (j'ai un doute sur le "c.", mais je crois aue c'est bon...)

    Association “Traiter”:
    a. Une mesure peut ne subir aucun traitement.
    b. Une mesure peut subir plusieurs traitements.
    c. Un traitement peut être défini dans la base de données sans qu’il ne soit appliqué sur une mesure.
    d. Un même traitement peut être appliqué sur plusieurs mesures.

    Ce qui donnerait :

    type_traitement -0,n----traiter----0,n- mesure
    ________________________________________________
    Pour ce qui est de l'association "Engendrer", tu me suggères donc de garder une même entité "Mesure", qu'elle soit traitée ou non, mais par contre d'ajouter une association réflexive "Engendrer", comme sur le schéma ci-joint ?
    Dans ce cas les cardinalités seraient définies comme suit :
    a. Une mesure traitée est egendrée par au moins une mesure brute
    b. Une mesure traitée peut être engendrée par plusieurs mesures brutes (concaténation des données brutes)
    c. Une mesure brute peut ne pas être traitée
    d. Une mesure brute peut engendrer plusieurs mesures traitées différentes

    Mesure (brute) -0,n------Engendrer-----1,n--Mesure (traitée)

    Dans le MCD, s'agissant, d'une association réflexive, les cardinalités sont donc permutables, n'est-ce pas ?

    Du coup, le MCD ci-joint est normalisé ?

    Merci
    Images attachées Images attachées  

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 815
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par menas Voir le message
    Les traitements peuvent être différents pour des mesures qui sont du même type. Les traitements peuvent également être les mêmes pour des mesures de types différents. Les mesures subissent des traitements indépendamment de leur type_mesure.

    J'obtiens les cardinalités suivantes (j'ai un doute sur le "c.", mais je crois aue c'est bon...)

    Association “Traiter”:
    a. Une mesure peut ne subir aucun traitement.
    b. Une mesure peut subir plusieurs traitements.
    c. Un traitement peut être défini dans la base de données sans qu’il ne soit appliqué sur une mesure.
    d. Un même traitement peut être appliqué sur plusieurs mesures.

    Ce qui donnerait :

    type_traitement -0,n----traiter----0,n- mesure
    En fait si je comprends bien, le traitement effectué sur une mesure ne dépend pas spécialement du type de la mesure.
    Mon association suivante est donc inutile :
    type_mesure -1,n----générer----1,1- traitement
    ________________________________________________
    Pour ce qui est de l'association "Engendrer", tu me suggères donc de garder une même entité "Mesure", qu'elle soit traitée ou non, mais par contre d'ajouter une association réflexive "Engendrer", comme sur le schéma ci-joint ?
    Oui pour l'association réflexive mais qui est en fait direcetement une ternaire avec l'entité que tu as appelée 'type_traitement'.
    Mesure -0,n--(brute)-----------traiter---(traitée)-0,1- Mesure
    Type_Traitement -0,n------------|

    Dans ce cas les cardinalités seraient définies comme suit :
    a. Une mesure traitée est egendrée par au moins une mesure brute
    b. Une mesure traitée peut être engendrée par plusieurs mesures brutes (concaténation des données brutes)
    Ca je ne l'avais pas compris de ta description précédente !

    c. Une mesure brute peut ne pas être traitée
    d. Une mesure brute peut engendrer plusieurs mesures traitées différentes
    Ca j'avais compris !

    Mesure (brute) -0,n------Engendrer-----1,n--Mesure (traitée)
    Oui sur ce morceau.

    Dans le MCD, s'agissant, d'une association réflexive, les cardinalités sont donc permutables, n'est-ce pas ?
    Ben en fait pour comprendre dans quel sens l'association fonctionne, il faut ajouter les rôles sur les branches, comme tu l'as fait ci-dessus. Du coup, les cardinalités ne sont plus permutables ! On dit que cette association est réflexive parce qu'elle porte sur une seule entité.

    Du coup, le MCD ci-joint est normalisé ?
    Dans ton MCD, il me semble qu'il reste un problème :
    Si je fais subir à une mesure brute plusieurs traitements. Ca va engendrer plusieurs mesures traitées. On pourra retrouver de quelle mesure brute vient la mesure traitée mais on ne sait pas par quel traitement car tu as deux associations distinctes.
    Il me semble que la ternaire est meilleure.

    Compte tenu de cet élément nouveau pour moi :
    a. Une mesure traitée est egendrée par au moins une mesure brute
    b. Une mesure traitée peut être engendrée par plusieurs mesures brutes (concaténation des données brutes)
    Mon association ternaire deviendrait celle-ci :
    Mesure -0,n--(brute)-----------traiter---(traitée)-0,n- Mesure
    Type_Traitement -0,n------------|

    Du coup la table qui en découle aura une clé primaire triple :
    traiter (trt_id_mesure_traitee, trt_id_mesure_brute, trt_id-traitement...)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

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

Discussions similaires

  1. Affichage des mesures et dimensions associées
    Par bssouf21 dans le forum Power BI
    Réponses: 1
    Dernier message: 02/07/2012, 10h17
  2. [LV 8.6.1] "stocker" des mesures d'un VI à un autre
    Par Quent' dans le forum LabVIEW
    Réponses: 10
    Dernier message: 16/12/2009, 14h52
  3. Stocker des infos en local
    Par manu00 dans le forum Bases de données
    Réponses: 6
    Dernier message: 05/06/2004, 22h47
  4. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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