Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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

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

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


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

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


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

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


 
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 была и другими потенциально возможными серверами...


 
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)
ну первый способ гарантирует совместимость..Хотя, конечно, кривоват..


 
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....


 
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))

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


 
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: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 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


 
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...


 
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
Постараюсь скачать, но судя по документации, там пока этого нет.
:(


 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.04 c
3-1081744611
Bizon
2004-04-12 08:36
2004.05.09
Checkbox в DBGride


6-1079468208
Djon007
2004-03-16 23:16
2004.05.09
Как по IP подвесить машину:)


8-1076409176
_none_
2004-02-10 13:32
2004.05.09
GDI+ и win2003server


1-1082532993
Алексей_
2004-04-21 11:36
2004.05.09
Остановка обработки в главной форме


3-1081741809
Геннадий
2004-04-12 07:50
2004.05.09
Как выделить составляющую из даты?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский