Umfrage Datenbank Design

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Umfrage Datenbank Design

    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.

  • #2
    Fragetabelle, Antworttabelle, Benutzertabelle.
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      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 ?

      Code:
      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';

      Kommentar


      • #4
        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
        Zuletzt geändert von AmicaNoctis; 17.02.2010, 15:08.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          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
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #6
            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.

            Code:
            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`)
            );

            Kommentar


            • #7
              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.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                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

                Kommentar


                • #9
                  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).
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar


                  • #10
                    meins du das so?
                    Code:
                    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.

                    Kommentar


                    • #11
                      Zitat von Apfelmus Beitrag anzeigen
                      meins du das so?
                      Ja, genau.

                      Zitat von Apfelmus Beitrag anzeigen
                      in den Name schreibe ich später einfach rein ( sehrgut) oder (gut)
                      Richtig.

                      Zitat von Apfelmus Beitrag anzeigen
                      oder kann name auch integer sein 5=sehrgut, 4= gut, etc..
                      Wenn du das willst, klar.
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar


                      • #12
                        Super danke für die Hilfe.

                        Kommentar


                        • #13
                          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:
                          Code:
                          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`);

                          Kommentar


                          • #14
                            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:

                            Code:
                            1, [COLOR="Red"]1[/COLOR], [COLOR="#0a0"]1[/COLOR], [COLOR="Blue"]1[/COLOR] (Benutzer [COLOR="Red"]1[/COLOR] hat Frage [COLOR="Blue"]1[/COLOR] mit Antwort [COLOR="#0a0"]1[/COLOR] beantwortet)
                            2, [COLOR="Red"]1[/COLOR], [COLOR="#0a0"]3[/COLOR], [COLOR="Blue"]2[/COLOR] (Benutzer [COLOR="Red"]1[/COLOR] hat Frage [COLOR="Blue"]2[/COLOR] mit Antwort [COLOR="#0a0"]3[/COLOR] beantwortet)
                            3, [COLOR="Red"]2[/COLOR], [COLOR="#0a0"]5[/COLOR], [COLOR="Blue"]2[/COLOR] (Benutzer [COLOR="Red"]2[/COLOR] hat Frage [COLOR="Blue"]2[/COLOR] mit Antwort [COLOR="#0a0"]5[/COLOR] beantwortet)
                            Gruß,

                            Amica
                            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                            Super, danke!
                            [/COLOR]

                            Kommentar


                            • #15
                              Hallo Amica,

                              vielen Dank für schnelle und einfache erklärung.

                              Kommentar

                              Lädt...
                              X