Ankündigung

Einklappen
Keine Ankündigung bisher.

Tabellen für Vokabeltrainer anlegen...

Einklappen

Neue Werbung 2019

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

  • Tabellen für Vokabeltrainer anlegen...

    Hallo,

    ich habe mal eine frage
    Also schonmal vorweg ... ich bin Anfänger.. :P
    Also ich habe ein Vokabeltrainer fürs Web geproggt.
    Mann kann sich anmelden (mit aktivirungslink).
    Einloggen und Vokabeln eintragen. Danach kann man sich seine Vokabeln in einer Liste anschauen. Sich eine Statistik über jede Vokabel ansehen und die Vokabeln in einem Vokabeltrainer lernen. Dafür habe ich das Vokabelboxen Prinzip benutzt. (5 Boxen .. bei richtiger Antwort rutscht die Vokabel eine Box weiter und bei falscher kommt Sie wieder zurück in die erste. Wenn eine Vokabel in der letzten angekommen ist ist diese Vokabel "fertig gelernt")

    Ich habe eine Tabelle in der ich die User speichere.

    user
    - id
    - username
    - email
    - passwort
    - angemeldet seit

    und eine Tabelle in der ich die Vokabeln speichere...

    vokabeln
    - id
    - uid [user-id]
    - en [englische vokabel]
    - de [Deutsche Vokabel]
    - box
    - falsch [wie oft falsch beantwortet]
    - richtig [wie oft richtig beantwortet]
    - zuletzt gelernt

    In der Spalte uid speichere ich die User ID damit ich eindeutig zuordnen kann welche Vokabel zum welchem User gehört.

    Ist das überhaupt "ordentlich" angelegt? Also sind die Tabellen in der Normalform?

    So nun die eigentliche Frage

    Ich möchte nun Tags programmieren.
    Also der User kann wenn er eine Vokabel einträgt sagen ich möchte das die Vokabel mit dem Tag x und / oder mit dem Tag y versehen. Oder mit garkeiner!
    Beim lernen soll der user dann sagen können ich will alle Vokabeln lernen oder nur die mit dem Tag x oder nur die mit dem y (etc.).

    Wie würdet ihr die Tabellen anlegen?

    also ich hab gedacht..

    tags
    - id
    - vid [vokabelid - um Vokabel und Tag zuordnen zu können]
    - name [name des tags]

    Dann wird für jeden Tag der man einer Vokabel angibt eine eigener Eintrag angelegt..

    Mit DB Tabellen anlegen tu ich mir manchmal ein bisschen schwer.... würdet ihr die Tabellen anders anlegen? Entsprechen die Tabellen überhaupt der Normalform? Ist das vill. vieeel zu umständlich und bescheuert durchdacht?

    Schoneinmal vielen dank für Antworten..

    Viele Grüße,
    Robin

  • #2
    Warum machst du in der Tabelle mit den Vokabeln nicht einfach noch eine Spalte "tag", wo du den jeweiligen Tag drin speicherst? Du kannst dann ja per "WHERE tag='$tag'" nur die mit dem entsprechenden Tag auslesen.

    Oder habe ich das System falsch verstanden?

    Was ist für dich eine Normalform bei Tabellen?
    Also für mich sieht das so ok aus! Aber für die Tags extra noch ne Tabelle zu machen finde ich unnötig.

    Kommentar


    • #3
      Und wie mache ich das dann wenn ich mehre Tags speichern möchte? ist das dann nicht etwas umständlich?

      Da gibbts doch so Normalformen für Tabellen. Habe in der zwischenzeit mal gegoogelt..
      Datenbanken entwickeln
      <--- Für heute is es mir zu anstrenged die 17 Seiten durchzuarbeiten aber werde mir das morgen mal anschauen...
      Hoffe ich verstehe das als anfänger..^^

      Kommentar


      • #4
        wenn du mehrere tags speichern willst, kommst du wohl nicht um ne extra tabelle rum, wenn du's nich via php entschlüsseln willst.

        zu den normalisierungen der tabellen: alles mit maß und ziel, sonst kann's vorkommen, dass performance des scripts oder wartbarkeit plötzlich verschwinden
        Karteikasten
        "Es gibt auch Linux-Aussteiger. Aber die Rückfallquote steigt mit jeder Win-Version." - Walter Saner in de.newusers.questions

        Kommentar


        • #5
          allllllsoooo, mein Lieblingsthema, grad ne Arbeit drüber geschrieben. Normalisierung...

          Erstmal vorweg, du brauchst eine extra Tabelle mit vokabel-id und user id, da es eine (so jetzt wirds schwieriger) n:m beziehung ist, d.h. eine Vokabel kann zu mehreren Usern gehören, ein User hat mehrere Vokabeln.

          Wenn du das ganze wirklich verstehen möchtest, dann rate ich dir dazu, nimm dir ein paar Tage Zeit und beschäftige dich mit Normalisierung und Beziehungen von Tabellen.

          Viele Grüße
          Drieling

          Kommentar


          • #6
            Danke für die Antworten ..
            Nach meinem Script würde jede Vokabel immer nur einem User gehören.
            Wenn mehrere User die gleiche Vokabel eintragen wird für jeden User die Vokabel extra eingetragen..
            Ist natürlich nicht gerade gut für die DB...

            Also ich denke ich hab verstanden was du meinst.. (was nicht heißt das ich den ganzen Normalisierungskram verstanden habe :P - aber damit werde ich mich die nächsten tage mal beschäftigen.. )

            Also bei der Tabelle Vokabel muss die uid weg..

            Dann eien extra Tabelle
            z.b
            vokabel_zu_user // Mir fallen iwie nie ordentliche Tabellennamen ein
            - vid
            -uid

            Wenn ein User eine Vokabel einträgt dann muss die Vokabel also in der Vokabeltabelle eingetragen werden und ein Eintrag in die Vokabel_zu_User Tabelle muss auch noch vorgenommen werden ( da wird dan die user id und der id der der gerade eingetragenen Vokabel eingetragen)

            Kommentar


            • #7
              Genau du hast es erfasst

              Leider gibt es im Netz nur wenige Seiten wo der ganze Kram gut erklärt ist. Hier ein paar ansätze:
              Kardinalität (Datenbanken) - Wikipedia
              Normalisierung (Datenbank - Wikipedia)

              Kommentar


              • #8
                Hi,

                Wie bekommt man den nun hin das alle Vokablen des benutzers x in einer Tabelle angezeigt werden?

                Habe dazu ein kleines script geschreiben was aber nicht funzt.
                Wie schaffe ich das das alle Vokablen aus der Vokablen Tabelle geholt werden? Die Ids der einzelnen Vokablen habe ich vorrher aus der User-Vokabel-Verknuepfungstabelle geholt und stehen danach in dem array $vocs...

                PHP-Code:
                <?php
                    user_online
                ();
                    
                $sql_ver "SELECT 
                                   *
                               FROM
                                   "
                .DB_PREFIX."_user_voc_ver
                               WHERE
                                   uid='
                $_SESSION[user_id]'";

                    
                $result_ver mysql_query($sql_ver);
                    
                $vocs       mysql_fetch_array($result_ver);
                    
                $rows_ver   mysql_num_rows($result_ver);

                    
                $sql_voc "SELECT
                                    id,
                                    en,
                                    de
                                FROM
                                    "
                .DB_PREFIX."_voc
                                WHERE
                                    id = '
                $vocs'"// alle vokabeln rausholen die im array $vocs drin sind Aber wie? :?

                    
                $result_voc mysql_query($sql_voc);
                        
                ?>
                        <h3>Vokabelliste</h3>
                        <p>In dieser Liste stehen alle eingetragenen Vokablen.
                        </p>
                        <p>
                          Es sind <b><?php echo $rows_ver ?></b> Vokablen eingetragen!
                        </p>   
                        <table style='border:ridge black; width:900px;'>
                          <tr>
                            <td><b>ID</b></td>
                            <td><b>Englisch</b></td>
                            <td><b>Deutsch</b></td>
                          </tr>
                        <?php
                            
                while ($eintrag=mysql_fetch_assoc($result_voc)) {
                                echo 
                "<tr>";
                                foreach (
                $eintrag as $key => $value) {
                                    echo 
                "<td><a href=\"?content=/user/bereich/voc&amp;id=$eintrag[id]\" style=\"text-decoration:none;\">$value&nbsp;</a></td>";
                                }
                                echo 
                "</tr>";
                            }
                        
                ?>
                        </table>

                Kommentar


                • #9
                  Ich weiß nicht wie genau dein DB-Design jetzt aussieht. Aber grundsätzlich löst man sowas in der Regel mit einem JOIN:
                  Als z.B:
                  Code:
                  SELECT vocables.en, vocables.de FROM users_vocables JOIN vocables ON vocables.id = users_vocables.vocable_id WHERE users_vocable.user_id = 7
                  Wenn in vocables die Vokabeln stehen und in users_vocables die Verknüpfung von Vokabeln und Benutzern....
                  [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

                  Kommentar


                  • #10
                    Zitat von agrajag Beitrag anzeigen
                    Ich weiß nicht wie genau dein DB-Design jetzt aussieht. Aber grundsätzlich löst man sowas in der Regel mit einem JOIN:
                    Als z.B:
                    Code:
                    SELECT vocables.en, vocables.de FROM users_vocables JOIN vocables ON vocables.id = users_vocables.vocable_id WHERE users_vocable.user_id = 7
                    Wenn in vocables die Vokabeln stehen und in users_vocables die Verknüpfung von Vokabeln und Benutzern....
                    Vielen Dank für diene Hilfe.
                    Hat alles wunderbar geklappt

                    Kommentar

                    Lädt...
                    X