Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.02.15;
Скачать: CL | DM;

Вниз

Нужны идеи.   Найти похожие ветки 

 
Юрий Зотов ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.66 MB
Время: 0.008 c
2-1389859637
JohnKorsh
2014-01-16 12:07
2015.02.15
Работа с целыми числами, превышающими Int64


2-1389333149
Xmen
2014-01-10 09:52
2015.02.15
события при закрытие Excel


15-1405024202
Юрий
2014-07-11 00:30
2015.02.15
С днем рождения ! 11 июля 2014 пятница


15-1404230456
0xdeadc0de
2014-07-01 20:00
2015.02.15
REST Client Library (XE)


15-1405172152
Пит
2014-07-12 17:35
2015.02.15
Лучшее средство разработки для WEB