Grüße an die Stacker,
Ich versuche, das beste Datenbankschema für eine Anwendung zu finden, mit der Benutzer Umfragen erstellen und sie der Öffentlichkeit präsentieren können. Es gibt eine Reihe "standardmäßiger" demografischer Felder, die in den meisten Umfragen (aber nicht in allen) enthalten sein werden, wie Vorname, Nachname usw. Und natürlich können die Benutzer eine unbegrenzte Anzahl von "benutzerdefinierten" Fragen erstellen.
Das erste, woran ich dachte, war so etwas wie das hier:
Survey
ID
SurveyName
SurveyQuestions
SurveyID
Question
Responses
SurveyID
SubmitTime
ResponseAnswers
SurveyID
Question
Answer
Aber das wird jedes Mal nerven, wenn ich Daten abfragen will. Und es scheint gefährlich nahe an Innerer Plattformeffekt
Eine Verbesserung wäre es, so viele Felder wie möglich im Voraus in die Antworttabelle aufzunehmen:
Responses
SurveyID
SubmitTime
FirstName
LastName
Birthdate
[...]
Dann ist zumindest die Abfrage von Daten aus diesen gemeinsamen Spalten einfach, und ich kann z. B. das Durchschnittsalter aller Personen abfragen, die jemals an einer Umfrage teilgenommen haben, bei der sie ihr Geburtsdatum angegeben haben.
Aber es scheint, dass dies den Code etwas verkomplizieren wird. Um zu sehen, welche Fragen in einer Umfrage gestellt werden, muss ich jetzt prüfen, welche allgemeinen Antwortfelder aktiviert sind (ich schätze, mit einem Bitfeld in Survey) UND was in der Tabelle SurveyQuestions steht. Und ich muss mich um Sonderfälle kümmern, z. B. wenn jemand versucht, eine "benutzerdefinierte" Frage zu erstellen, die eine "allgemeine" Frage in der Tabelle "Antworten" dupliziert.
Ist das das Beste, was ich tun kann? Übersehe ich etwas?