Problem beim Abbilden auf eine rel. Datenbank

Avarius

Grünschnabel
Hallo allerseits,

ich versuche mich derzeit mit Datenbanken, habe auch schon ein paar Grundkenntnisse aneignen können.
Aber eine relationale Datenbank zu erstellen versteh ich immer noch nicht.:mad:

Bei leichten Beispielen ist das eindeutig, aber ich schaffe es nicht diese Beispiele auf mein Problem zu übertragen.

Hier versuche ich es mal zu beschreiben:

In einem Formular möchte ich Fragebögen anlegen lassen:
Ein Fragebogen besteht aus min.10 Themen.
Ein Thema besteht aus mind. 10 Fragen.

Ein Nutzer (bzw. Befragter) füllt den Bogen aus:
Es sollen folgende Daten beim Ausfüllen eines Formulars in der Datenbank gespeichert werden:
Email (Der Nutzer erhält eine Nachricht mit dem Ergebnis)
Gruppe (Der Nutzer kann weitere Nutzer einladen, das Ergebnis soll dann den Mittelwert der Eingaben aller zur Gruppe gehörigen Nutzer sein)
Name des Formulars (so kann man das Formular eindeutig indentifizieren und entsprechend die Fragen zu den Antworten)
Antworten (Die Antworten sollen gespeichert werden für eine Auswertung, alle Antworten sind Zahlenwerte)

Ich habe versucht, das erstellen einer neuen Tabelle für ein Formular zu verhindern, aber bin mir nicht sicher ob es im Rahmen einer rel. Datenbank funktioniert, oder elegant wäre.
Anyway, vielleicht könnt Ihr mir ja helfen, diese Daten abzubilden und mir das ggf. erklären, vielleicht steige ich dann ja mal dürch :)

Beste nachösterliche Grüße und vielen Dank im voraus,
Avarius
 
Also, ich würde eine Tabelle mit Fragebögen erstellen. Anders als dein Ansatz würde ich diese per ID identifizieren. Dann brauchst du eine weitere Tabelle: Themen. Hier werden die Themen gespeichert (ebenfalls mit einer ID identifizierbar). Zudem benötigst du eine Tabelle "Fragen", welche einen Fremdschlüssel von Themen hat. Desweiteren brauchst du eine Tabelle "FragebogenThemen", welche nur Fremdschlüssel aus Themen und Fragebögen enthaält. Dies bildet einen zusammengesetzten Primärschlüssel.

Das mal so grob in Worten gefasst ;) Vielleicht hilft es dir ja, die Modellierung in DB Designer 4 zu machen. Dann kannst du auch dein Modell als PNG exportieren und hier reinstellen. So könnten wir dir einfacher Tipps geben oder Fehler aufzeigen ;)


Gruß Radhad
 
Hi Radhad und Leser,

ich musste mir erstmal den DBDesigner installieren, wusste nicht dass es so etwas gibt.
Und die Tabellen, die ich erstellt hatte bei PHPMyAdmin konnte ich auch nicht so abbilden.

Lag wahrscheinlich daran, dass ich keine Beziehungen eingebaut hatte, zumindest nicht so wie es hätte sein sollen.

Jetzt hab ich mir das im Anhang befindliche PNG (Deinem Rat folgend) zusammengeklickt.
Ich denke, im wesentlichen sind stellt das mein vorher genanntes Problem dar.
Oder etwa nicht?:confused:
Wahrscheinlich kann man das verbessern, über ein wie und warum bin ich dankbar.

Besten Gruß und Dank,
Avarius

PS.:
Desweiteren habe ich ja jetzt den DBDesigner. Doch wie kriege ich das DB-Modell in mein MySQL?
 

Anhänge

  • rel_DB.jpg
    rel_DB.jpg
    50,5 KB · Aufrufe: 45
Ich hab gesehen, dass ich das etwas falsch dargestellt hatte.
Hier eine etwas veränderte Darstellung.

Vielleicht hat jemand einen Tipp ob das ein relationales DB Modell ist, welches zu dem im ersten Beitrag beschriebenen Problem passt.

Das Problem ist unter anderem, dass ich das Modell nich richtig verstehe.
Die Objekte (Tabellen) habe ich ja selbst eingefürgt und die Relatioinien dazu auch. Aber dabei wurden Fremdschlüssel erstellt, die mir irgendwie Kopfzerbrechen bereiten.
Kann mir die (wenn das Modell korrekt sein sollte) diese erklären?

Beste Grüße und besten Dank vorab,
Avarius
 

Anhänge

  • db_neu.png
    db_neu.png
    86,6 KB · Aufrufe: 31
Ok, da sind ein paar Fehler drin, vor allem im bereich der Fragen! Es sollen nicht 5 Fragen pro ID daregstellt werden sondern pro ID eine Frage! Die antwort kannst du direkt mit in die Tabelle "Fragen" mit aufnehmen. Also sähe das Konstrukt wie folgt aus:

Tabelle: Fragen
FragenID | ThemenID | Frage | Antwort

Kursiv bedeutet FK und Fett & Unterstrichen PK.


Deine Modellierung bei "benutzer" verstehe ich überhaupt nicht ^^
 
Tabelle: Fragen
FragenID | ThemenID | Frage | Antwort
siehe neuer Anhang. :D


Deine Modellierung bei "benutzer" verstehe ich überhaupt nicht
Der Bereich Benutzer ist wie folgt gedacht:

Ein Benutzer kann Mitglied einer oder mehrerer Gruppen von Benutzern sein.

Es geht darum, dass dann die Mittelwerte der Gruppenmitglieder die Ergbnisse des Formulares sein sollen. Der Benutzer erhält somit das Ergebnis der gesamten Gruppe, und nicht sein eigenes. Dieses aber auch erst, wenn alle anderen das Formular ausgefüllt haben.

