Tabellen verbinden: ID oder Strings

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

  • Tabellen verbinden: ID oder Strings

    Hallo,

    beim Entwurf des DB Designs kann man das Verbinden von Tabellen
    wahlweise über die IDs (die sich per auto_increment ergeben) oder über irgendwelche Strings realisieren.

    Beispiel für String: Ich habe eine Kunden-Kontakttabelle, in die ich den Namen des Kunden aus der Kundentabelle eintrage. Beim JOIN verbinde ich dann die Kontakttabelle mit der Kundentabelle über den Kundennamen.

    Beispiel für ID: Ich trage in die Kontaktabelle die ID des Kunden ein und nutze diese beim JOIN zum Verbinden.

    Das String Verfahren hat natürlich den Nachteil, dass ich dann, wenn sich der Kundenname ändert, diesen auch in der Kontakttabelle ändern muss.

    Das ID Verfahren hat den Nachteil, dass dann, wenn eine der Tabellen korrupt ist und kein Backup machbar ist, keine Verbindung über die IDs mehr hergestellt werden kann, weil sich u. U. für denselben Kunden eine völlig neue ID ergeben kann (wenn man auto_increment nutzt.

    Was ist denn hier die Empfehlung der DB Experten?

  • #2
    im normalfall werden (numerische) ids verwendet
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Die Experten würden in regelmäßigen Abständen ein Backup machen und eine eindeutige Nutzer-ID dem Namen als Primärschlüssel vorziehen.

      Denn je nach größe des Datenbestandes, kann es durchaus auch mal vorkommen, dass ein Name doppelt vorhanden ist...und wenn Deine Tabellen korrupt und nicht wieder herstellbar sind, dann sind Deine Daten sowieso unbrauchbar...

      Kommentar


      • #4
        Re: Tabellen verbinden: ID oder Strings

        Original geschrieben von Stonebreaker62
        Das String Verfahren hat natürlich den Nachteil, dass ich dann, wenn sich der Kundenname ändert, diesen auch in der Kontakttabelle ändern muss.
        Das kann eine InnoDB auch alleine ... einfach den FOREIGN KEY mit ON UPDATE CASCADE einrichten.

        Original geschrieben von Stonebreaker62
        Das ID Verfahren hat den Nachteil, dass dann, wenn eine der Tabellen korrupt ist und kein Backup machbar ist, keine Verbindung über die IDs mehr hergestellt werden kann, weil sich u. U. für denselben Kunden eine völlig neue ID ergeben kann (wenn man auto_increment nutzt.
        Verwende 'nen Transaktionssicheren Table Handler wie InnoDB, dann sollte das nicht vorkommen ... zumindest ist bei InnoDB wenn was passiert nicht die Tabelle kaputt sondern die ganze Datenbank.

        Original geschrieben von Stonebreaker62
        Was ist denn hier die Empfehlung der DB Experten?
        ID ... einfach weil's schneller ist. Auch wenn das dann nix mit Normalisierung zu tun hat. Jeder JOIN ist auf jeden Fall schneller.
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar

        Lädt...
        X