Semantisches Datenmodell für eine Online‑Umfrage
Übersicht
Das folgende semantische Datenmodell beschreibt die Struktur und Beziehungen der Entitäten, die für die Verwaltung und Durchführung einer Online‑Umfrage erforderlich sind. Es umfasst die Definition von Umfragen, Fragen, Antwortoptionen, Umfrageergebnissen sowie optionalen personenbezogenen Angaben der teilnehmenden Personen.
- Survey: Enthält Metadaten einer konkreten Umfrage.
- Question: Definiert die einzelnen Fragen einer Umfrage.
- AnswerOption: Repräsentiert vorgegebene Antwortmöglichkeiten je Frage.
- SurveyResponse: Speichert eine ausgefüllte Umfrage.
- ResponseAnswer: Verknüpft ein Umfrageergebnis mit den Antworten zu den Fragen.
- Respondent: Optionale, personenbezogene Angaben einer teilnehmenden Person.
- Enumerationen: GenderEnum, AgeGroupEnum, QuestionTypeEnum.
erDiagram
Survey ||--o{ Question : "enthält"
Question ||--o{ AnswerOption : "hat"
SurveyResponse ||--|| Survey : "gehört zu"
SurveyResponse ||--|{ ResponseAnswer : "besteht aus"
ResponseAnswer ||--|| Question : "beantwortet"
ResponseAnswer }o--|| AnswerOption : "wählt"
SurveyResponse }o--|| Respondent : "zugeordnet zu"
Respondent }o--|| GenderEnum : "hat"
Respondent }o--|| AgeGroupEnum : "hat"
Question }o--|| QuestionTypeEnum : "hat"
Entitäten
Survey
| Attribut | Datentyp | PK | FK | Pflicht? | Beschreibung | Hinweise/Constraints |
|---|
| SurveyID | UUID | x | | ja | Eindeutige Kennung der Umfrage. | Generiert als UUID. |
| Title | String (max. 200) | | | ja | Titel der Umfrage. | Nicht leer; getrimmt. |
| Description | Text (max. 2000) | | | nein | Ausführliche Beschreibung und Zweck der Umfrage. | Optional; getrimmt. |
| StartDate | Datum | | | nein | Startdatum, ab dem die Umfrage aktiv ist. | ISO‑8601 (YYYY‑MM‑DD). |
| EndDate | Datum | | | nein | Enddatum, bis zu dem die Umfrage beantwortet werden kann. | ISO‑8601 (YYYY‑MM‑DD); ≥ StartDate. |
| CreatedBy | String (max. 100) | | | ja | Ersteller (z. B. Name oder Organisation). | Nicht leer; getrimmt. |
| CreatedAt | Datum/Zeit | | | ja | Zeitstempel der Erstellung. | Automatisch gesetzt; ISO‑8601 (UTC). |
Question
| Attribut | Datentyp | PK | FK | Pflicht? | Beschreibung | Hinweise/Constraints |
|---|
| QuestionID | UUID | x | | ja | Eindeutige Kennung der Frage. | Generiert als UUID (UUIDv4). |
| SurveyID | UUID | | x | ja | Fremdschlüssel zur Umfrage, zu der die Frage gehört. | FK; verweist auf existierende Survey. |
| OrderNumber | Integer | | | ja | Reihenfolge der Frage innerhalb der Umfrage. | Ganzzahl ≥ 1; eindeutig je Survey. |
| QuestionText | Text (max. 1000) | | | ja | Formulierung der Frage. | Nicht leer; getrimmt. |
| QuestionType | Enum | | | ja | Typ der Frage. Bestimmt, ob Bewertungsskala, Auswahl oder Freitext zulässig ist. | Siehe Enum QuestionTypeEnum |
| IsMandatory | Boolean | | | ja | Gibt an, ob die Frage verpflichtend beantwortet werden muss. | |
AnswerOption
| Attribut | Datentyp | PK | FK | Pflicht? | Beschreibung | Hinweise/Constraints |
|---|
| OptionID | UUID | x | | ja | Eindeutige Kennung der Antwortoption. | Generiert als UUID (UUIDv4). |
| QuestionID | UUID | | x | ja | Fremdschlüssel zur zugehörigen Fragestellung. | FK; verweist auf existierende Question. |
| OptionText | String (max. 200) | | | ja | Text der Antwortoption (z. B. „Sehr gut“). | Nicht leer; getrimmt. |
| Value | String (max. 100) | | | ja | Wert, der intern für die Option gespeichert wird. | Eindeutig je Question; Regex: ^[A-Za-z0-9_-]+$. |
| IsOtherOption | Boolean | | | nein | Kennzeichnet, ob es sich um eine Freitext‑Option handelt. | Bei „Open“‑Fragen auf true gesetzt. |
SurveyResponse
| Attribut | Datentyp | PK | FK | Pflicht? | Beschreibung | Hinweise/Constraints |
|---|
| ResponseID | UUID | x | | ja | Eindeutige Kennung des Ergebnisses. | Generiert als UUID (UUIDv4). |
| SurveyID | UUID | | x | ja | Fremdschlüssel zur Umfrage. | FK; verweist auf existierende Survey. |
| RespondentID | UUID | | x | nein | Verweis auf die optionale teilnehmende Person. | DSGVO‑relevant; wenn gesetzt → ConsentGiven = true. |
| SubmittedAt | Datum/Zeit | | | ja | Zeitpunkt der Abgabe. | Automatisch gesetzt; ISO‑8601 (UTC). |
| ConsentGiven | Boolean | | | ja | Zeigt an, ob die teilnehmende Person der Verarbeitung personenbezogener Daten zustimmt. | Muss true sein, wenn personenbezogene Daten vorhanden (RespondentID, Email, GenderCode, AgeGroupCode). |
ResponseAnswer
| Attribut | Datentyp | PK | FK | Pflicht? | Beschreibung | Hinweise/Constraints |
|---|
| AnswerID | UUID | x | | ja | Eindeutige Kennung der Antwort. | Generiert als UUID (UUIDv4). |
| ResponseID | UUID | | x | ja | Fremdschlüssel zum Umfrageergebnis. | FK; verweist auf existierende SurveyResponse. |
| QuestionID | UUID | | x | ja | Verweis auf die beantwortete Fragestellung. | FK; verweist auf existierende Question. |
| OptionID | UUID | | x | nein | Gewählte Antwortoption (nur bei Auswahlfragen). | Darf nur gesetzt sein, wenn QuestionType != Open; muss zu QuestionID gehören. |
| FreeTextResponse | Text (max. 2000) | | | nein | Freitextantwort (nur bei offenen Fragen). | Darf nur gesetzt sein, wenn IsOtherOption oder QuestionType = Open. |
Respondent
| Attribut | Datentyp | PK | FK | Pflicht? | Beschreibung | Hinweise/Constraints |
|---|
| RespondentID | UUID | x | | ja | Eindeutige Kennung der teilnehmenden Person. | Generiert als UUID. |
| Email | String (max. 254) | | | nein | E‑Mail‑Adresse der teilnehmenden Person. | DSGVO‑relevant; optional; Format: E‑Mail (RFC 5322); Regex‑Beispiel: ^[^\s@]+@[^\s@]+.[^\s@]{2,}$. |
| GenderCode | Enum | | x | nein | Geschlechtsangabe. | Siehe Enum GenderEnum; optional; Default: NotSpecified. |
| AgeGroupCode | Enum | | x | nein | Altersgruppe der teilnehmenden Person. | Siehe Enum AgeGroupEnum; optional; Default: NotSpecified. |
| CreatedAt | Datum/Zeit | | | ja | Erstellungszeitpunkt des Teilnehmerdatensatzes. | Automatisch gesetzt; ISO‑8601 (UTC). |
| LastConsentChangeAt | Datum/Zeit | | | nein | Zeitpunkt der letzten Änderung der Einwilligung. | ISO‑8601 (UTC); ≥ CreatedAt. |
Enumerationen
| Name | Werte | Beschreibung |
|---|
| GenderEnum | Male, Female, NonBinary, NotSpecified | Geschlechtsangabe der teilnehmenden Person. |
| AgeGroupEnum | Age_0_18, Age_19_35, Age_36_60, Age_61_99, NotSpecified | Altersgruppe der teilnehmenden Person. |
| QuestionTypeEnum | Rating, SingleChoice, MultipleChoice, Open | Typ der Frage. |