![]() |
|
Модераторы: Akella |
![]()
|
|
| Чoо |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: нет Всего: 4 |
Первое, что приходит в голову, это добавить в таблицу поле blobCRC (unique) в которое перед записью текстового блоб-поля пытаться записать вычисленную пользовательским приложением, контрольную сумму. Если запись удалась, то можно записывать и блоб-поле, если нет, то текущая запиь не является уникальной, о чем сообщается пользователю.
Или есть более изящные варианты? на всякий случай, сообщаю, что в этом поле текста будет существенно меньше 32 КБайт. впринципе вижу и второй вариант, формировать SQL запрос:
но в этом случае: 1. Надо передавать текст на сервер, что бы проверить есть ли такой 2. Надо еще раз передавать, если его все-таки нет 3. Сервер в поисках блоб-поля будетп росматривать все записи с первой до тех пор, пока не закончатся все записи или не будет найден такой же текст. Вобщем как-то неоптимально.. Посоветуйте что-нибудь? -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 1 Всего: 54 |
а зачем именно Blob может Varchar и уникальный индекс по этому полю
у контрольной суммы могут быть коллизии... -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Чoо |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: нет Всего: 4 |
Frees, коллизий боюсь.. да.. а varchar не утраивает тем, что при кодировке win1251 уникальный индекс можно будеть создать, только если строка будет иметь длину не больше 252 символов (252 байта). в firebird 1.5 вроде такое ограничение. использую 2.1, но по этому поводу ни какой информации не нашел.
Хоть я и использую эту кодировку, мне 252 символов точно мало. Это сообщение отредактировал(а) Чoо - 17.8.2010, 21:17 -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 1 Всего: 54 |
еще можно сделать сохраненку в нее 1 раз передаешь текст она его сперва ищет (без запроса на поиск помоему не обойтись), а если не найдет то вставляет.
или через Check
Добавлено через 5 минут и 11 секунд если через чек то в случае повтора будет исключение, если через сохраненку то можно сделать, что бы она просто возвращала вставлена или нет запись. Добавлено через 8 минут и 40 секунд вообще хорошая идея, только помимо crc еще хранить длину текста тогда вероятность коллизии буде стремиться к 0. -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Чoо |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: нет Всего: 4 |
Frees, вариант с check для многопользовательской среды не годится (читаю в книге Хеллен Борри, стр. 314:
Может я не правильно что-то понял... А что вы понимаете под сохраненкой? Добавлено через 1 минуту и 17 секунд
однако хоть и не большая, но есть вероятность коллизии. все-таки это неприемлимо. -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
||||
|
|||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
Чoо, гарантированную уникальность обеспечит только уникальный индекс, никакие триггеры, чеки, процедуры и т.д. тут не помогут.
Сл-но, смотрим по каким типам полей (и размеру) можно сделать такой индекс. Получаем, что нужен какой-то алгоритм, который гарантировано для blob сделает уникальную строчку (желательно не сильно длинную). Вот и все, копайте в сторону . А вот реализация добавления/изменения такой пары (blob + blobCRC), это на любителя. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
читай RN, на сколько мне известно, то уже больше Добавлено через 1 минуту и 43 секунды
Ага, так, наверное и быстрее будет, ведь поверить длину текста куда быстрее, чем сверять полностью значение поля. Добавлено через 2 минуты и 9 секунд А если уж длина совпала, то тогда и значение поля можно проверять. |
|||
|
||||
![]()
|
| Правила форума "Interbase" | |
|
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |