Ich bin für die Entwicklung eines Vermessungssystems für unseren Kunden erforderlich. Es basiert auf asp.net
, und die verwendete Datenbank ist oracle
.Welches Datenbankschema zum Speichern von Umfrageantworten verwendet werden soll
Ich habe keine Erfahrung hier so ich um Rat fragen möchte:
- Welches Datenbankschema für die Speicherung von Benutzerantworten verwenden, fürchte ich mein aktuelles Design ist wahrscheinlich Performance-Problem haben ...
Über die Umfrage:
- Es werden zwei oder mehr Erhebungen zur gleichen Zeit los sein.
- Umfragen können einmal pro Jahr oder häufiger ausgelöst werden, daher denke ich, dass ich eine Übersichtstabelle benötige.
- Umfragen zielen verschiedene Produkte, so dass es werde
Derzeit mein Design eine Zuordnung zwischen Produkten und Erhebungen sein:
Umfrage Kategorie Tabelle
+------------+--------------+
| CatageryId | CatageryName |
+------------+--------------+
| 1 | cat1 |
| 2 | cat2 |
+------------+--------------+
Umfrage Kategorie Versionstabelle
+-----------+------------+--------------------+
| VersionId | CatageryId | VersionDescription |
+-----------+------------+--------------------+
| 1 | 1 | 'cat1 version1' |
| 2 | 1 | 'cat1 version2' |
| 3 | 2 | 'cat2 version1' |
+-----------+------------+--------------------+
Umfragezeitraum Tab le
+----------+--------------------+
| PeriodId | PeriodDescription |
+----------+--------------------+
| 1 | 'cat1 period2016' |
| 2 | 'cat1 period2017' |
| 3 | 'cat2 period2016' |
+----------+--------------------+
Befragungszeit-Version Kartentabelle
+----------+-----------+
| PeriodId | VersionId |
+----------+-----------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 3 | 3 |
+----------+-----------+
Eine Version-Frage Kartentabelle
+--------------+------------+
| VersionId | | QuestionId |
+--------------+------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 3 | 1 |
+--------------+------------+
Eine Version-Produktkartentabelle
+-----------+-----------+
| VersionId | ProductId |
+-----------+-----------+
| 1 | 'prodA' |
| 1 | 'prodB' |
| 1 | 'prodC' |
| 2 | 'prodA' |
+-----------+-----------+
Und to Store Die Umfrageergebnisse müssen ich angeben viele duplizierte Informationen zwischen den Reihen des Rekords:
Benutzer Antwort Tabelle +----------+------------+----------+-----------+-----------+--------+-----------+ | AnswerId | QuestionId | PeriodId | UserId/Ip | ProductId | Answer | VersionId | +----------+------------+----------+-----------+-----------+--------+-----------+ | 1 | 1 | 1 | 'adam' | 'prodA' | 'Yes' | 2 | | 2 | 2 | 1 | 'Joe' | 'prodA' | 'Yes' | 2 | | 3 | 1 | 2 | 'adam' | 'prodB' | 'A' | 3 | +----------+------------+----------+-----------+-----------+--------+-----------+
Wir zig Produkte und Tausenden von Benutzern für dieses System zu erwarten. Nehmen wir an, 30 Produkte, 5000 Benutzer, 50 Fragen pro Umfrage und 4 Umfragen pro Jahr
im aktuellen Design, wird es 5000 * 4 * 50 * 30 = 30 Millionen Datensätze in der Benutzerantwort Tabelle per hinzugefügt werden Jahr, Ich habe wirklich Angst, wenn es noch richtig funktionieren könnte ..., also irgendwelche Vorschläge zur Optimierung?
Bearbeiten 1: Fügen Sie die Spalte VersionId wie vorgeschlagen in die Benutzerantworttabelle ein.
Sie haben VersionId nicht in Ihrer Antworttabelle. Woher weißt du, für welche Umfrageversion diese Antwort gehört? Die von Ihnen vorgeschlagenen Datenträger können von einer Oracle-Datenbank verwaltet werden. Sie können planen, die Partitionierung in Ihrer Antworttabelle basierend auf PeriodId zu implementieren. –
@phonetic_man, ja du hast Recht, ich werde bearbeiten, um eine weitere Spalte hinzuzufügen ... Ich werde auch mehr Informationen über Partition finden, vielen Dank. – mosakashaka
Hier ist ein Link aus der Dokumentation zur Partitionierung. https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm –