Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankdesign PK, FK - welche Tabelle ist child/parent?

Einklappen

Neue Werbung 2019

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

  • Datenbankdesign PK, FK - welche Tabelle ist child/parent?

    Liebe Forenmitglieder,

    meine Frage beschäftigt sich mit einem Datenbankdesignproblem.

    Annahme:

    Es existieren die Tabellen:
    • kunde,
    • adresse und
    • plzort.
    Kunde enthält die persönlichen Daten, Adresse die Adressdaten ohne Wohnort und PLZOrt die Zuordnung von PLZ zum Ortsnamen.
    kunde adresse plzort
    kundeid, AI, PK adresseid, AI, PK plz PK
    nachname anschrift ort
    vorname plz
    Frage:

    Wo erstelle ich am besten den Fremdschlüssel? Erststelle ich in der Tabelle kunde einen Fremdschlüssel, der auf adresseid in der Tabelle adresse zeigt oder erstelle ich einen Fremdschlüssel in der Tabelle adresse, der auf kundeid in der Tabelle kunde zeigt?

    Liebe Grüße

    Jan

  • #2
    Haben Kunden X, Y, Z die Adresse A? Oder hat Kunde A die Adressen X, Y und Z?
    Je nachdem welche Beziehung du darstellen willst braucht eine andere Tabelle den Fremdschlüssel.

    Wenn ein Kunde mehrere Adressen haben kann, packst du den Fremdschlüssel in die Adress-Tabelle

    Kunde A- Lumpi - Helmut

    Adresse X - Blastraße 4 - gehört zu Kunde A
    Adresse Y- Blastraße 5 - gehört zu Kunde A
    Adresse Z- Blastraße 6 - gehört zu Kunde A
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #3
      Zitat von VPh Beitrag anzeigen
      Haben Kunden X, Y, Z die Adresse A? Oder hat Kunde A die Adressen X, Y und Z?
      Danke, für die schnelle Antwort. Ein Kunde kann nur eine Adresse haben, eine Adresse kann aber von mehreren Kunden genutzt werden.


      Dementsprechend packe in den Fremdschlüssel in die Kundentabelle?

      Kommentar


      • #4
        mehrerer Orte können eine gleiche PLZ haben.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Zitat von akretschmer Beitrag anzeigen
          mehrerer Orte können eine gleiche PLZ haben.
          Das wäre mir neu.

          Kommentar


          • #6
            https://www.suche-postleitzahl.org/plz-gebiet/24963
            2 Orte eine Postleitzahl.

            Kommentar


            • #7
              Hast du auch ausländische Kunden/Adressen?
              The string "()()" is not palindrom but the String "())(" is.

              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Zitat von hausl Beitrag anzeigen
                Hast du auch ausländische Kunden/Adressen?
                Im Normalfall nicht. Das ist aber gerade auch noch nicht so wichtig. Ich versuche damit, mich mit SQL zurecht zu finden.

                Zitat von protestix Beitrag anzeigen
                Gut zu wissen, war mir bisher nicht bekannt.



                Ich habe jetzt in der Kundentabelle einen Fremschlüssel adresseid angelegt. Jetzt habe ich aber das Problem, dass wenn in einem Datensatz die Adresse eines Kunden geändert wird (z.B. wegen Umzug), ändert sich auch die Adresse für mehrere Kunden. Sollte in dem Fall überhaupt zu einer 1:n-Beziehung gegriffen werden? Oder lieber redundantes Speichern von gleichen Adressdaten und Umgehen des Problems (1:1-Beziehung)?

                Kommentar


                • #9
                  Naja, andere Länder können auch andere Logiken bzgl. redundanter PLZ / Adressen haben. So gesehen ... Wollt ich nur als Gedanke einwerfen.
                  The string "()()" is not palindrom but the String "())(" is.

                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar


                  • #10
                    Zitat von JLtz Beitrag anzeigen
                    Ich habe jetzt in der Kundentabelle einen Fremschlüssel adresseid angelegt. Jetzt habe ich aber das Problem, dass wenn in einem Datensatz die Adresse eines Kunden geändert wird (z.B. wegen Umzug), ändert sich auch die Adresse für mehrere Kunden. Sollte in dem Fall überhaupt zu einer 1:n-Beziehung gegriffen werden? Oder lieber redundantes Speichern von gleichen Adressdaten und Umgehen des Problems (1:1-Beziehung)?
                    Das kommt auf deinen Anwendungsfall an.
                    So wie du die Frage gestellt hast bin ich davon ausgegangen, dass du feste Adressen hast die den Kunden dann zugeordnet werden. (z.B. Kunde wohnt im Kreis von abc und kann deshalb nur aus Lager x beliefert werden)
                    Wenn die Adressen aber Bewegungsdaten sind würde ich es mir einfach machen und das ganze redundant speichern.
                    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                    Kommentar


                    • #11
                      Zitat von protestix Beitrag anzeigen
                      Nur um das Thema nochmal aufzugreifen. Da geht noch mehr: https://www.suche-postleitzahl.org/plz-gebiet/01796

                      Und mal abgesehen davon enthalten Ortsnamen oft auch Bezeichner für Ortsteile, womit dann noch viel mehr Kombinationen gehen.

                      Gruß
                      PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

                      Kommentar


                      • #12
                        Zitat von VPh Beitrag anzeigen
                        Das kommt auf deinen Anwendungsfall an.
                        Wenn die Adressen aber Bewegungsdaten sind würde ich es mir einfach machen und das ganze redundant speichern.
                        Also ich würde sagen, wenn ich hier in meiner Mietwohnung sitze und mich so umschaue: Ja klar, da wohnen noch andere Leute!
                        Die haben alle die gleiche Adresse. Ich würde niemals auf die Idee kommen, bei einer Bestellung irgendwo anzugeben, "wenn der Frank mein Nachbar schon in Ihrer Datenbank ist, dann nehmen sie die Adresse von dem".
                        Und ein Entwickler würde auch niemals auf die Idee kommen, etwas so abzuspeichern.
                        Ich würde da auch nicht von Redundanz sprechen, es sind zufällig gleiche Daten.

                        Das Beispiel wäre vielfältig adaptierbar, niemand verwendet beim Speichern seines Geburtsdatums einen Verweis auf jemand, der das gleiche Geburtsdatum hat, nicht mal Zwillinge.

                        Kommentar


                        • #13
                          Die haben alle die gleiche Adresse. Ich würde niemals auf die Idee kommen, bei einer Bestellung irgendwo anzugeben, "wenn der Frank mein Nachbar schon in Ihrer Datenbank ist, dann nehmen sie die Adresse von dem".
                          Ja.
                          Soll ich das Beispiel weiter ausführen in dem ich zu so einer Methode greifen könnte ("feste Lager die den Kunden zugeordnet werden"), oder worauf möchtest du hinaus?

                          Und ein Entwickler würde auch niemals auf die Idee kommen, etwas so abzuspeichern.
                          Das mit den Wohn-, Liefer-, Rechnungsadressen? Richtig.
                          Rest: Das kommt auf deinen Anwendungsfall an.

                          Disclaimer: ich werde nicht anfangen so ein Beispiel zu konstruieren. Ich schließe nur nicht aus, dass es mal so ein Szenario geben kann.

                          Ich würde da auch nicht von Redundanz sprechen, es sind zufällig gleiche Daten.
                          In der Praxis würde ich das auch nicht so nennen, der Begriff ist aber schon gefallen. Passen tut der Begriff trotzdem, wenn ich eine Tabelle habe in der ich alle Anschriften habe, könnte ich einfach immer darauf verweisen ohne die Anschriften mehrfach speichern zu müssen.
                          [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                          [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                          Kommentar

                          Lädt...
                          X