ВНИМАНИЕ: Оцените все ответы, спасибо, но у нас уже есть последовательность ... и мы не можем использовать УНИКАЛЬНЫЕ ограничения, потому что некоторые элементы должны иметь дубликаты. Мне нужно как-то обрабатывать это с помощью PLSQL, поэтому на основе некоторых критериев(используя оператор if) мне нужно убедиться, что для этого нет дубликатов .. И просто для подтверждения, эти идентификаторы очень настраиваются с разными типами строк. И для каждого набора строк у нас есть только число, которое подсчитываетсядля этой строки (STR-STR - ####), и у нас есть, как сотни этих комбинаций STR-STR, и для каждой комбинации у нас есть ####, который считает ... И поверх этих некоторых STR-STRкомбинации могут иметь дубликаты. Таким образом, мы НЕ МОЖЕМ использовать УНИКАЛЬНЫЕ ОГРАНИЧЕНИЯ, не можем использовать ПЕРВИЧНЫЙ КЛЮЧ, так как это не простое число, и помимо этого у нас есть ПЕРВИЧНЫЙ КЛЮЧ, назначенный каждому элементу. Эти идентификаторыдля пользователей, а не для управления базой данных.
Когда пользователь создает элемент на основе какого-либо материала, мы присваиваем элементу определенное число. В функции сохранения вызывается функция для подготовки первой исходной строки, а затем таблицы, в которой находятся числа.хранится, сканируется и присваивается следующее доступное 4-значное число для этой конкретной строки.
Теперь с этим есть некоторые проблемы, между получением следующего номера и фиксацией в базе данных существует около 1000 строк кодов.,Проблема заключается в том, что когда 2 человека создают элемент с одинаковыми критериями в течение нескольких секунд, иногда выдается одно и то же число.
Что я сделал, так это то, что перед фиксацией я проверял базу данных на наличиеномер и, если он существует, я вызываю функцию, чтобы снова получить следующий доступный номер ...
Несмотря на то, что этот код уменьшил шансы на дублирование, если я сохраню 2 элемента одновременно, я все равно сохранюполучить дубликат числа ..
Кто-нибудь знает любой способ избежать дубликатов и снизить шансы дубликата числа до 0?
РЕДАКТИРОВАТЬ1: у нас уже есть первичный ключ .. Этот идентификаторспециальная строка, и очень настраиваемая, поэтому нельзя просто использовать число, которое считается от 0
РЕДАКТИРОВАТЬ2: Есть также некоторые случаи, когда нам нужны дубликаты ... это очень незначительно (может быть,около 10 различных треков предметов используют дубликаты), поэтому перед тем, как я проверю дубликаты, перед коммитом с инструкцией if, так что если элемент сохраняетсяЗатем на одной из систем, которая должна иметь дубликаты, я пропускаю проверку ...
РЕДАКТИРОВАТЬ 3: Мы используем PL / SQL здесь
РЕДАКТИРОВАТЬ 4: Я думаю, эта проблемабыл очень конкретным, и я не совсем выразил это так. Хотя было много ответов, никто из них действительно не охватил мою проблему .. Несмотря на это, я решил проблему и добавил ниже как мой ответ ..