Страница 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:57finsoftrz писал(а): 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. Делаем второе поле для ключа, сохраняем в него хэш.
Может еще какие варианты кому в голову придут.