У меня есть столбец varchar
в моей таблице для значения URL. Я должен сделать его уникальным по всей записи без учета регистра. Я нашел 2 способа его достижения.Уникальное ограничение нечувствительности к регистру в базе данных оракулов
Создайте уникальный указатель на поле.
create unique index <index_name> on <tablename>(lower(<column_name>))
Добавить уникальное ограничение на поле
ALTER TABLE person ADD CONSTRAINT person_name_unique UNIQUE(LOWER(first_name),LOWER(last_name));
Что такое эффективный способ принять из вышеупомянутых вариантов?
Это довольно всеобъемлющее объяснение различия, без комментариев явно на эффективность : http://stackoverflow.com/a/7522004/110933 – davek
Уникальное ограничение использует уникальный индекс под капотом, между ними нет разницы, единственное отличие - синтаксис. – krokodilko
Я бы предпочел ограничение; разница в семантике. Будущий разработчик мог бы рассмотреть ограничение как форму документации: «это должно быть нечувствительным к регистру уникальным». Уникальный индекс, OTOH, может быть истолкован как просто созданный для целей производительности: «этот столбец всегда не чувствителен к регистру» –