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

Requêtes MySQL Discussion :

choix de conception


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Par défaut choix de conception
    Bonjour,

    J'ai besoin d'un conseil sur la conception de mes tables.

    c'est un site avec des questions et des reponses.
    l'utilisateur peux poser une question et proposer des reponses.

    les questions sont independantes les unes des autres.
    Une question peut avoir plusieurs reponses.

    j'ai une table sur les questions, du type:
    ID, Question, Date, PropietaireDeLaQuestion, ...

    et je voulais faire une table de reponses pour chaque question.
    avec par exemple:
    Reponse1, Reponse2, Reponse3, Reponse4, Reponse5
    si il y avait 5 reponses pour la question.
    si il y a moins ou plus de reponses, la table aura plus ou moins de champs.

    Ca me permet de stocker le detail des reponses de tous les utilisateurs.

    mon probleme est que ca ne me semble pas une bonne idee de creer une table a chaque fois que j'ajoute une question. je pourrais faire une seule table pour toutes les reponses si il y avait tjrs le meme nbre de reponses par question, mais ce n'est pas le cas.

    Est-ce qu'il y a une meilleure facon de le faire ?

    merci !

    PS: pour ceux qui ne connaissent pas, un lien interessant sur les bdd http://www.databaseanswers.org/data_models/index.htm

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Bonsoir,

    Ca fait un petit moment que je n'étais pas venu sur le forum MySQL. Par contre, je ne fait que passer...

    Pour le questionnaire, on peut faire comme cela:

    Table question :
    id, enonce, idProprietaire*, dateQuestion, ...

    Table reponse_possible :
    id, idQuestion*, intitule, ...

    Table reponse:
    idQuestion*, idReponse*, idUtilisateur*

    ---------------
    Légende:
    soulignement => clef primaire
    etoile* => clef étrangère
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Par défaut
    merci pour ta reponse

    ca me semble une bonne methode si l'utilisateur ne peut choisir qu'une seule reponse par question. si il peut en choisir plus (de 1 a l'infini theroiquement, ca depend des questions...) et bien ta proposition ne fonctionne plus, je pense

  4. #4
    Membre chevronné Avatar de supernova
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 447
    Par défaut
    Bonjour,

    une table question :
    idQuestion, libelleQuestion, texteQuestion (clé idQuestion)

    une table reponse :
    idReponse, libelleReponse, texteReponse (clé idReponse)

    une table de jointure
    idQuestion, idReponse (clé idQuestion,idReponse)

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Citation Envoyé par bibile
    ca me semble une bonne methode si l'utilisateur ne peut choisir qu'une seule reponse par question. si il peut en choisir plus (de 1 a l'infini theroiquement, ca depend des questions...) et bien ta proposition ne fonctionne plus, je pense
    Faux. Voici les deux cas de figure:

    1) Plusieurs réponses possibles par question:

    Table reponse:
    idQuestion*, idUtilisateur*, idReponse*


    2) Une seule réponse possible par question:

    Table reponse:
    idQuestion*, idUtilisateur*, idReponse*


    La différence se situe au niveau des champs constituant la clef primaire.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Par défaut
    Citation Envoyé par pcaboche
    Faux. Voici les deux cas de figure:

    1) Plusieurs réponses possibles par question:
    Table reponse:
    idQuestion*, idUtilisateur*, idReponse*


    2) Une seule réponse possible par question:
    Table reponse:
    idQuestion*, idUtilisateur*, idReponse*


    La différence se situe au niveau des champs constituant la clef primaire.
    ha
    je crois que j'ai compris.
    dans le cas d'un site ou on peut avoir 1 ou plusieurs reponses par questions, alors il faut utiliser idQuestion*, idUtilisateur*, idReponse*
    sinon, il faut utiliser idQuestion*, idUtilisateur*, idReponse*

    ok. je vais reflechir un peu plus a ta solution, parce qu'il faut aussi que les tables soient definies de facon a faciliter le traitement par la suite.

    d'une maniere generale, est-ce que tu peux me confirmer qu'il vaut mieux avoir qques tres grandes tables plutot qu'un tres grand nbre de petites tables ?
    merci !

    -> supernova : je ne comprends pas la difference entre Libellé et Texte dans ton exemple.

  7. #7
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Citation Envoyé par bibile
    ha
    je crois que j'ai compris.
    dans le cas d'un site ou on peut avoir 1 ou plusieurs reponses par questions, alors il faut utiliser idQuestion*, idUtilisateur*, idReponse*
    sinon, il faut utiliser idQuestion*, idUtilisateur*, idReponse*
    Ce qui serait bien, ce serait que tu aies compris pourquoi on a ces deux réponses différentes (avec des exemples pour argumenter) et de comprendre comment on en est arrivé à ce résultat.


    Citation Envoyé par bibile
    ok. je vais reflechir un peu plus a ta solution, parce qu'il faut aussi que les tables soient definies de facon a faciliter le traitement par la suite.
    Ca dépend de ton problème (combien de réponses possibles (min-max) pour chaque question ? Peut-on donner plusieurs réponses? Si oui, combien au maximum? Est-ce que le modèle sera amené à évoluer? Quel type de traitement on souhaite effectuer par la suite? etc.).

    Voilà donc la solution générale (peut faire face à tous les cas de figure et est donc évolutive).



    Citation Envoyé par bibile
    d'une maniere generale, est-ce que tu peux me confirmer qu'il vaut mieux avoir qques tres grandes tables plutot qu'un tres grand nbre de petites tables ?
    merci !
    Déjà, il faut savoir ce que l'on entend par "grand":
    - ça peut être "grand" de par la taille des enregistrements. Ici, ce n'est pas la cas, les différentes clefs étant des entiers, or les entiers, ça ne prend pas beaucoup de place... (2 à 4 octets, c'est pas la mer à boire...)
    - ça peut être "grand" de par le nombre d'enregistrements, mais une base de données, c'est un peu fait pour ça à la base... (dans la limite du raisonnable)


    Multiplier le nombre de tables (genre une table par question) n'est pas une bonne chose. Déjà, ce n'est pas correct sur le plan de la conception. Ensuite, je crois qu'il doit y avoir des limitations sur le nombre de tables que l'on peut créer dans une BDD. Enfin, si c'est pour une question de traitement, sache qu'il y a les index qui sont fait pour cela et qui accélèrent les recherches et les jointures.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

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

Discussions similaires

  1. Choix de conception d'un script Perl
    Par mensoif dans le forum Langage
    Réponses: 4
    Dernier message: 30/04/2009, 09h52
  2. choix de conception pour un objet
    Par babedt dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 16/05/2008, 17h22
  3. [Choix de Conception] JSF vs API JavaScript
    Par Jedy dans le forum JSF
    Réponses: 3
    Dernier message: 20/12/2007, 15h47
  4. Choix de conception
    Par Seb33300 dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/11/2007, 15h22
  5. Eclaircissements sur choix de conception
    Par sozie9372 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/06/2006, 14h02

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