Zastępowanie sekwencji liczbą losową

Chciałbym zastąpić niektóre sekwencje, których używam dla identyfikatorów w mojej db postgresql, własnym własnym generatorem id. Generator wygenerowałby losową liczbę z końcówką kontrolną na końcu. Więc to:

SELECT nextval('customers')

zostanie zastąpiony przez coś takiego:

SELECT get_new_rand_id('customer')

Funkcja zwróciłaby następnie wartość liczbową, taką jak:[1-9][0-9]{9} gdzie ostatnia cyfra jest sumą kontrolną.

Mam obawy:

Jak sprawić, by rzecz stała się atomowaJak uniknąć dwukrotnego zwracania tego samego identyfikatora (zostanie to złapane przez próbę wstawienia go do kolumny z unikalnym ograniczeniem, ale potem będzie za późno na myślenie)Czy to w ogóle dobry pomysł?

Notatka 1: Nie chcę używać uuid, ponieważ ma on być komunikowany z klientami, a 10 cyfr jest znacznie prostsze do komunikowania niż uuid 36 znaków.

Uwaga2: Funkcja rzadko bywa wywoływanaSELECT get_new_rand_id() ale zostanie przypisany jako wartość domyślna w kolumnie id zamiastnextval().

EDYTOWAĆ: Ok, dobra dyskusja poniżej! Oto kilka wyjaśnieńczemu:

Dlaczego więc miałbym przesadzać w ten sposób? Celem jest ukrycie klucza głównego przed klientami.

Każdemu nowemu klientowi nadajemy unikalny identyfikator klienta (wygenerowany numer seryjny w db). Ponieważ przekazuję ten numer klientowi, moim konkurentom jest dość proste zadanie monitorowania mojej firmy (istnieją inne numery, takie jak nr faktury i nr zamówienia, które mają te same właściwości). To właśnie ten monitoring chciałbym uczynić nieco trudniejszym (uwaga: nie niemożliwe, ale trudniejsze).

Dlaczego cyfra kontrolna?

Zanim zaczęto mówić o ukrywaniu numeru seryjnego, dodałem do ordernritigit, ponieważ w niektórych punktach produkcji były niezdarne palce, a myślałem, że będzie to dobra praktyka, aby zachować ją w przyszłości.

Po przeczytaniu dyskusji z pewnością widzę, że moje podejście nie jest najlepszym sposobem na rozwiązanie mojego problemu, ale nie mam innego dobrego pomysłu, jak go rozwiązać, więc proszę mi pomóc tutaj.

Czy powinienem dodać dodatkową kolumnę, w której umieściłem identyfikator, który wystawiam klientowi, i zachować numer seryjny jako klucz podstawowy?W jaki sposób mogę wygenerować identyfikator do ujawnienia w rozsądny i skuteczny sposób?Czy rejestr kontrolny jest konieczny?

questionAnswers(6)

yourAnswerToTheQuestion