Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уникальный индекс для строки [FireBird 1.5]


ChaoX ©   (2007-08-25 17:23:00) 

Мне нужно добавить уникальный индекс на строковое поле (varchar(32)) в таблице, причём сделать это так, чтобы регистр символов не влиял ни на что (т.е. строка 'Рыбы' должна быть равна 'рыбы'). При этом я очень не хочу возлагать эту функцию на программу. Сейчас я пытаюсь проэмулировать это триггером на before insert с проверкой с помощью upper, но у меня никак не получается :(

Мастера, выручайте!


atruhin   (2007-08-26 08:24:00) [1]

См. http://www.ibase.ru/devinfo/ibrusfaq.htm


Anatoly Podgoretsky   (2007-08-25 21:44:00) [2]

> Desdechado  (25.08.2007 20:37:05)  [5]

Если есть collation и работает, то это хорошо, а то предложения выглядят как поправить правое ухо левой рукой.


Johnmen   (2007-08-25 21:31:00) [3]

Индексы по вычисляемым полям доступны не раньше 2.0
У автора 1.5


Desdechado   (2007-08-25 20:37:00) [4]

Есть и вычисляемые, и collation'ы.
Просто я настолько редко ими пользуюсь, что не помню, можно ли по ним построить уникальный индекс.


sniknik   (2007-08-25 20:12:00) [5]

> которое заполняется триггером сразу в верхнем регистре.
а зачем триггер? разве нет вычисляемых полей в FireBird-е?
типа mssql-ого CREATE TABLE ... (..., Name VarChar(), UpName AS Upper(Name)) по которому после и индекс можно сделать, и искать по нему, хотя это и лишнее (без этого COLLATION можно выбрать такой, что поведение будет подобно желаемому в [0])

точно не скажу, но вроде и вычисляемые и коллатионы в FireBird-е есть.


Desdechado   (2007-08-25 19:50:00) [6]

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

А проверять существование в триггере бессмысленно, т.к. он в отличие от индекса работает в контексте транзакции. Т.е. при многопользовательской работе много шансов получения дублей.


Johnmen   (2007-08-25 19:05:00) [7]


> но у меня никак не получается :(

Что именно?


Anatoly Podgoretsky   (2007-08-25 18:47:00) [8]

А оно вообще может это?


Наверх

Титульная страница Поиск, карта сайта Написать письмо