Главная страница
    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.036 c
7-1079529307
Dastin
2004-03-17 16:15
2004.05.09
Определение буквы CD


6-1079672319
boa
2004-03-19 07:58
2004.05.09
Помогите разобраться с функцией NetServerGetInfo!!


3-1081507724
Denis_Visma
2004-04-09 14:48
2004.05.09
Выборка данных за каждый месяци сумирование


3-1082022725
Capricorn7B
2004-04-15 13:52
2004.05.09
Глюк в компоненте IBDataSet


6-1079088625
Trogvar
2004-03-12 13:50
2004.05.09
Сканер TCP-портов (SYN-stealth)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский