TypeORM как лучше сгенерировать уникальный ID только из цифр длиной 6-8 знаков?
Здравствуйте. Работаю над проектом на Nest.js, к СУБД PostgreSQL запросы отправляю при помощи TypeORM. Возникла необходимость генерировать ID некоторых сущностей (Entity) в определенном формате 6ти или 8мизначные и только из цифр.
Мне пришла мысль: чeрез BeforeInsert запускать функцию, которая генерирует случайный ID из 6ти цифр, затем сверят по БД существует ли запись с таким ID, если не существует, то передает этот ID в BeforeInsert. Но я не уверен, что это самое лучшее решение для данной задачи., т.к. создается лишний запрос к БД, который в случае неуникального ID повторяется, пока не станет уникальным. Плюс, когда большая часть ID будет уже занята, это может затянуться на долгое время.
Есть ли еще какие-либо мыли, как это можно сделать лучше?
UPDATE: появилась другая мысль. Давать возможность БД работать по стандарту - генерировать ID по инкременту от предыдущего значения ID, но необходимо будет как-то контролировать, от какого числа начинается этот инкремент. Как в TypeORM с СУБД PostgreSQL это реализовать?
Оба варианта какая-то шляпа.
1. Откуда вообще такое требование? Из какой потребности оно вообще родилось?
2. Лучше позволить базе генерировать айдишники как обычно. В крайнем случае добавь при создании таблицы изначальное значение последовательности. (хз что у тебя за субд, но в том же постгресе так точно можно).
А свой типа шестизначный айдишник ты можешь получить путём преобразования обычного по какому-нибудь алгоритму. Но опять же - зачем?
Требование отчасти не очень хорошее, но заказчик хочет так...
Ну мой второй вариант соответствует твоему второму.
СУБД PostgreSQL
А как тогда реализовать изначальное значение последовательности?