Форум: "Прочее";
Текущий архив: 2015.02.15;
Скачать: [xml.tar.bz2];
ВнизНужны идеи. Найти похожие ветки
← →
Юрий Зотов © (2014-07-15 10:11) [40]> KSergey © (15.07.14 09:55) [37]
> хорошо бы уточнить что это за "неполное соответствие", какие именно поля
> могут не совпасть, чтобы выдать такой диагноз, а не вариант В)
Именно. Первоначально ответ на этот вопрос должен дать человек. Чем сейчас и занимаюсь.
> А Маша Сегизмундовна Питрова - это что?
Либо "не найден", либо "частично совпал". Я уже думал о том, чтобы прикрутить SOUNDEX или что-то в этом духе. Но и этот ответ сначала должен дать человек.
← →
Inovet © (2014-07-15 10:13) [41]У пенсионного СНИЛС с контрольной суммой, так и то исхитряются чужой внести.
← →
KSergey © (2014-07-15 10:18) [42]> Юрий Зотов © (15.07.14 10:11) [40]
> Но и этот ответ сначала должен дать человек.
Какой человек??
← →
эта пять (2014-07-15 10:20) [43]если взять базу из всего населения глобуса и сделать селект по фио полу и дате рождения то в выборке ну никак не будет даже миллиона
ну сто тысяч согласен будет. может быть.
и для средней офисной тачки это не объем.
грузим это в dom и больше не насилуем сервак, а ищем прямо в доме по опциональным полям.
вопрос можно мусолить еще две недели, а у меня это год как работает по 72 однородным схемам (14 серверов по 3 схемы на каждом)
причем работает так, что ни у кого не возникает желания сделать это еще быстрее.
← →
Юрий Зотов © (2014-07-15 11:39) [44]Народ, покритикуйте.
Суть:
- совпадение всех 7 полей считаем полным;
- совпадение всех 5 обязательных полей при несовпадении серии или номера паспорта считаем неполным;
- несовпадение хотя бы одного из 5 обязательных полей считаем "не найден".select серия_паспорта, номер_паспорта
from ...
where <5 обязательных полей> // будет не более 3000 записей.
Если запрос пустой то "не найден".
Если запрос не пустой, то в цикле проверяем серию и номер:
- если они хоть раз совпали, то полное соответствие;
- если не совпали ни разу, то неполное соответствие.
← →
Inovet © (2014-07-15 12:03) [45]Зачем разделять серию и номер?
← →
Юрий Зотов © (2014-07-15 12:10) [46]> Inovet © (15.07.14 12:03) [45]
Вообще, номер - это строковое поле (потому что удостоверяющим документом может быть не только паспорт, а его номером может быть что угодно). Номер можно было бы объединить с серией, но дело в том, что если номер чисто цифровой, то в нем могут быть лидирующие нули, которые надо отсечь. Поэтому номер обрабатывается, как отдельное поле.
← →
Inovet © (2014-07-15 12:15) [47]> [46] Юрий Зотов © (15.07.14 12:10)
Не надо ничего отсекать. Смысла хранить серию отдельно от номера не вижу. Надо хранить код документа и серию-номер в таком виде, как они указаны в документе, который, как ты правильно сказал, бывает не только паспортом гражданина РФ и не только паспортом вообще.
Но это так в сторону слегка по поводу лишних сущностей.
← →
ВладОшин © (2014-07-15 12:20) [48]
> Народ, покритикуйте.
> в цикле
ps
СУБД то секретная что ли? :)
← →
Юрий Зотов © (2014-07-15 12:24) [49]> Inovet © (15.07.14 12:15) [47]
> Надо хранить код документа и серию-номер в таком виде, как они указаны
> в документе
Да я-то не против, я только "за". Но объясни это той девочке-операторше, которая сегодня поругалась с парнем и вводит номер 000123 как 123, а завтра с парнем помирилась и вводит номер 000123 полностью.
И таких девочек - полстраны.
:o)
PS
Что, в общем-то, и неплохо.
← →
Юрий Зотов © (2014-07-15 12:29) [50]> ВладОшин © (15.07.14 12:20) [48]
> в цикле
Ну да, в цикле по набору данных (while next). Запрос вернет 2-3 тыс. записей, одна из которых - искомая. Как только ее нашли - стоп, а если ее нет, то цикл дойдет до конца. И что тут страшного?
← →
Inovet © (2014-07-15 12:40) [51]> [49] Юрий Зотов © (15.07.14 12:24)
Не давать вводить такое, коду документа соответсвует шаблон номера документа. А то девочка может много чего ввести, может парень у неё араб, а серия буквенная, и введет она вместо "АБВ" "ВБА"
← →
имя (2014-07-15 12:54) [52]Удалено модератором
← →
Юрий Зотов © (2014-07-15 13:10) [53]Удалено модератором
← →
ВладОшин © (2014-07-15 13:19) [54]
> эта пять (15.07.14 12:54) [52]
ну да, лучше в дом 100 000 засунуть :)
> Юрий Зотов ©
ну.. 3000 перебирать..
может, все-таки хранимка?
select серия_паспорта, номер_паспорта
into #TEMP
from ...
where <5 обязательных полей> // будет не более 3000 записей.
select @RSLT1 = count(*) from #TEMP
select @RSLT2 = count(*)
from #TEMP
where 2_необязательных поля
return @RSLT1 , @RSLT2
← →
имя (2014-07-15 13:22) [55]Удалено модератором
← →
имя (2014-07-15 13:24) [56]Удалено модератором
← →
эта пять (2014-07-15 13:30) [57]ну да, лучше в дом 100 000 засунуть :)
разумеется лучше!
И ровно настолько, насколько TQuery удобнее TTable
← →
Юрий Зотов © (2014-07-15 13:48) [58]> эта пять (15.07.14 13:22) [55]
> выполнив sql-запрос, мы поучаем тупой датасет.
Вот интересно - а почему он тупой?
> Выполнив тот же запрос и переведя его в дом, у нас остаются
> все те же селективные возможности (точно такие же как в sql, только
> намного более гибкие).
Угу. Вот только расширенные селективные возможности в этой задаче на фиг не нужны, а платить за них (не нужные!!!) таки придется:
- надо подключать еще и DOM (расход ресурсов);
- надо перегонять датасет в DOM;
- DOM-навигация сложнее и потому дороже навигации по датасету;
- и как она реализована внутри - не через ли те же самые циклы?
PS
В свете сказанного: что называть говнокодом - вопрос открыт. Например, говнокодом можно называть использование рояля в качестве подставки под сковородку. У рояля ведь тоже гораздо больше возможностей, чем у просто подставки - он еще умеет музыку играть. Вот используем мы обычную подставку, а завтра нам музыки захочется, что тогда делать?
← →
Юрий Зотов © (2014-07-15 14:42) [59]Кстати, насчет 3000 записей - это я взял, наверное, с 20-кратным запасом. Реально их будет вряд ли более 150 - количество детей заданного пола, рожденных в заданный день и имеющих заданные ФИО. Так что цикл по датасету пролетит моментально - скорее всего, намного быстрее, чем одна только перегонка в DOM, не говоря уже об остальном. И без лишней траты памяти.
← →
Пит (2014-07-15 14:51) [60]дядь Юр, а ты чего, в пенсионный фонд ушел?
← →
Юрий Зотов © (2014-07-15 15:05) [61]> Пит (15.07.14 14:51) [60]
Почему ушел? Не уходил я никуда. Есть проект, в нем ПФР - заказчик, а мы - подрядчики.
← →
эта пять (2014-07-15 15:25) [62]Вот интересно - а почему он тупой?
Там же русскими буквами было написано (пока не стерли)
датасет - это навигация.
дом - это запросы.
ладно, пофик датасеты расскажу я лучше вот это:
мериканцы в прошлом веке шибко сильно изучали разных приматов. ну там много интересных экспериментов, среди которых был такой:
в вольере устоявшаяся стая шимпанзе.
Вожак, несколько бета-самцов, самки и прочее. Полная иерархия.
Стаю кормят, но не так чтобы те отказались от еще.
Посреди вольера стоит клетка с бананами.
Через прутья к ним не дотянуться, а двёрка клетки на замке (открывается без ключа, но надо знать секрет).
В общем бананы те все видят, но никто не ест, ибо не достать.
Какое-то время испытатели ждут, затем, когда попыток достать бананы уже не наблюдается, они
изымают из стада последнего омегу и сажают тово в отдельный вольер с такой же точно банановой заманухой.
И учат его открывать клетку с бананами.
Потом снова ждут, покуда тот станет делфимастером по открыванию клетки с бананами.
Затем возвращают его в стадо.
Оказавшись в стае:
1. Омега видит, что клетку с бананми по прежнему никто даже не пытается открыть.
2. У всего стада на виду омега открывает клетку и начинает жрать банан.
3. Спустя пять секунд омега получает люлей от вожака, и лишается банана.
3. Некоторая пауза. Испытатели загружают в клетку новую партию бананов.
4. ГоуТу пункт 1.
Предыдущий цикл (во временных рамках эксперимента) был бесконечным.
Но когда опыт повторили (пересадив уже не омегу, а вожака или статусного самца) картина резко поменялась.
Все стадо умело открывать клетку после нескольких увиденных мастер-классов обученного людьми примата.
А мораль басни такова:
Стадо никогда не учится и не пользуется опытом соплеменника, если тот не имеет статуса, выше некого порога.
Даже если всем очень хочется бананов.
← →
Пит (2014-07-15 15:28) [63]
> Есть проект, в нем ПФР - заказчик
ах, ну да.. я что-то не подумал о таком варианте ))
Все на java?
← →
эта пять (2014-07-15 15:35) [64]1. Угу. Вот только расширенные селективные возможности в этой задаче на фиг не нужны, а платить за них (не нужные!!!) таки придется:
далее идет очень длинный и страшный список искупительных жертв необходимых для использования дом
а потом вдруг
2. Кстати, насчет 3000 записей - это я взял, наверное, с 20-кратным запасом.
← →
Эрик Теодор (2014-07-15 15:46) [65]
> эта пять (15.07.14 15:25) [62]
> мериканцы в прошлом веке шибко сильно изучали разных приматов.
> ну там много интересных экспериментов, среди которых был
> такой:
ссылочку бы на первоисточник не помешало, а то одно время было популярно описание очень похожего эксперимента, а оказалось - утка.
← →
KSergey © (2014-07-15 15:48) [66]> Юрий Зотов © (15.07.14 11:39) [44]
> Суть:
> - совпадение всех 7 полей считаем полным;
> - совпадение всех 5 обязательных полей при несовпадении
> серии или номера паспорта считаем неполным;
> - несовпадение хотя бы одного из 5 обязательных полей считаем
> "не найден".
>
> select серия_паспорта, номер_паспорта
> from ...
> where <5 обязательных полей> // будет не более 3000 записей.
Вполне подход.
Либо подход ВладОшин © (15.07.14 13:19) [54], что в чем-то тоже самое. Вопрос только в том,
- нагружаем мы канал сервер <-> клиент (вариант ЮЗ)
- нагружаем мы сервер построением временных таблиц (вариант ВладОшин)
Мой опыт подсказывает, что иногда серверу становится тяжко с этими временными таблицами при большом количество клиентских запросов разных клиентов
Я бы еще такой вариант посмотрел:
1) select ... where совпадение всех 7-ми полей
Нашли чего-то - полное соответствие
Не нашли
2) select ... where совпадение 5-ти обязательных полей + номер паспорта
Нашли - частичное совпадение
Не нашли
3) select ... where совпадение 5-ти обязательных полей + серия паспорта
Нашли - частичное совпадение
Не нашли - ну значит нету.
Если сервер могуч и есть умения в тюненге индексов под каждый из этих запросов - возможно по итогу этот вариант окажется быстрее, чем на каждый запрос по 5-ти обязательным полям генерить временную таблицу или перекачивать на клиента.
Причем порядок именно такой: сначала по номеру, потом по серии, т.к. совпадение номера - менее вероятно, а значит индекс поможет лучше, а значит время - меньше.
Но надо экспериментировать.
← →
Inovet © (2014-07-15 15:53) [67]Значит это существующая база ПФ. В ней дофига ошибок - в паспорте одно, в базе другое. При таких ситуациях должны менять данные, но это делают редко, поскольку самим людям пофиг, а на предприятии проще исправить в базе на неправильное и сдать, чем через отдел кадров начинать переоформлять, когда до сдачи осталась 1 неделя или 1 день.
Типичные ошибки в ФИО: "д"/"т", "ь" пропущен/лишний, ддвойные/одинарные "н" и т.п.. При смене ФИО тоже не торопятся бежать в пенсионный. Недавно реабилитировали "ё", наконец до них дошло, то эта буква нужна, но 95% отались с "е", при паспорте с "ё".
Надо таки вводить допуск на расхождение 1-2 буквы при поиске.
← →
эта пять (2014-07-15 16:13) [68]ссылочку бы на первоисточник не помешало, а то одно время было популярно описание очень похожего эксперимента, а оказалось - утка.
можешь считать что описанный опыт это фейк.
только вот засада-то какая.
у меня конечно нет стада ни обезъян ни даже вольера, но что при этом мне мешает проверить этот фейк на практике?
/* без клеток, обезъян и бананов. */
ничто не мешало и прямо сейчас никто и ничто не мешает.
← →
Юрий Зотов © (2014-07-15 16:38) [69]> эта пять (15.07.14 15:25) [62]
Фишка в том, что альфе гораздо проще сделать то, что он уже умеет (т.е., выдавать омеге люлей и отнимать у него бананы), чем то, что он еще не умеет (т.е., научиться самому открывать клетку). Поэтому стимула учиться у альфы нет - результат-то и без того достигнут, банан в лапах.
Басня, конечно, интересная, однако же, серьезных доводов я так и не услышал. А посты следовало бы читать полностью и цитировать, не вырывая фразы из контекста. Потому что там еще сказано: "Так что цикл по датасету пролетит моментально - скорее всего, намного быстрее, чем одна только перегонка в DOM, не говоря уже об остальном. И без лишней траты памяти".
> KSergey © (15.07.14 15:48) [66]
Главное, наконец-то нащупана идея, а остальное уже вопросы реализации. Попробуем - увидим.
Тоже могу рассказать басню о том, как мудрая сова посоветовала мышам стать ежиками, чтобы их не жрали кто попало и на вопрос "а как же стать ежиками?" ответила, что это уже вопросы реализации.
:o)
> Inovet © (15.07.14 15:53) [67]
В том разделе БД, с которым я работал, ошибки ФИО тоже есть, но их очень и очень немного. А программа еще и вынуждает их исправлять: каждый персональный входящий документ проверяется на совпадение СНИЛС и ФИО, а при несовпадении отвергается с указанием причины. Поэтому деваться юзерам некуда (документ-то вводить надо, вот и приходится сначала корректировать ФИО).
← →
эта пять (2014-07-15 16:47) [70]Фишка в том, что альфе гораздо проще сделать то, что он уже умеет
Вы так это говорите словно это что-то плохое.
Или словно я этого не понимаю.
Или словно никто этого не понимает.
А фишка на самом деле не в том, что было проще альфе, а в том, что все шимпанзе хотели съесть банан, но лишь смотрели на него.
"Так что цикл по датасету пролетит моментально - скорее всего, намного быстрее, чем одна только перегонка в DOM, не говоря уже об остальном. И без лишней траты памяти".
Если вместо TQuery взять TTable, то цикл по последней тоже пролетит моментально.
← →
Юрий Зотов © (2014-07-15 16:51) [71]> эта пять (15.07.14 16:13) [68]
> ничто не мешало и прямо сейчас никто и ничто не мешает.
Эдакие социологические исследования проводим и глЫбокие выводы делаем, досель науке неизвестные? Ну-ну, попутного за воротник.
Только эта... (шесть)... есть один нюанс: если результат социологического эксперимента трактуется самим экспериментатором, то грош ему цена, такому результату. Поскольку он всегда будет отражать личное мнение этого самого экспериментатора, и не более. То есть, с тем же результатом эксперимент можно было и вообще не проводить.
Расскажу-ка и я Вам сказку про социологические исследования группы приматов. Сидят в клетке две гориллы - старая и молодая. Старая говорит молодой: "Знаешь, что такое условный рефлекс?". Та отвечает: "Нет". Старая: "Cмотри - сейчас я дерну вот за эту веревку и вон тот в белом халате принесет нам по банану".
Как Вы думаете - а какие выводы из того же самого эксперимента сделал "вон тот в белом халате"?
:o)
← →
эта пять (2014-07-15 16:54) [72]Ну-ну, попутного за воротник.
я согласен, что это несколько (может быть) обидно, но исследования-то есть.
даже если про мериканцев мой источник врёт.
← →
ухты (2014-07-15 16:56) [73]вывод - в экспериментах толку ноль :)
← →
Юрий Зотов © (2014-07-15 16:56) [74]> эта пять (15.07.14 16:47) [70]
Поздравляю - у Вас отличное чувство юмора.
А аргумент насчет TQuery и TTable - да, это сильный аргумент. И очень по сути, главное.
← →
Пит (2014-07-15 17:10) [75]Дядь Юр, так ты все на джаве?
По прежнему хаишь относительно дельфи или привык?
← →
_Inovet (2014-07-15 17:17) [76]> на совпадение СНИЛС и ФИО
Так ошибки именно в этом сочетании. А другая база есть ли у них? Я к чему: если при поиске ввести правильные ФИО с паспорта, то можно не найти ничего. Если этого не требуется, так и ладно. А ошибок не так уж и мало 1-2%, наверное, есть.
← →
Юрий Зотов © (2014-07-15 18:45) [77]> Пит (15.07.14 17:10) [75]
Привык-то я давно, но иногда все же раздражает догматическая концепция "всё есть объект". Например, чтобы просто прочитать текстовый файл, сначала нужно создать 4 объекта: File, FileInputStream, InputStreamReader, BufferedReader.
Конечно, есть и удобные вещи, но, думаю, в современных Delphi они тоже уже есть.
> _Inovet (15.07.14 17:17) [76]
> если при поиске ввести правильные ФИО с паспорта, то можно
> не найти ничего.
Если в БД на этом СНИЛСе другие ФИО, то выдаст ошибку несовпадения. Которая все же заставит юзера сначала обновить ФИО в БД (потому что иначе он документ не введет).
В основном, ошибки несовпадения ФИО как раз из-за устаревших ФИО в БД (типа, женщина вышла замуж, сменила фамилию, получила новый паспорт, а идти в пенсионку лень или вообще забыла).
← →
эта пять (2014-07-15 19:49) [78]А аргумент насчет TQuery и TTable - да, это сильный аргумент. И очень по сути, главное.
а разве не сильный?
ок. я записываю.
ЮЗ не видит большой разницы между первым и вторым.
а разве не по сути?
что вы можете после получения датасета?
некст/приор/мувбай/фёрст/и ласт?
при этом в произвольный момент времени нельзя просто так прибегнуть ни к одному из них, не потеряв такую замечательную сущность как каррентрекорд.
а я могу сделав селект и получив датасет снова делать селекты (не теряя кстати и циклов по индексу списка).
а к результатам селекта я снова могу применять селекты.
а еще результаты селекта могут быть переданы в качестве параметров (а вы попробуйте передайте рекорд датасета куда-нить)
но развеж это все важно? развеж это все по сути?
когда есть циклы....
← →
Kerk © (2014-07-15 19:54) [79]Я наверно потерял нить обсуждения, но что именно в этой задаче мешает решить ее средствами SQL без дополнительной обработки на клиенте? Даже если SQL не помогает, то на стороне сервера, если СУБД приличная, есть и курсоры, и XPath (уж кому что нравится). Зачем тащить это на клиент?
← →
ухты (2014-07-15 21:31) [80]правильно, клиент должен быть браузер
а ежели чего то и сервер приложений доделает дело, или юзер за клиентом, выборка то не такая большая в итоге
Страницы: 1 2 3 4 вся ветка
Форум: "Прочее";
Текущий архив: 2015.02.15;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.006 c