PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Django-Quiz-App-Modell für Multiple-Choice-Fragen

Für ein ordnungsgemäß normalisiertes relationales Datenbankschema benötigen Sie eine eindeutige Choice Modell mit einem Fremdschlüssel auf Question :

class Question(models.Model):
    question = models.CharField(...)

class Choice(models.Model):
    question = models.ForeignKey("Question", related_name="choices")
    choice = modelsCharField("Choice", max_length=50)
    position = models.IntegerField("position")

    class Meta:
        unique_together = [
            # no duplicated choice per question
            ("question", "choice"), 
            # no duplicated position per question 
            ("question", "position") 
        ]
        ordering = ("position",)

Und dann können Sie zu einer Question gelangen 's Auswahlmöglichkeiten mit myquestion.choices.all() (und erhalten Sie die Frage von einer Choice mit mychoice.question ).

Beachten Sie, dass dies die Anzahl der Auswahlmöglichkeiten für eine Frage nicht einschränkt und nicht einmal vorschreibt, dass eine Frage mindestens eine zugehörige Auswahlmöglichkeit hat.

Sofern Sie keinen zwingenden Grund haben, etwas anderes zu tun, ist ein richtig normalisiertes Schema das, was Sie wollen, wenn Sie eine relationale Datenbank verwenden (rdbms sind viel mehr als nur Bitbuckets, sie bieten viel nützlicher Funktionen - solange Sie ein geeignetes Schema haben).