149 Stimmen

Datenbankentwurf für eine Umfrage

Ich muss eine Umfrage erstellen, deren Antworten in einer Datenbank gespeichert werden. Ich frage mich nur, wie ich dies am besten in der Datenbank implementieren kann, insbesondere die erforderlichen Tabellen. Die Umfrage enthält verschiedene Arten von Fragen. Zum Beispiel: Textfelder für Kommentare, Multiple-Choice-Fragen und möglicherweise Fragen, die mehr als eine Antwort enthalten können (z. B. alles ankreuzen, was zutrifft).

Ich habe mir zwei mögliche Lösungen einfallen lassen:

  1. Erstellen Sie eine riesige Tabelle, die Folgendes enthält die Antworten für jede Umfrage Eingabe enthält. Jede Spalte würde entspricht einer Antwort aus der Umfrage entsprechen, z. B. SurveyID, Answer1, Antwort2, Antwort3

    Ich glaube nicht, dass dies der beste Weg ist. da es eine Menge Fragen gibt in dieser Umfrage und scheint nicht sehr flexibel, wenn sich die Umfrage ändern soll.

  2. Die andere Sache, an die ich dachte, war eine Tabelle mit Fragen und Antworten Tabelle. Die Fragetabelle würde enthält alle Fragen für die Umfrage enthalten. Die Antworttabelle enthält einzelne Antworten aus der Umfrage, wobei jede Zeile mit einer Frage verknüpft ist.

    Ein einfaches Beispiel:

    tblSurvey : UmfrageID

    tblFrage : QuestionID, UmfrageID , QuestionType, Frage

    tblAntwort : AntwortID, Benutzer-ID , FrageID , Antwort

    tblBenutzer : BenutzerID, Benutzernamen

    Mein Problem dabei ist, dass es Tonnen von Antworten geben könnte, was die die Antworttabelle ziemlich groß wird. Ich bin nicht sicher, ob das so toll ist, wenn es die Leistung angeht.

Ich würde mich über jede Idee und jeden Vorschlag freuen.

0 Stimmen

Wie viel ist "ziemlich viel"? Geben Sie uns eine Schätzung, sprechen wir von einer Million oder von tausend Millionen?

1 Stimmen

SQL-Server sind eigentlich für die Arbeit mit "Tonnen" von Daten konzipiert. Sie sollten keine großen Probleme haben, mit dem von Ihnen erwähnten Schema zu arbeiten.

1voto

Shiraz Bhaiji Punkte 62129

Der zweite Ansatz ist der beste.

Wenn Sie es weiter normalisieren wollen, können Sie eine Tabelle für Fragetypen erstellen

Die einfachen Dinge, die zu tun sind, sind:

  • Legen Sie die Datenbank und das Protokoll auf einer eigenen Festplatte ab, nicht alle auf C wie standardmäßig
  • Erstellen Sie die Datenbank so groß wie nötig, damit Sie keine Pausen einlegen müssen, während die Datenbank wächst.

Wir haben Protokolltabellen in SQL Server Table mit 10 Millionen Zeilen gehabt.

1voto

mriiiron Punkte 107

Sie können das gesamte Formular als JSON-String speichern.

Ich bin mir nicht sicher, was Ihre Anforderungen betrifft, aber unter bestimmten Umständen könnte dieser Ansatz funktionieren.

0voto

Ben Fransen Punkte 10746

Sieht ziemlich vollständig aus für eine kleine Umfrage. Vergessen Sie nicht, eine Tabelle für "offene Werte" hinzuzufügen, in der ein Kunde seine Meinung über ein Textfeld abgeben kann. Verknüpfen Sie diese Tabelle mit einem Fremdschlüssel mit Ihrer Antwort und setzen Sie Indizes auf alle Ihre relationalen Spalten, um die Leistung zu erhöhen.

1 Stimmen

Gibt es einen Grund, warum ich die Kommentare nicht auch in die Antworttabelle einfügen kann?

0voto

Larry Lustig Punkte 47313

Nummer 2 ist richtig. Verwenden Sie das richtige Design, bis Sie ein Leistungsproblem feststellen. Die meisten RDBMS haben kein Problem mit einer schmalen, aber sehr langen Tabelle.

0voto

Dave Swersky Punkte 34052

Ein großer Antworttisch ist an sich kein Problem. Solange die Indizes und Beschränkungen gut definiert sind, sollte alles in Ordnung sein. Ihr zweites Schema sieht für mich gut aus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X