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 :

Problème d'analyse et contrainte


Sujet :

Schéma

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Points : 73
    Points
    73
    Par défaut Problème d'analyse et contrainte
    Bonjour j'ai un problème d'analyse et j'aimerais savoir quelle est la meilleur solution.
    Je m'explique :
    - J'ai une question. une question peut avoir plusieurs réponse
    - Pour une question, une personne peut donner une réponse.
    Laquelle des deux méthode est la plus sur ?

    merci


    PS : J'ai mis aucun attribut pour ne pas encombré le MCD pour le moment
    Images attachées Images attachées   

  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 002
    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 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir,

    Apparemment une réponse n’est pas propre à une personne, elle peut être commune à plusieurs d’entre elles.

    Dans ces conditions, si l’on part du principe qu’une question posée par une personne précède la réponse (unique) à cette question, la table Choix (dérivée de l’entité-type correspondante) doit avoir l’allure suivante (clé primaire soulignée) :

    Choix (PersonneId, QuestionId, RéponseId)
    Pour remonter au niveau MCD, je propose donc de faire de Choix une entité-type associative, identifiée relativement à Personne et à Question.

    MCD correspondant (PowerAMC) :

    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Points : 73
    Points
    73
    Par défaut
    Ne doit pas ton faire une association entre Reponse et question aussi ?
    car une reponse correspond à 1 et une seul question..

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Citation Envoyé par damien77
    une reponse correspond à 1 et une seul question
    La remarque est intéressante, car si une réponse détermine une question, alors la table Choix que j’ai proposée respecte la 3e forme normale, mais pas la BCNF.
    Choix (PersonneId, QuestionId, RéponseId)
    En effet, la dépendance fonctionnelle RéponseId -> QuestionId a pour déterminant RéponseId qui n’est pas clé candidate de la table Choix.

    On peut alors projeter Choix selon deux tables :
    PR (PersonneId, RéponseId)
    RQ (RéponseId, QuestionId)
    Mais on perd une règle de gestion, à savoir que pour une personne et une question il y a au plus une réponse, ce que vous rappelez dans votre premier schéma par une CIF exprimant la contrainte d’unicité :
    Personne X Question -> Réponse
    Attention, je ne suis pas un champion de Merise/2, aussi je ne garantis pas formellement le paragraphe qui suit.

    Concernant la dépendance d’inclusion, elle garantirait qu’une réponse à une question est une réponse donnée par au moins une personne (exact ?), mais il s’ensuivrait un cycle (fâcheux) au niveau tabulaire, et contrairement à la CIF, cette dépendance d’inclusion ne garantit pas l’unicité recherchée, car on pourrait avoir les couples :
    <p1, r1> et <p1, r2> d’une part,
    <r1, q1> et <r2, q1> d’autre part,

    signifiant que p1 fournit deux réponses r1 et r2 à la question q1.
    A mon sens, le second schéma n’est donc pas complet.

    En tout état de cause, l’essentiel est qu’au niveau tabulaire, les contraintes soient garanties.
    On a donc l’alternative :

    1) Conserver la table Choix que j’ai proposée, sans la décomposer, mais en introduisant une contrainte garantissant la DF :
    RéponseId -> QuestionId

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Create Assertion Assert01 Check
        Not Exists 
         (
           Select X.RéponseId
           From   (Select Distinct RéponseId, QuestionId
                   From Choix) As X
           Group By X.RéponseId
           Having Count(*) > 1
         ) ;
    2) Effectuer la projection de la table Choix selon PR et RQ, mais cette fois-ci avec 2 contraintes à programmer, dont l’une introduirait un cycle.

    Dans tout cela, les contraintes sont assurées par des assertions, à l’aide l’instruction Create Assertion (Standard SQL), instruction malheureusement inconnue des SGBDR : il ne reste alors plus que les triggers et autres palliatifs pour réaliser ces contraintes.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

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

Discussions similaires

  1. problème d'unicité de contrainte
    Par youness_ka dans le forum PowerAMC
    Réponses: 3
    Dernier message: 26/11/2013, 15h44
  2. Probléme d' analyse
    Par iflypunk dans le forum Réseau/Web
    Réponses: 7
    Dernier message: 21/12/2007, 14h12
  3. Problème de tableau non contraint en private
    Par shaffe dans le forum Ada
    Réponses: 5
    Dernier message: 11/10/2007, 00h35
  4. [WAMP] Problème d'analyse php
    Par DJ Caësar 9114 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 21/09/2007, 17h18
  5. Problème d'analyse ou de conception
    Par nanou2002 dans le forum Architecture
    Réponses: 4
    Dernier message: 25/10/2006, 17h27

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