Archiv verlassen und diese Seite im Standarddesign anzeigen : Umfrage Datenbank Design
Apfelmus 17-02-2010, 14:56 Hallo Leute,
hab eine Frage zu dem DB design.
Möchte einen Umfrage Formular erstellen.
Ca. 7 Fragen. Hier sind einige Beispiele.
Frage 1
Wie finden Sie unsere Seite:
Sehr Gut
Gut
Mittelmäßig
Schlecht.
Frage 2
Sind Sie mit unserem Support zufrieden.
Sehr Gut
Gut
Mittelmäßig
Schlecht.
Meine Frage:
Was ist besser in dem Fall eine Tabelle mit
ID Frage1, Frage2, Frage3, Frage4 etc..
Oder
Für jede Frage eine Tabelle zu erstellen?
Vielen Dank im Voraus.
Fragetabelle, Antworttabelle, Benutzertabelle.
Apfelmus 17-02-2010, 15:51 Hallo unset,
danke für die Antwort, leider raffe ich es nicht ganz wie es am besten ist.
hab jetzt eine tabelle nach dem muster erstellt. ( Designt)
wäre das die richtige Richtung ?
CREATE TABLE `fragen` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`id_benutzer` INTEGER NOT NULL ,
`frage1` VARCHAR(100) NOT NULL ,
`frage2` VARCHAR NOT NULL ,
`frage3` VARCHAR(100) NOT NULL ,
`frage4` VARCHAR(100) NOT NULL ,
`frage5` VARCHAR(100) NOT NULL ,
PRIMARY KEY (`id`)
) COMMENT 'hier kommen die Fragen hin';
CREATE TABLE `antworten` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`id_benutzer` INTEGER NOT NULL ,
`antwort1` INTEGER NOT NULL ,
`antwort2` INTEGER NOT NULL ,
`antwort3` VARCHAR(200) NOT NULL ,
`antwort4` VARCHAR(200) NOT NULL ,
`antwort5` INTEGER NOT NULL ,
PRIMARY KEY (`id`)
);
CREATE TABLE `benutzer` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`ip_adresse` INTEGER NOT NULL ,
PRIMARY KEY (`id`)
) COMMENT 'die benutzter werden einfach anonym eingetragen';
AmicaNoctis 17-02-2010, 16:06 Nein, die einzelnen Fragen und Antworten sind keine Spalten, sondern Zeilen, also Datensätze.
Beispiel:
frage
-----
id
name
antwort
--------
id
name
benutzer
---------
id
name
email
...
fragebogen
------------
benutzer_fkey
frage_fkey
antwort_fkey
Du hast eine Tabelle, in der du die Fragen vorhältst
id frage
Du hast eine Tabelle, in der du die Antworten vorhältst
id frage_id antwort
Du hast eine Tabelle, in der du die Benutzer vorhältst
id user_token
Du hast eine Tabelle, in der du die Benutzer-Antworten vorhälst
user_id frage_id antwort_id
Apfelmus 17-02-2010, 16:36 ok habe das jetzt von einem von Euch probiert umzusetzen.
Könnte jemand nachschauen ob es die richtige richtung ist ?
hab so was in der schule mal gehabt ( in postgreSQL ) leider alles wieder vergessen.
da war auch einiges mit dem Fremdschluessel.
ob ich das hier auch machen muss ? oder brauche ich es hier nicht ?
Das abfrage Formular wird unter mysql laufen. #
Danke im Voraus.
CREATE TABLE `fragen` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`frage` VARCHAR NOT NULL ,
PRIMARY KEY (`id`)
);
CREATE TABLE `antworten` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`fragen_id` INTEGER NOT NULL ,
`sehrgut` INTEGER NOT NULL ,
`gut` INTEGER NOT NULL ,
`mitte` INTEGER NOT NULL ,
`schlecht` INTEGER NOT NULL ,
PRIMARY KEY (`id`)
);
CREATE TABLE `benutzer` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`neip_adresse` INTEGER NOT NULL ,
PRIMARY KEY (`id`)
);
CREATE TABLE `benutzer_antoworten` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`benutzer_id` INTEGER NOT NULL ,
`fragen_id` INTEGER NOT NULL ,
`antworten_id` INTEGER NOT NULL ,
PRIMARY KEY (`id`)
);
AmicaNoctis 17-02-2010, 16:37 Nochmal: Nein! ;)
Die Antworten sollen Datensätze sein. Mit einem einzelnen Feld für jede Antwort kommst du nicht weiter.
Zum Thema Fremdschlüssel: Ja, brauchst du. Die Tabelle "benutzer_antoworten" [sic!] besteht fast nur daraus.
Apfelmus 17-02-2010, 17:12 hallo Amica,
leider verstehe ich nicht wie du das meinst ?
kannst du mir das näher erklären ?
aus meiner sicht ist die Tabelle so OK.
wass stimmt an dem Design nicht ? wo ist mein denkFehler ?
Vielen Dank im voraus
AmicaNoctis 17-02-2010, 17:14 Dann sag doch erstmal, was du nicht verstehst. Ich kann mich nur wiederholen: Die einzelnen Antworten müssen Datensätze (=Zeilen/Rows/Entities) sein, nicht Felder (=Spalten/Attribute).
Apfelmus 17-02-2010, 17:42 meins du das so?
CREATE TABLE `antoworten_neu` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`id_fragen` INTEGER NOT NULL ,
`name` VARCHAR(30) NOT NULL ,
PRIMARY KEY (`id`)
);
in den Name schreibe ich später einfach rein ( sehrgut) oder (gut)
oder kann name auch integer sein 5=sehrgut, 4= gut, etc..
mir fällt nichs mehr ein.
AmicaNoctis 17-02-2010, 17:57 meins du das so?
Ja, genau.
in den Name schreibe ich später einfach rein ( sehrgut) oder (gut)
Richtig.
oder kann name auch integer sein 5=sehrgut, 4= gut, etc..
Wenn du das willst, klar.
Apfelmus 17-02-2010, 18:03 Super danke für die Hilfe.:danke:
Apfelmus 19-02-2010, 13:22 ich habe leider noch eine Frage:
wozu muss ich die Tablle (benutzer_antoworten)
erstellen ?
ich meine kann ich die tabellen später nicht über join abfragen ?
den Sinn dieser tabelle (benutzer_antoworten) verstehe ich noch nichg ganz.
Vielen Dank im Voraus.
mein design sieht so aus:
CREATE TABLE IF NOT EXISTS `fragen` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`frage` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `antworten` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`werte` varchar(250) DEFAULT NULL,
`id_fragen` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `id_fragen` (`id_fragen`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `benutzer` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip_adresse` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `benutzer_antoworten` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_benutzer` int(11) DEFAULT NULL,
`id_antworten` int(11) DEFAULT NULL,
`id_fragen` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `id_benutzer` (`id_benutzer`),
KEY `id_antworten` (`id_antworten`),
KEY `id_fragen` (`id_fragen`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
ALTER TABLE `antworten`
ADD CONSTRAINT `antworten_ibfk_1` FOREIGN KEY (`id_fragen`) REFERENCES `fragen` (`id`);
ALTER TABLE `benutzer_antoworten`
ADD CONSTRAINT `benutzer_antoworten_ibfk_1` FOREIGN KEY (`id_benutzer`) REFERENCES `benutzer` (`id`),
ADD CONSTRAINT `benutzer_antoworten_ibfk_2` FOREIGN KEY (`id_antworten`) REFERENCES `antworten` (`id`),
ADD CONSTRAINT `benutzer_antoworten_ibfk_3` FOREIGN KEY (`id_fragen`) REFERENCES `fragen` (`id`);
AmicaNoctis 19-02-2010, 13:40 Die brauchst du unbedingt, sonst weißt du zwar, welche Fragen es gibt, welche Antworten es gibt und weche Benutzer es gibt, aber nicht, wer jetzt welche Frage wie beantwortet hat. Genau dafür ist die nämlich da und dort steht dann z. B. drin:
1, 1, 1, 1 (Benutzer 1 hat Frage 1 mit Antwort 1 beantwortet)
2, 1, 3, 2 (Benutzer 1 hat Frage 2 mit Antwort 3 beantwortet)
3, 2, 5, 2 (Benutzer 2 hat Frage 2 mit Antwort 5 beantwortet)
Gruß,
Amica
Apfelmus 19-02-2010, 16:25 Hallo Amica,
vielen Dank für schnelle und einfache erklärung.
|
|