Je suis en train de concevoir un schéma pour une simple application de quiz. Il a 2 tables - "Question" et "Choix de réponse". La table des questions contient les colonnes "ID de la question", "Texte de la question" et "ID de la réponse". Le tableau "Choix de réponse" contient les colonnes "ID de question", "ID de réponse" et "Texte de réponse". Avec ce schéma simple, il est évident qu'une question peut avoir plusieurs choix de réponses & d'où la nécessité de la table de choix de réponses. Cependant, une question ne peut avoir qu'une seule réponse correcte et, par conséquent, le besoin d'un «ID de réponse» dans le tableau de questions. Cependant, cette colonne "ID de réponse" dans le tableau des questions donne l'illusion qu'il peut y avoir plusieurs questions pour une seule réponse qui n'est pas correcte. L'autre alternative pour éliminer cette illusion est d'avoir une autre table juste pour la réponse correcte qui aura seulement 2 colonnes à savoir l'ID de la question et l'ID de réponse avec une relation 1-1 entre les deux tables. Cependant, je pense que c'est redondant. Toute recommandation sur la meilleure façon de concevoir ceci, en appliquant ainsi les règles selon lesquelles une question peut avoir plusieurs choix de réponses mais seulement une bonne réponse? Merci beaucoup.Conception de base de données - question de relation de table
Répondre
Perdez la colonne AnswerID
du tableau Question
. Vous créez une référence circulaire (sorte de). Au lieu de cela, avoir une colonne bit (boolean) IsCorrect
dans la table Answer
. Cela vous permettra également d'avoir plusieurs réponses correctes à l'avenir si vous en avez besoin. Par le point de Matti, un déclencheur sur INSERT/UPDATE d'un enregistrement de réponse appliquera la règle de réponse correcte zéro ou un par question.
Cela vous oblige cependant à créer des règles supplémentaires pour appliquer qu'une seule réponse pour chaque question peut être marquée comme correcte. –
@Matti - bon point. Un déclencheur INSERT/UPDATE ferait l'affaire. –
le champ Bit IsCorrect dans le tableau des choix est l'approche la plus flexible car vous pouvez, si nécessaire à l'avenir, avoir plusieurs réponses correctes pour une question simplement en basculant une valeur de champ 0 ou 1. –
Que diriez-vous juste de nommer la colonne CorrectAnswerId
? Je doute que quelqu'un puisse le confondre avec quoi que ce soit d'autre.
+1 Plus simple que ma solution! –
@Bob +1 pour reconnaître ceci, pas commun sur SO – xandercoded
Je suppose que vous me demandez de renommer le nom de colonne dans le tableau de questions en "CorrectAnswerID". Je peux certainement le faire mais je suppose que cela ne change toujours pas le problème original. Il apparaîtra toujours comme si la table des choix de réponses a une relation 1: N avec la table des questions. Ce n'est pas un gros problème. Je voulais juste savoir s'il y avait un meilleur design compte tenu de mes exigences. – naivnomore
Trois tables (parce que vous pouvez avoir beaucoup de "Oui" "Non", pourquoi dupliquer cela, et vous pouvez changer plus tard un "Non" en un "Nop" facilement). le tableau questions_answers
cartographie certaines réponses à certaines questions. (C'est une relation de plusieurs à plusieurs).
questions:
- id
- Description
- correct_answer_id
réponses:
- id
- Description
questions_answers:
- question_id
- answer_id
vous pouvez également considérer une autre table pour identifier les utilisateurs et une autre pour identifier quelles réponses un utilisateur donné a choisi ... – Randy
des questions
- id
- QUESTION_TEXT
1, "left or right?"
answer_choices
- id
- question_id
- answer_text
- correct
1, 1, "left", 1 2, 1, "right", 0
répond
- id
- question_id
- user_id
- answer_ch oices_id
1, 1, 1234, 2 // wrong! 1, 1, 5678, 1 // yay
Donc, en gros vous devez d'abord interroger la question de la table questions
, puis interroger les réponses possibles de la table answer_choices
qui sont liés à la question par question_id
. Quand une réponse a été donnée, vous prenez le answer_choices_id
sélectionné et le comparez avec le tableau answer_choices
pour voir si correct
est 1 ou 0.
Que fait l'identification sur le tableau de réponses? –
Simplement un identifiant unique pour la réponse d'un utilisateur. Si c'est utile dépend de l'utilisation. Vous pouvez également le supprimer et utiliser 'question_id' combiné avec' user_id' pour l'identifier. – Alec
Avoir un champ correct dans le tableau des choix de réponses laisse trop de trous puisqu'il n'y a qu'une seule réponse correcte à n'importe quelle question. Au lieu de cela, vous pouvez avoir le champ correct dans la table des questions ou créer une autre table avec juste l'ID de la question et le champ correct. Cependant, mon problème n'est pas ça. Comment pouvons-nous concevoir ces tableaux de manière à ce qu'il n'y ait pas de redondance ou de doublons. – naivnomore
- 1. Question de conception de base de données
- 2. question de conception de base de données
- 3. question base de données de conception MySQL
- 4. Question de conception de base de données
- 5. Base de données de conception de téléchargement de données question
- 6. Conception de table de base de données
- 7. Base de données question de conception
- 8. Base de données de conception
- 9. Newbie rails base de données relation question
- 10. Question sur la conception de la base de données
- 11. Conception de base de données - ERD. Modélisation Question
- 12. Problème de conception de la base de données (ou question)
- 13. Problème de conception de base de données
- 14. Question de conception de table SQLite
- 15. Question de modèle de conception de base de données relationnelle - base de données Massive Read Only
- 16. Question de conception de base de données MySQL Drupal
- 17. Conception de l'entreposage de données Question
- 18. conception de la base de données - normalisation de la table
- 19. document/image Base de données de conception du référentiel Question
- 20. Question sur la conception de la base de données
- 21. Base de données de conception clés étrangères
- 22. Conception de base de données MySQL - table des relations
- 23. Plusieurs à plusieurs question de conception de table
- 24. Concepts de conception de base de données
- 25. Question de conception de base de données avec des boîtes de message
- 26. Conception de base de données non structurée
- 27. Conception de base de données d'inventaire
- 28. Conception de base de données - Clarification
- 29. question de dépendances fonctionnelles dans la conception de base de données relationnelle
- 30. Base de données MySQL - Résultats associés de la même table/Problème de conception de base de données Many to Many
Quoi que vous fassiez, peu importe ce que vous choisissez, s'il vous plaît, pour l'amour de dieu, n'appelle pas le PK de chaque ID de table. –
@Stephanie Page: S'il vous plaît, pour l'amour de Dieu, pourquoi le dites-vous? – naivnomore
Pas assez de place dans un commentaire pour une dissertation complète mais ... disons que vous avez une requête de table multiple (disons 5). Vous avez cinq colonnes toutes nommées exactement les mêmes, toutes signifiant des choses complètement différentes. Accepteriez-vous cela pour toute autre colonne? Accepteriez-vous que la colonne "COST" signifie 5 choses différentes dans cinq tableaux différents? Voudriez-vous les appeler "TOTAL_COST", "DIRECT_COST", "AVERAGE_COST", etc? Alors pourquoi le feriez-vous avec ID? C'est juste une liste de raisons de ne pas le faire. Et les gens de l'autre côté n'ont qu'un seul argument, les frappes au clavier. En ce jour, c'est une mauvaise excuse. –