Сегодня я создавал новую таблицу в 10g, когда заметил интересное поведение. Вот пример того, что я сделал:
CREATE TABLE test_table ( field_1 INTEGER PRIMARY KEY );
По умолчанию Oracle создаст ненулевой уникальный индекс для первичного ключа. Я дважды проверил это. После быстрой проверки я нахожу уникальное индексное имя SYS_C0065645. Пока все работает как положено. Теперь я сделал это:
CREATE TABLE test_table ( field_1 INTEGER,
CONSTRAINT pk_test_table PRIMARY KEY (field_1) USING INDEX (CREATE INDEX idx_test_table_00 ON test_table (field_1)));
После описания моего недавно созданного индекса idx_test_table_00 я вижу, что он не уникален. Я попытался вставить дублирующиеся данные в таблицу и был остановлен ограничением первичного ключа, доказав, что функциональность не была затронута. Мне кажется странным, что Oracle позволил бы использовать неуникальный индекс для ограничения первичного ключа. Почему это разрешено?