bernd: Eindeutige ID, nicht PK etc

Hallo,
hoffentlich ist die Kategorie richtig. Könnte auch in PHP reinpassen.

Ich trage in meine Datenbank 4 Felder je Datensatz ein. (ID, Name, Ort, Farbe)
Ich möchte gern vor oder während des Eintrags aus den Feldern für Name und Ort eine absolut eindeutige ID erzeugen. (Nennt man das Hash?) (Dazu werde ich noch eine Extraspalte anlegen)

Was mir spontan einfällt ist MD5(). Das mach ich aber dann vorher in PHP. Gibt es so etwas auch auf Datenbankseite? Welche Möglichkeiten gibt es überhaupt bei ordentlicher Geschwindigkeit?

Also so stell ich mir dann das Ergebniss vor:
Inhalt von Name: "Meier"
Inhalt von Ort: "Musterstadt"
wird zu: "fd8hg8guergu4gu89erge489" oder so ähnlich...
Es muss aber unbedingt eindeutig sein bspw. kann Meier auch Eimer sein, deswegen unbedingt einmalig.

Ich hoffe ich konnte darstellen, was ich überhaupt will ;)

Vielen Dank.

  1. hoffentlich ist die Kategorie richtig. Könnte auch in PHP reinpassen.

    wieso, es geht doch um datenbanken?

    Ich trage in meine Datenbank 4 Felder je Datensatz ein. (ID, Name, Ort, Farbe)
    Ich möchte gern vor oder während des Eintrags aus den Feldern für Name und Ort eine absolut eindeutige ID erzeugen. (Nennt man das Hash?) (Dazu werde ich noch eine Extraspalte anlegen)

    nein, das nennt man "id" - wenn du schon ein feld mit der id hast, warum verwendest du es nicht entsprechend

    Was mir spontan einfällt ist MD5(). Das mach ich aber dann vorher in PHP. Gibt es so etwas auch auf Datenbankseite? Welche Möglichkeiten gibt es überhaupt bei ordentlicher Geschwindigkeit?

    falscher ansatz

    Also so stell ich mir dann das Ergebniss vor:
    Inhalt von Name: "Meier"
    Inhalt von Ort: "Musterstadt"
    wird zu: "fd8hg8guergu4gu89erge489" oder so ähnlich...
    Es muss aber unbedingt eindeutig sein bspw. kann Meier auch Eimer sein, deswegen unbedingt einmalig.

    Ich hoffe ich konnte darstellen, was ich überhaupt will ;)

    ja, den sinn begreife ich allerdings nicht

    was spricht gegen eine id, wie sie normalerweise verwendet wird?

    ggf. möchtest du auch diesen thread studieren

    1. Hallo,

      wieso, es geht doch um datenbanken?

      Man weiß ja nie.

      nein, das nennt man "id" - wenn du schon ein feld mit der id hast, warum verwendest du es nicht entsprechend

      Weil in einer anderen Abfrage diese ID nicht bekannt ist, aber sehr wohl die beiden Inhalte der betreffenden Felder. Meine Hoffnung war nun ein Schlüssel der die Suche beschleunigt. Es ist doch bestimmt ein Unterschied über die gesamte Tabelle (bzw. 2 Spalten) zu suchen oder eben nur nach einem konkretem Schlüssel in einer Spalte. Oder liege ich falsch?

      Was mir spontan einfällt ist MD5(). Das mach ich aber dann vorher in PHP. Gibt es so etwas auch auf Datenbankseite? Welche Möglichkeiten gibt es überhaupt bei ordentlicher Geschwindigkeit?
      falscher ansatz

      Welche Frage ist damit beantwortet? ALle? Eine? Welche?

      ja, den sinn begreife ich allerdings nicht

      Siehe oben

      was spricht gegen eine id, wie sie normalerweise verwendet wird?

      Gar nichts.

      ggf. möchtest du auch diesen thread studieren

      Nein. Vielen Dank. Habe ich schon. Hilft mir leider nicht.

      Grüße

      1. Yerf!

        Weil in einer anderen Abfrage diese ID nicht bekannt ist, aber sehr wohl die beiden Inhalte der betreffenden Felder. Meine Hoffnung war nun ein Schlüssel der die Suche beschleunigt.

        Sag doch gleich, dass du einen Index suchst... ;-)

        Gruß,

        Harlequin

        --
        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
      2. Hallo,

        nein, das nennt man "id" - wenn du schon ein feld mit der id hast, warum verwendest du es nicht entsprechend

        Weil in einer anderen Abfrage diese ID nicht bekannt ist, aber sehr wohl die beiden Inhalte der betreffenden Felder. Meine Hoffnung war nun ein Schlüssel der die Suche beschleunigt. Es ist doch bestimmt ein Unterschied über die gesamte Tabelle (bzw. 2 Spalten) zu suchen oder eben nur nach einem konkretem Schlüssel in einer Spalte. Oder liege ich falsch?

        Dazu ist keine weitere Spalte notwendig, sondern nur ein entsprechender Index. Wenn die Daten nicht eindeutig sind, dann kann der Index auch nicht eindeutig sein. Benötigst Du einen eindeutigen Index, dann müssen die Daten auch eindeutig sein.

        falscher ansatz
        Welche Frage ist damit beantwortet? ALle? Eine? Welche?

        ja, den sinn begreife ich allerdings nicht
        Siehe oben

        Ich kann es nur bestätigen: "Falscher Ansatz". Du benötigst keine weitere Spalte sondern nur einen Index. Sowas bieten alle mir bekannten Datenbankmanagementsysteme - auch einen Index, der mehr als eine Spalte umfasst.

        Freundliche Grüße

        Vinzenz

  2. Hallo Bernd,

    Ich trage in meine Datenbank 4 Felder je Datensatz ein. (ID, Name, Ort, Farbe)
    Ich möchte gern vor oder während des Eintrags aus den Feldern für Name und Ort eine absolut eindeutige ID erzeugen.

    wenn die Kombination von Name und Ort nicht eindeutig ist, dann geht dies nicht. Dann benötigst Du eine weitere (nachvollziehbare) Information, die die Eindeutigkeit herstellt.

    (Nennt man das Hash?)

    Nein, die Bildung eines Hashwertes wäre dann eine Möglichkeit (von Kollisionen abgesehen), wenn die Kombination von Name und Ort eindeutig wäre. Wenn Du dies erzwingen willst, dann sorge dafür, dass in beiden Spalten NULL-Werte nicht erlaubt sind und versieh' die Kombination der beiden Spalten mit einem eindeutigen (UNIQUE) Index.

    (Dazu werde ich noch eine Extraspalte anlegen)

    wozu?

    Was mir spontan einfällt ist MD5(). Das mach ich aber dann vorher in PHP.

    Wenn ja, warum?

    Gibt es so etwas auch auf Datenbankseite?

    Wenn Dein Datenbankmanagementsystem (Access, DB2, dBase, Firebird, FoxPro, Informix, MS SQL-Server, MySQL, Oracle, PostgreSQL, SQLite ...) das bietet. Welches verwendest Du (in welcher Version)?

    Ich hoffe ich konnte darstellen, was ich überhaupt will ;)

    ich habe verstanden, was Du willst - aber nicht wozu.

    Freundliche Grüße

    Vinzenz