Sequenz durch Zufallszahl ersetzen

Ich möchte einige der Sequenzen, die ich für IDs in meiner postgresql-Datenbank verwende, durch meinen eigenen maßgeschneiderten ID-Generator ersetzen. Der Generator würde eine Zufallszahl mit einer Prüfziffer am Ende erzeugen. Also das:

SELECT nextval('customers')

würde durch so etwas ersetzt werden:

SELECT get_new_rand_id('customer')

Die Funktion würde dann einen numerischen Wert zurückgeben wie:[1-9][0-9]{9} wobei die letzte Ziffer eine Prüfsumme ist.

Ich habe folgende Bedenken:

Wie mache ich das Ding atomar?Wie vermeide ich es, dieselbe ID zweimal zurückzugeben?Ist das überhaupt eine gute Idee?

Anmerkung 1: Ich möchte uuid nicht verwenden, da es mit Kunden kommuniziert werden soll und 10 Ziffern viel einfacher zu kommunizieren sind als die 36-stellige uuid.

Anmerkung 2: Die Funktion würde selten mit aufgerufenSELECT get_new_rand_id() aber würde als Standardwert in der ID-Spalte anstelle von zugewiesen werdennextval().

BEARBEITEN: Ok, gute Diskussion unten! Hier sind einige Erklärungen fürWarum:

Warum sollte ich die Dinge auf diese Weise überkomprimieren? Ziel ist es, den Primärschlüssel vor den Kunden zu verbergen.

Ich gebe jedem neuen Kunden eine eindeutige Kunden-ID (generierte Seriennummer in der Datenbank). Da ich dem Kunden diese Nummer mitteile, ist es für meine Konkurrenten eine recht einfache Aufgabe, mein Geschäft zu überwachen (es gibt andere Nummern wie Rechnungsnummer und Bestellnummer mit denselben Eigenschaften). Es ist diese Überwachung, die ich etwas schwieriger machen möchte (Anmerkung: nicht unmöglich, aber schwieriger).

Warum die Prüfziffer?

Bevor davon die Rede war, die Seriennummer zu verbergen, habe ich eine Prüfziffer zu ordernr hinzugefügt, da es an einigen Stellen in der Produktion klumpige Finger gab, und ich dachte, dass dies eine gute Übung sein würde, die in Zukunft beibehalten werden sollte.

Nachdem ich die Diskussion gelesen habe, kann ich mit Sicherheit feststellen, dass mein Ansatz nicht der beste Weg ist, um mein Problem zu lösen, aber ich habe keine andere gute Idee, wie ich es lösen kann. Bitte helfen Sie mir hier.

Sollte ich eine zusätzliche Spalte hinzufügen, in der ich die dem Kunden zur Verfügung gestellte ID einfüge und die Seriennummer als Primärschlüssel behalte?Wie kann ich die ID generieren, um sie auf vernünftige und effiziente Weise verfügbar zu machen?Ist die Prüfziffer erforderlich?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage