Eine Anfängerfrage zum Datenbankdesign

8

Dies ist eine Follow-up-Frage zu meinem vorherigen. Wir Junior-Jahr-Studenten machen Website-Entwicklung für die Universität als Freiwilligenarbeit. Wir verwenden PHP + MySQL-Technik. Jetzt bin ich hauptsächlich verantwortlich für die Datenbankentwicklung mit MySQL, aber ich bin ein MySQL-Designer. Ich frage jetzt nach Hinweisen zum Schreiben meiner ersten Tabelle, um meine Hände darauf zu bekommen, dann könnte ich gut mit anderen Tabellen arbeiten. Die Frage ist wie folgt, das erste, was unsere Webseite tun wird ist, dem Benutzer eine Umfrage zu präsentieren, um zu erfahren, wann sie den Bus-Service nutzen wollen. und hier beginne ich mit der Entwicklung meiner Datenbank. Das Benutzeranforderungsdokument gibt an, dass für die Umfrage

verwendet werden soll

Kundenseite:

Survery wird den Kunden mit einer Reihe vordefinierter Fragen und Antworten zur Verfügung stehen und leicht zu füllen sein

Geschäftsseite:

Survery Info. wird gespeichert, ausgegeben und zur Analyse angezeigt.

Es klingt nicht zu viel Arbeit, und ich muss mich nicht um irgendwelche PHP-Sache kümmern, aber ich bin nur verwirrt auf: sollte ich nur eine einzige Tabelle namens "Survery" oder zwei Tabellen "Survey_business" und "Survey_Customer" erstellen und wie kann die Datenbank die Info speichern? Ich wäre dankbar, wenn ihr mir helfen könnt, damit ich mitarbeiten kann, denn der erste Schritt ist immer der schwierigste und wichtigste. Danke.

    
Kevin 29.01.2010, 17:09
quelle

8 Antworten

9

Ich würde mehrere Tabellen verwenden. Einer für die Umfragen selbst und ein anderer für die Fragen. Vielleicht noch eine Antwortmöglichkeit, wenn Sie mit Multiple-Choice-Fragen gehen wollen. Eine weitere Tabelle für die Antworten mit einem Datensatz pro Frage pro Beantworter. Die Komplexität eskaliert, wenn Sie mehrere Arten von Antworten berücksichtigen (Auswahl, Ausfüllen einer Zeile, Freiform-Multilinie usw.) und Anzeigeoptionen (Optionsfeld, Dropdown-Liste, Textfeld, Yada Yada), aber für ein einfaches Multiple-Choice-Beispiel mit einem einzigen Rendering-Typ, das würde funktionieren, denke ich.

Etwas wie:

%Vor%

Verwenden Sie dann den Anwendungscode für:

  1. Fügen Sie neue Umfragen und Fragen ein.
  2. Füllen Sie die Antworten aus, wenn die Personen die Umfragen durchführen.
  3. Bericht über die Ergebnisse nach der Umfrage.

Sie könnten als Datenbankentwickler mit dem Web-App-Entwickler zusammenarbeiten, um die Abfragen zu entwerfen, die die entsprechenden Daten für jede Aufgabe auffüllen und abrufen.

    
Chris Farmer 29.01.2010, 17:16
quelle
3

nur 1 Tabelle, Sie ändern nur die Art und Weise, wie Sie die Tabelle für jede Gelegenheit verwenden

Kundenseite fügt Daten in die Tabelle ein

Geschäftsseite liest die Daten und Ergebnisse aus derselben Tabelle

    
Tufo 29.01.2010 17:12
quelle
1

Survey.Customer klingt wie eine Speicherfunktion, während Survey.Business wie eine Abruffunktion klingt.

Die einzigen Tabellen, die Sie benötigen, sind zum Speichern. Die Suchvorgänge werden mithilfe von Abfragen und Berichten der vorhandenen Speichertabellen ausgeführt, sodass für diese keine zusätzlichen Tabellen benötigt werden.

    
Robert Harvey 29.01.2010 17:13
quelle
1

