Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1405343958
Ega23
2014-07-14 17:19
2015.02.15
Батя задачку выдал, а ответа так и не сказал. :)


1-1329033920
Jambo
2012-02-12 12:05
2015.02.15
Указатели в Delphi-программах


15-1404595805
Юрий
2014-07-06 01:30
2015.02.15
С днем рождения ! 6 июля 2014 воскресенье


15-1405339413
KSergey
2014-07-14 16:03
2015.02.15
Проблема: неожиданная реакция на клик мыши в открывшемся окне


2-1389268749
Никита Парфенов
2014-01-09 15:59
2015.02.15
Как лучше конектиться к Firebird?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский