Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Уникальность Case Insensitive   Найти похожие ветки 

 
kaif ©   (2004-04-11 16:21) [0]

Иногда бывает нужно в БД иметь уникальный индекс, который не различал бы регистр букв. Как это лучше всего организовать?


 
Jack128 ©   (2004-04-11 16:31) [1]

добавь поле, заполняемое на тригерах и строй по нему индекс..Или еще вариант перейти на Yaffil, там индексы по udf есть..


 
kaif ©   (2004-04-11 16:57) [2]

2 Jack128 ©   (11.04.04 16:31) [1]
Я использую Yaffil выше версии 877 или Firebird выше 1.5 RC4. В принципе, я видимо могу попробовать воспользоваться вторым советом (еще не экспериментировал с такими индексами). Жаль, однако, что исходный стандарт не предусматривает такую вещь, хотя предусматривает наличие встроенной функции upper. Я стараюсь все время придерживаться минимализма в синтаксисе, чтобы совместимость с IB6.5 была и другими потенциально возможными серверами...


 
Jack128 ©   (2004-04-11 17:12) [3]


> [2] kaif ©   (11.04.04 16:57)
ну первый способ гарантирует совместимость..Хотя, конечно, кривоват..


 
kaif ©   (2004-04-11 17:46) [4]

Интересно...а индекс по вычисляемым полям возможен? Тогда можно было бы создать вычисляемое поле COMPUTED BY, а по нему - индекс. Какая идея!!! Сейчас посмотрю в документации. Наверняка меня обломают какой-нибудь фразой типа: calculated columns cannot be used in the index....


 
Jack128 ©   (2004-04-11 17:57) [5]

даже теоритически недадут создать такой index.
Дапустим я создам поле
alter table ...
ADD TEST COMPUTED BY (cast("now" as timestamp))

И как по этому полю индекс делать... Кстати как эта проблема в яфиле решается, я не знаю..


 
kaif ©   (2004-04-11 18:01) [6]

Пока чисто эмпирически...
создаю поле
alter table city add aaa varchar(35) computed by (upper(name));

select * from city;
шикарная колонка!

alter table city add constraint x_aaa unique (aaa);

unseccesful metadata update
attempt to index COMPUTED BY column in INDEX RDB$3

Блин!

А теперь читаем документацию (Language Reference-CREATE INDEX)

You cannot index Blob columns or arrays.
A UNIQUE index cannot be created on a column or set of columns that already contains
duplicate or NULL values.  

И где тут речь о COMPUTED BY ?


 
kaif ©   (2004-04-11 18:05) [7]

2 Jack128 ©   (11.04.04 17:57) [5]
Видно надо будет поэкспериментировать со вторым способом. Но это я сделаю позже и более систематически.
А пока что облом с вычисляемым полем... Такое ощущение, что стандарт SQL делали не совсем для людей... Или в те времена в базах данных IBM использовались только большие буквы :)


 
kaif ©   (2004-04-11 23:27) [8]

Попробовал в Yaffil 877. Отлично сработало:

create unique index x_aaa on city computed by (upper(name))
И четко не допустило дубликата.

Однако попытка создать констрейнт не прошла:

alter table city add constraint x_bbb unique computed by (upper(name))

-не понял слово computed.

Но это не так обязательно (именовать такие констрейнты), так как возможность именования индекса вполне достаточна для того, чтобы потом его при желании удалить.

Еще попробую потом под
Firebird 1.5 RC4


 
Jack128 ©   (2004-04-11 23:35) [9]

Что ж..Ждем слияния кода Yaffil"a и FB...


 
kaif ©   (2004-04-12 00:16) [10]

К сожалению, CREATE UNIQUE INDEX <name> ON <table> COMPUTED BY (<exprssion>)
на Firebird 1.5 RC4 не сработала.
Зато зашел на http://firebird.sourceforge.net/
и вижу Firebird 1.5 Final Release
Постараюсь скачать, но судя по документации, там пока этого нет.
:(



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.085 c
1-1082404703
ASvencim
2004-04-19 23:58
2004.04.11
Как программно узнать имя сеанса Windows?


7-1076080076
Станислав
2004-02-06 18:07
2004.04.11
Рабочий стол


3-1078993755
Владимир Р.
2004-03-11 11:29
2004.04.11
Вопрос по кодировке Foxpro


11-1060542753
Dimaxx
2003-08-10 23:12
2004.04.11
Грабли с CopyRect...


14-1079338876
Sabor
2004-03-15 11:21
2004.04.11
win XP