Verwenden Sie nur eine einzelne Tabelle. Wenn Sie zwei Tabellen verwenden, müssen Sie bei jeder Änderung alles zweimal machen. Das ist ein großer Wartungsaufwand für Sie und alle anderen, die in Zukunft dazu kommen.

    
Gabe 29.01.2010 17:13
quelle
1

Die meisten Ratschläge / Antworten sind bis jetzt anwendbar, stellen aber bestimmte (unausgesprochene!) Annahmen über Ihre Domain dar.

Versuchen Sie, ein logisches Modell der Entitäten und Attribute zu erstellen, die zum Erfassen der Anforderungen erforderlich sind, untersuchen Sie die Beziehungen, überlegen Sie, wie die Daten auf beiden Seiten des Prozesses verwendet werden, und entwerfen Sie dann die Tabellen. Sprechen Sie mit den Benutzern, sprechen Sie mit den Personen, die die Berichte ausführen, sprechen Sie mit dem Benutzer, der die Benutzeroberfläche erstellt (Bildschirme und Berichte), um ein vollständiges Bild zu erhalten.

Achten Sie genau auf die Berichtspflichten, da diese oft zusätzliche Attribute und Entitäten enthalten, die im Dateneingabeschema nicht vorhanden sind

    
Steven A. Lowe 29.01.2010 17:16
quelle
1

Ich denke, dass 2 Tabellen benötigt werden:

  • eine Übersichtstabelle zum Speichern von Fragen und Antworten. Jede Umfrage wird in einer Zeile mit einer eindeutigen Umfrage ID
  • gespeichert
  • andere Tabelle dient zum Speichern von Antworten. Ich denke, es ist besser, die Antworten jedes Kunden in einer Zeile mit einer Umfrage-ID und einer Kunden-ID zu speichern, falls nötig.

Dann können Sie die Ergebnisse berechnen und in einer surveyResults-Ansicht speichern.

    
Deniz Acay 29.01.2010 18:19
quelle
0

Werden die Daten, die Sie präsentieren, als Fragen und Antworten dynamisch sein? Ist das ein langfristiges Projekt, bei dem Fragen ausgetauscht werden? Wenn ja, möchten Sie wahrscheinlich auch die Fragen und Antworten in Ihrer Datenbank haben.

Die Art und Weise, wie ich es tun würde, würde darin bestehen, Ihre Entitäten zu definieren und herauszufinden, wie Sie Ihre Tabellen so gestalten, dass Beziehungen einfach sind. Klingt für mich so, als hätten Sie drei Entitäten:

  • Frage
  • Antwort
  • Abgeschlossene Umfrage
Jon 29.01.2010 17:24
quelle
0

Nur eine Beispielausarbeitung dessen, was Steven und Chris oben erwähnt haben.

Es wird mehrere Tabellen geben, wenn es mehrere Umfragen gibt, und jede Umfrage hat andere Fragen und wenn derselbe Benutzer mehrere Umfragen machen kann.

  1. Kundentabelle mit CustID als Primärschlüssel

  2. Fragen Tabelle mit einer Fragen-ID als Primärschlüssel. Wenn eine Frage nicht zu mehr als einer Umfrage gehören kann (eine N: 1-Beziehung), kann sie auch die Umfrage-ID (der in Tabelle 3 erwähnten Tabelle Umfragetabelle) als einen der Werte in der Tabelle haben.

  3. Aber wenn eine Umfrage zu Frage Beziehung N: M ist, dann (SurveryID, QuestionID) würde ein zusammengesetzter Schlüssel für das SurveyTable werden, andernfalls hätte es nur die SurveyID mit den Details der Umfrage auf hoher Ebene wie Beschreibung.

  4. UserSurvey-Tabelle, die (USerID, SurveryID, QuestionID, AnswerGiven) enthalten würde

    [Hinweis: Wenn derselbe Benutzer die gleiche Umfrage immer wieder durchführen kann, muss entweder die alte Umfrage aktualisiert werden oder die Wiederholungsversuche müssen als weitere Zeilen mit einer bestimmten Seriennummer gespeichert werden.

frappuccino 29.01.2010 17:36
quelle

Tags und Links