Если вам нужно увеличивающееся целое число, вам действительно следует сделать то, что вы предложили - иметь другую таблицу, поддерживающую идентификаторы транзакций. Вы можете достаточно регулярно просматривать эту таблицу, чтобы удалять строки, хотя они будут очень маленькими и эффективными, так что это не должно вызывать беспокойства.
Существует множество других возможных решений, но, как вы уже выяснили, большинство из них не работают в вашей ситуации (вероятность столкновений, в зависимости от требуемой точности). Если вам нужно использовать базу данных, чтобы гарантировать уникальность, это единственный способ сделать это в SQLite. В качестве альтернативы, вы можете попробовать что-то вроде random
или randomblob
функции , но, очевидно, нет никаких гарантий уникальности для PRG.
Если вам не нужно монотонно увеличивающееся целое число, вы также можете сгенерировать RFC 4122 UUID на уровне приложения (они могут конфликтовать, хотя и редко, если вы запись из многих процессов - вы также можете пометить ее строкой, специфичной для процесса, и сделать ее URN, что-то вроде urn:uuid:<tag>+<uuid>
). Если все авторы находятся на одном компьютере, то для тега будет достаточно использовать что-то вроде pid
, чтобы гарантировать уникальность.