Если вы ищете принудительную реализацию какой-то уникальности для всех будущих записей, сохраняя при этом свои текущие дубликаты, вы не можете использовать ограничение UNIQUE.
Вы можете использовать триггер в таблице для проверки значения, которое будет вставлено, относительно текущих значений таблицы и, если оно уже существует, предотвратить вставку.
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm
или вы можете просто удалить дублирующиеся значения, а затем применить свое УНИКАЛЬНОЕ ограничение.
РЕДАКТИРОВАТЬ: После комментариев Jonearles и Jeffrey Kemp я добавлю, что вы можете фактически включить уникальное ограничение для таблицы с дублирующимися значениями, используя предложение NOVALIDATE
, но вы не сможете иметь уникальный индекс для этот ограниченный столбец.
См. Объяснение Тома Кайта здесь .
Однако я все еще беспокоюсь о том, насколько очевидным было намерение для будущих людей, которые должны поддерживать базу данных. С точки зрения поддержки было бы более очевидно либо удалить дубликаты, либо использовать триггер, чтобы прояснить свое намерение.
YMMV