Daher habe ich zwischen p_data (Personendaten) und Gruppe eine n zu m erzeugt.
Das, was Du da jetzt siehst verstehe ich zum einen nicht und zum anderen hat das der DBDesigner automatisch erstellt.
Den ungefähren Grund kenne ich auch, da man ja n zu m-Beziehungen in 2 1 zu n-Beziehungen umwandeln soll. Warum eigentlich :confused:
 

Anhänge

  • db_neu.png
    db_neu.png
    72,1 KB · Aufrufe: 23
Bei einer n:m Beziehung kannst du einfach nicht Tabellarisch abbilden und immer den einen spezifischen Datensatz identifizieren, darum löst man n:m Beziehung auf und verwendet eine Hilfstabelle, in der Die Primärschlüssel der beiden Tabellen als zusammengefasster PK gespeichert werden, und somit alles eindeutig bleibt! Am besten baust du die 1:n konstrukte selber anstatt die vom DB Designer 4 zu verwenden. Ich mach dir mal ein Beispiel dazu ;) Siehe Anhang!

p_data ist zwar ne gute Idee, aber der Name sagt nicht direkt etwas aus. Es ist immer Hilfreich, Tabellennamen so zu benennen, dass man auch in einem Jahr noch sofort erkennt, um was es sich handelt.

Du kannst übrigens im DB Designer über "Datei" -> "Exportieren" -> "Als Bild Exportieren" das Modell direkt als PNG speichern ohne Qualitätsverlust.



PS: Zur besseren Übersicht und zur einfacheren Datenspeicherung habe ich in der Tabelle "Fragebogenergebnis" auf einen zusammengesetzen Primärschlüssel verzichtet. In der ZIP-Datei ist die DB Designer 4 XML Datei meines Modells

[EDIT]
Arghs, das Bild wird ja verkleinert :( Schau einfach in die Zip-Datei
 

Anhänge

  • Fragebogen.zip
    4,2 KB · Aufrufe: 11
  • Fragebogen.jpg
    Fragebogen.jpg
    61,9 KB · Aufrufe: 30
Zuletzt bearbeitet:
Danke, hab mir das mal ausgedruck.
Ich hab immer etwas Probleme Sachen zu verstehen, soabld es etwas komplexer wird ;)
Aber egal.

Wenn ich Dein Beispiel richtig verstanden habe, machst Du aus jedem Benutzer automatisch ein Gruppenmitglied, oder irre ich mich? (Nur zum Verständnis)

Was ich gar nicht verstehe ist, warum bei FragebogenAntworten noch mal BenutzerAntwort: TEXT und Richtig: BOOL steht, wenn doch in Fagen
bereits Antwort: TEXT steht... :confused:

(Das BOOL kann ich mir eigentlich überhaupt nicht erklären, außer dass es Dein spezifische Beispiel ist).

Danke

PS.: jetzt gehts erstmal essen ;)
 
Nein, ein Benutzer muss nicht Gruppenmitglied sein. Nur wenn er es ist, dann MUSS die BenutzerID und die GruppenID gespeichert werden. Ein Benutzer kann auch in mehreren Gruppen gleichzeitig sein!

BenutzerAntwort ist die Antwort, die der Benutzer eingibt und das Bool zeigt an, ob seine Antwort richtig war. Das Problem bei Fragebögen mit maschineller Auswertung ist halt zu überprüfen, ob die Antwort Richtig oder Falsch ist. Irgendwo musst du das speichern. Die BenutzerAntwort musst du nicht unbedingt speichern, wenn du vorher vergleichst, ob die Antwort richtig ist.

Du kannst das ganze mit den Fragen noch etwas weiter treiben, indem du eine Unterscheidung zwischen Fragen mit einer Textantwort oder Multiple-Choice Antwort unterscheidest. Denn bei einem Multiple-Choice müsste man wiederrum eien Tabelle "Antwort" auskoppeln, um pro Frage alle "möglichen" Antworten zu haben, sowie einen Boolwert, der die richtige Antwort kennzeichnet ;)

Es gibt also immer noch etwas, was man erweitern kann. Wie weit du gehen musst hängt davon ab, wie die Fragebögen aufgebaut sind.
 
Bei euren Datenbanken wird mir schwindelig :)
Machts doch einfach !
Tablle 1[NUTZER]
id (longint) autocrement
Name
email
Schuhgrösse
etc

Tabelle 2[FRAGEBOGEN]
id autoincrement
Fragebogen
Frage

Tabelle 3[ANTWORTEN]
Antworten
id autincrement
Benutzerid (Da die id von Tabelle 1 rein)
Fragebogen (Da die id von Tabelle 2 rein)
Antwort

Eine nette Erläuterung zu Joins findet man hier:
http://www.tbee.de/mysql/t3_tabellenverknuepfungen_join.php

und anregungen zu joins:
http://groups.google.com/group/de.c...read/thread/2e39689c3463b6da/0765bcd63c41abc3


SELECT * FROM ANTWORTEN
LEFT JOIN FRAGEBOGEN ON ( ANTWORTEN.Fragebogen = FRAGEBOGEN.id)
LEFT JOIN NUTZER ON ( ANTWORTEN.Benutzerid =NUTZER.id)
WHERE FRAGEBOGEN.id="1" AND FRAGEBOGEN.Frage="2"
GROUP BY FRAGEBOGEN.id
ORDER BY Fragebogen.id Frage.id

Mit obiger Konstruktion würde ich denn mal herumspielen
(Alles ohne Gewähr da nicht getetstet)
 

Neue Beiträge

Zurück