Страница 8 из 10

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 10:24
Игорь Столяров
kreator писал(а): 26 Сентябрь 2019, 10:06А как вы решаете проблему уникальности полей при таких напрягах?
Добавлением лишнего пробела в краткое наименование с целебным матом. :)
А как её ещё решишь если Set() идёт по ключу, а значения полей в ключе одинаковые ?

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 10:31
kreator
Дело не в Set. Прошу прощения, если чего не понял. Есть у меня таблица, есть там строковое поле в 1000 символов. Я хочу на уровне базы прописать уникальность этого поля. Я ведь должен создать ключ по этому полю и наложить на него условие уникальности. Разве не так?

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 10:35
finsoftrz
Если кратко, то не так. :-)

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 10:42
kreator
А если не кратко? Как?

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 10:45
Игорь Столяров
Не помогает эта примочка с наложением ни от чего.
Просто получается два наименования в одном:
- краткое для ключа
- полное для отображения.

Гипотетически вопрос можно решить, если использовать в ключе сигнатуру полного наименования.
Но это такая головная боль … :(

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 10:51
finsoftrz
kreator писал(а): 26 Сентябрь 2019, 10:42А если не кратко? Как?
Читайте выше, все написано.

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 10:54
finsoftrz
Игорь Столяров писал(а): 26 Сентябрь 2019, 10:45Не помогает эта примочка с наложением ни от чего.
Просто получается два наименования в одном:
- краткое для ключа
- полное для отображения.
От чего не помогает?

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 10:57
morkovin
finsoftrz писал(а): 26 Сентябрь 2019, 9:49 Краткое наименование только в ключе.
Краткое наименование ещё придумать надо - уникальное и всем понятное. :(

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 11:00
Игорь Столяров
finsoftrz писал(а): 26 Сентябрь 2019, 10:54От чего не помогает?
От некорректного позицирования засветки на списке при его открытии в режиме выбора записи по ключу с неполным наименованием. :)
А отчёты … Отчёт вообще можно сортировать-группировать через VIEW по любым полям, и это работает шустро.

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 11:01
finsoftrz
Игорь, еще раз. Делаем в ключе второе поле по уникальному идентификатору записи. И все работает.

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 11:03
finsoftrz
morkovin писал(а): 26 Сентябрь 2019, 10:57
finsoftrz писал(а): 26 Сентябрь 2019, 9:49 Краткое наименование только в ключе.
Краткое наименование ещё придумать надо - уникальное и всем понятное. :(
Ничего не надо придумывать. Краткое для ключа - это первые символы полного. Можно даже не хранить, а наложить через over.

Про уникальность? Можно еще дофильтровывать. Затраты ресурсов минимальны. Если автоматом, то шаблоном прописать в процедурах модификации данных. Но, вообще говоря, задачка уникальности наименований не очень критичная. Пользователь может всегда написать немного не так в наименовании. Полное совпадение мало вероятно.

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 11:12
Игорь Столяров
finsoftrz писал(а): 26 Сентябрь 2019, 11:01Делаем в ключе второе поле по уникальному идентификатору записи. И все работает.
Да, я понял … Получается составной ключ из фрагмента наименования и ID записи. И он уникален. По идее - должно работать. :)

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 12:08
kreator
У вас классный междусобойчик! Как сделать,чтобы "Иванов Иван Иванович" (поле 1000 символов) был уникален.

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 12:13
Amike34
Игорь Столяров писал(а): 26 Сентябрь 2019, 11:12finsoftrz писал(а): ↑26 Сентябрь 2019, 8:01
Делаем в ключе второе поле по уникальному идентификатору записи. И все работает.
Да, я понял … Получается составной ключ из фрагмента наименования и ID записи. И он уникален. По идее - должно работать.
Но все это не спасет от дублирования записи по полному (смысловому содержанию) наименованию, т.к. пользователь может вводить такие длинные наименования с некоторыми неточностями !

Может быть для такого случая можно решить так: при добавлении записи с длинным наименованием выводить на экране "еще" список уже существующих записей с (UPPER/Lower, убрать лишние пробелы и т.д.) совпадающими с 10 / 20 начальными символами => далее, если смысловое содержание наименования уже существующей записи совпадает со смысловым содержанием наименования добавляемой записи (в списке также можно для каждой записи указать - сколько символов совпали от начала наименования, 1-я запись в списке max совпадение символов),
то добавить запись нельзя,
иначе - вычислим ID, (наименование => UPPER/Lower, убрать лишние пробелы и т.д.) и добавляем запись.

Btrieve и clarion

Добавлено: 26 Сентябрь 2019, 12:20
finsoftrz
kreator писал(а): 26 Сентябрь 2019, 12:08У вас классный междусобойчик! Как сделать,чтобы "Иванов Иван Иванович" (поле 1000 символов) был уникален.
1. Задача не из жизни.
2. Делаем второе поле для ключа по первым или последним символам (где предполагается уникальность), затем в процедурах модификации данных отбираем все записи с ними по ключу (их уже не должно быть много) и проверяем перебором на полное совпадение.
3. Делаем второе поле для ключа, сохраняем в него хэш.

Может еще какие варианты кому в голову придут.