Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten sinnvoll speichern

Einklappen

Neue Werbung 2019

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

  • Daten sinnvoll speichern

    Hallo zusammen

    Ich habe gerade eine Gehirnblockade

    Folgendes Szenario:

    Es geht um eine Kursverwaltung. Jeder Schüler bekommt einen eigenen Account. Zum Account werden auch Telefonnummern und E-Mail der Eltern gespeichert. Allerdings gibt es eine Großzahl Geschwisterkinder. Angenommen es gibt drei Geschwister an der Schule. Die Telefonnummer und E-Mail soll nur einmal in der DB abgespeichert werden. Wie kann ich die Daten der Eltern am besten den der Geschwister zuordnen/verknüpfen?

    Eine Idee war ein Eltern-Account anzulegen und daran die Kinder anzuhängen. Allerdings soll jedes Kind einen eigenen Account bekommen aus diversen Gründen.

    Zudem ist beim erstellen des Schüler Accounts die E-Mail und Telefonnummer der Eltern noch nicht bekannt.

    Wie kann ich das am besten realisieren? Hat jemand eine Idee?

    Vielen Dank.
    md


  • #2
    Zitat von codestorm Beitrag anzeigen

    Wie kann ich das am besten realisieren? Hat jemand eine Idee?

    Vielen Dank.
    md
    Kommt halt drauf an, was du damit später genau machen willst. Als grober Ansatz vielleicht so:

    Code:
    test=# create table schueler (id int primary key, name text);
    CREATE TABLE
    test=*# create table familien (id int primary key, name text);
    CREATE TABLE
    test=*# create table familien_schueler(familie int references familien, schueler int references schueler, primary key(familie,schueler));
    CREATE TABLE
    test=*# create table kontakte(id int primary key, familie int references familien, kontakt_typ text, kontakt_detail text);
    CREATE TABLE
    test=*#
    In kontakt_typ schreibst halt rein, was es ist (Telefon, Mobil, Mehl, ...) und in _detail dann die Nummer oder Adresse. Die Schüler ordnest den Familien zu.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Ich würde es ähnlich lösen:

      Tabelle Nachnamen:
      - ID (Unique)
      - Name
      - Telefon
      - Email
      ...

      Tabelle Schüler:
      - ID (Unique)
      - Nachname-ID
      - Vorname
      ...

      Wenn Telefon, E-Mail usw. nicht bekannt sind, einfach leer lassen.

      Wenn ein neuer Schüler dazu kommt, muss erstmal überprüft werden, ob in der Tabelle Nachnamen bereits ein Eintrag existiert, bei der die Spalte "Name" gleich dem Nachnamen des Schülers ist. Wenn ja, Schüler mit der nun bekannten Nachnamen-ID einfügen.
      Wenn nein, Nachnamen-Eintrag mit den nötigen/bekannten Daten erstellen und dann einen Schüler mit der Nachnamen-ID des soeben erstellten Nachnamens einfügen.

      Kommentar


      • #4
        Zitat von Spamversender Beitrag anzeigen
        Ich würde es ähnlich lösen:

        Kinder können andere Nachnamen als die Eltern haben. Eltern können mehrere Telefone und Mailadressen haben.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Zitat von Spamversender Beitrag anzeigen

          Wenn ein neuer Schüler dazu kommt, muss erstmal überprüft werden, ob in der Tabelle Nachnamen bereits ein Eintrag existiert, bei der die Spalte "Name" gleich dem Nachnamen des Schülers ist. Wenn ja, Schüler mit der nun bekannten Nachnamen-ID einfügen.
          Manche Nachnamen gibt es mehrfach.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Zitat von akretschmer Beitrag anzeigen
            Kinder können andere Nachnamen als die Eltern haben. Eltern können mehrere Telefone und Mailadressen haben.
            Es geht hier, soweit ich weiß, mehr um Geschwister als um Eltern. Geschwister haben, solange es keine Halbgeschwister sind, den gleichen Nachnamen.

            Wenn es notwendig ist ggf. mehrere Telefone bzw. mail-Adressen zu speichern, lässt man besagte Spalten in der Nachnamen-Tabelle sein und macht folgende Tabellen:

            Tabelle Telefonnummern
            - Nachname-ID
            - Telefon

            Könnte so aussehen:
            Nachname-ID | Nummer
            724 | 0123456789
            846 | 0118924862
            724 | 0168713

            Um eine gleiche Tabelle mit den Mailadressen.


            Mit mehrfachen Nachnamen geht das System u.a. nur, wenn man bei Tab. Nachnamen eine weitere Spalte z.B. Identifier macht und dann für z.B. 2mal Müller den einen mit Identifier 1 und den anderen mit 2. Dann muss man aber wissen welcher Eintrag zu dem neuen Schüler gehört. Wie würdest du es mit mehreren Nachnamen lösen?

            Kommentar


            • #7
              Zitat von Spamversender Beitrag anzeigen
              Wie würdest du es mit mehreren Nachnamen lösen?
              #2
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                Tabelle: Schüler
                • id
                • name


                Tabelle: Kontakt (Eltern, Erziehungsberechtigter, …)
                • id
                • name
                • phone
                • email


                Verknüpfungstabelle (n:m)
                • schüler_id
                • kontakt_id


                Schon können beliebig vielen Schülern, beliebig viele Kontakt zugewiesen werden.

                Kommentar


                • #9
                  Zitat von Spamversender Beitrag anzeigen
                  Mit mehrfachen Nachnamen geht das System u.a. nur, wenn man bei Tab. Nachnamen eine weitere Spalte z.B. Identifier macht und dann für z.B. 2mal Müller den einen mit Identifier 1 und den anderen mit 2. Dann muss man aber wissen welcher Eintrag zu dem neuen Schüler gehört. Wie würdest du es mit mehreren Nachnamen lösen?
                  Müller ist Müller, egal ob 1 oder 100 Familien diesen Namen besitzen.. das bedeutet nicht zwangsläufig, das sie verwandt sind.

                  Datenbanktechnisch ist es richtig, den String "Müller" nur einmal zu speichern und anschliessend immer wieder zu referenzieren - das ist der Sinn hinter der Normalisierung.
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    Zitat von lstegelitz Beitrag anzeigen
                    Müller ist Müller, egal ob 1 oder 100 Familien diesen Namen besitzen.. das bedeutet nicht zwangsläufig, das sie verwandt sind.

                    Datenbanktechnisch ist es richtig, den String "Müller" nur einmal zu speichern und anschliessend immer wieder zu referenzieren - das ist der Sinn hinter der Normalisierung.
                    Dann muss eine eigene Tabelle mit ID und Namen existieren.

                    Kommentar


                    • #11
                      Die Aufgabe ist knifflig, glaube ich. Es kann – nur als ein Beispiel – auch Schüler geben, die Halbgeschwister sind und nur Mutter oder Vater teilen. Da sind wahrscheinlich die wildesten Konstellationen denkbar.

                      Ich würde es spontan so angehen (mehr oder weniger wie akretschmer):

                      student: id, first_name, last_name
                      guardian: id, first_name, last_name

                      student_has_guardian: student_id, guardian_id

                      guardian_contact_detail: id, guardian_id, type, value

                      Es wird wohl nicht leicht, dafür ein unkompliziertes GUI zu schreiben.

                      Kommentar


                      • #12
                        Zitat von mermshaus Beitrag anzeigen
                        Ich würde es spontan so angehen (mehr oder weniger wie akretschmer):
                        Fühle mich geehrt
                        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                        Kommentar

                        Lädt...
                        X