
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
27.05.2009, 09:42
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Имеется справочник граждан, числом записей около миллиона в файле dbf, да еще в кодировке DOS-866. Думаю, значения не имеет, что за БД используется. Проблема, собственно, как поступить с таким объемом данных. По этому поводу у меня есть несколько вариантов решения, но каждый имеет свои недостатки и, как мне кажется, серьезные. 1. Однажды загрузить этот справочник в БД и потом проводить его актуализацию. Т.е. добавлять и удалять записи. Проблема в том, что записи не имеют уникального идентификатора, а построить таковой даже по нескольким полям (минимум 8 значимых полей) - этот вариант меня пугает. 2. Создать отдельную БД для этого справочника, на отдельной машине каждый месяц загружать в него информацию заново, а потом просто подменять на сервере. Этот вариант мне кажется сомнительным. 3. Так и юзать этот dbf, но Доступ к нему по сети не проверялся и представляется затруднительным, но вполне может быть, что я ошибаюсь. Каждый месяц кидать его на машины клиента. В принципе возможно, механизм обновления клиентов через xcopy уже реализован, так что особых проблем с этим, думаю, не будет. Общий недостаток такого подхода - дополнительный движок БД специально для dbf, не хотелось бы из-за этого утяжелять клиента и вбухивать дополнительные деньги. Отказаться от этого справочника невозможно. А процентов 90 из него - бесполезный балласт. Избавиться от "мусора" невозможно по двум причинам: 1. Нет-нет да и потребуется что-то из этих 90 процентов. 2. Невозможно отобрать только нужные записи, т.к. не за что "зацепиться". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 09:55
|
|||
|---|---|---|---|
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
единственно все таки определить уникальный ключ, например номер паспорта, хотя и не факт но без ключа не взлетит С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 10:03
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Naf, В том-то и дело, смотри пункт номер 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 10:35
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
какую СУБД используете? для mssql, например, загрузить 1млн bulkload-ом - пустячок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 10:40
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Роман Дынник, Firebird. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 10:44
|
|||
|---|---|---|---|
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Evgen2009Naf, В том-то и дело, смотри пункт номер 1. * Вы эту таблицу будете использовать будете в своей БД? Вам нужен ключ для связи с другими таблицами * Вы будете подгружать новые записи? Как вы определите что они новые, а не имеющиеся уже? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 10:58
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Naf, 1. В том и смех, что эта таблица ни с чем не связана, из нее будут браться только Ф.И.О., д.р., кое-что еще. В принципе, особой нужды в такой таблице как-будто бы и нет, просто из нее приходится иногда брать недостающие данные, проверять сроки и т.п. Все только для того, чтобы не напартачить с ручным вводом и не пропустить лишних людей иначе будет потеря в деньгах. 2. Вот кстати насчет подгрузки я и размышлял. Т.к. нет уникального поля, то его можно создать. Сделать это, я прикинул, можно по 8 полям (собрать их в одно поле). Т.е. создаю и там по такому "ключу", потом сравниваю талицы. Те записи, которых нет в dbf, будут удалены из БД. А недостающие будут подгружены в БД из dbf. В таком случае просто избегаю возни с редактированием записей. Надеюсь, не очень путано получилось. Просто добавляю недостающие и удаляю лишние. Как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 11:05
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
UPD Но получится очень громоздко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 11:15
|
|||
|---|---|---|---|
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
а что это за 8 полей, можно поинтересоваться? и зачем их потом в одно поле объединять, кстати? оператор AND в Firebird отменили разве? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 11:25
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
egorych, Фамилия, Имя, Отчество, д.р., номер страхового полиса, номер договора, соц. группа, страховая компания. Можно и не объединять. В принципе, на суть не влияет, как делать, просто это важные поля, поэтому их надо учесть. Просто мне показалось, чем сравнивать каждое поле, проще собрать их в одно и уже через in делать выборку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 11:28
|
|||
|---|---|---|---|
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Evgen2009egorych, Фамилия, Имя, Отчество, д.р., номер страхового полиса, номер договора, соц. группа, страховая компания. Можно и не объединять. В принципе, на суть не влияет, как делать, просто это важные поля, поэтому их надо учесть. Просто мне показалось, чем сравнивать каждое поле, проще собрать их в одно и уже через in делать выборку. недостаточно номер страхового полиса и/или номер договора? если конечно эти реквизиты неизменны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 11:36
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Evgen2009Firebird. Давно не смотрел что нового есть в FB. В любом случае лучше взять любое ETL средство, например, MSSQL DTS/Integration Services Сделайте DTS пакет по загрузке данных из dbf в FB и job для запуска пакета по расписанию. DTS будет довольно простым (сделаете минут за 10). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 11:41
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Naf, И номер договора и номер полиса еще как изменны! Для примера. Месяц назад человек не работал, у него был один номер страховки, номер договора, страховая компания, соцгруппа (безработный). Теперь он устроился на работу, сменилась компания, договор, номер страховки, соцгруппа и т.д. Так чем сравнивать каждое из этих полей, проще сразу удалить эту запись из БД и заменить новыми данными, благо не критично. Казалось бы, номер страховки - уникальный номер, но фишка в том, что в они могут совпадать в разных компаниях, более того даже в одной компании могу совпадать номера страховок. Поэтому необходимо учитывать еще и номер договора (почти наверняка будет отличаться) и т.д. Для крайнего случая можно еще серию страхового полиса "посчитать". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 11:54
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Роман ДынникEvgen2009Firebird. Давно не смотрел что нового есть в FB. В любом случае лучше взять любое ETL средство, например, MSSQL DTS/Integration Services Сделайте DTS пакет по загрузке данных из dbf в FB и job для запуска пакета по расписанию. DTS будет довольно простым (сделаете минут за 10). Спасибо за информацию к размышлению! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 14:38
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Evgen2009 Фамилия, Имя, Отчество, д.р., номер страхового полиса, номер договора, соц. группа, страховая компания. А если нет уникального ключа, как вообще можно говорить об обновлении? Например, был ИВАНОВА МАРФА ВАСИЛЬЕВНА 12345 - 100, в обновлении приехало ПЕТРОВА МАРФА ВАСИЛЬЕВНА 12345 - 999. Как понять, это новый человек приехал, или Иванова замуж вышла и в связи с этим страховую компанию поменяла? А может, просто эти данные были неправильно внесены, и теперь должны быть исправлены? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 14:59
|
|||
|---|---|---|---|
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
а может там у вас ИНН есть? он вроде как более уникален ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 16:13
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Cane Cat Fisher А если нет уникального ключа, как вообще можно говорить об обновлении? Например, был ИВАНОВА МАРФА ВАСИЛЬЕВНА 12345 - 100, в обновлении приехало ПЕТРОВА МАРФА ВАСИЛЬЕВНА 12345 - 999. Как понять, это новый человек приехал, или Иванова замуж вышла и в связи с этим страховую компанию поменяла? А может, просто эти данные были неправильно внесены, и теперь должны быть исправлены? Так и ладно! Тогда это будут два разных человека. Для ясности картины скажу, что помимо этого имеется справочник посетителей, связанный с журналом посещений. Имеем: дбф-файл, подготовленный для перекачки в БД (Спр_Д), под этим же именем (Спр_Д) он будет значится в БД. Имеются справочник Посетителей (Спр_П), журнал Регистрации (Журн_Р). Пример. Имеется у нас Иванов Иван Иванович, 01.06.1956 г.р. (это в Спр_П) У него были посещения (занесены в Журн_Р): 1. 03.07.2008, Иванов Иван Иванович, 01.06.1956 г., Полис: № 000415, дог. 0030 2. 12.09.2008, Иванов Иван Иванович, 01.06.1956 г., Полис: № 333333, дог. 999 При каждом посещении в Журн_Р, подставляются данные из Спр_Д, актуальные на момент посещения. Если же окажется, что Иванов Иван Иванович стал Ивановым Петром Петровичем, так и будет добавлен в Спр_П новый посетитель с этим именем, ну и т.д. Надеюсь, не сильно запутал. Klickа может там у вас ИНН есть? он вроде как более уникален Нету. Более уникален СНИЛС, но тут тоже есть варианты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 16:43
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Не дописал. Вот этот справочник Спр_Д мне и нужно каким-то образом к БД цеплять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2009, 19:02
|
|||
|---|---|---|---|
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Зашел как-то к знакомому, он в паспортном столе работает... говорит мне: "давай, тебя пробъём по паспортной базе..." Сказал ему, ФИО, и дату рождения... он вносит, если не ошибаюсь, первы три(или четыре) буквы фамилии, потом первую букву имени и отчества, завершает всё это годом рождения (например "Иванов Николай Петрович 1974г" = "иванп1974") вуаля... через секунду вся раскладка на меня ) вот вам и primary key как утверждал тот чел, комбинация уникальная для каждого человека в РФ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.05.2009, 08:39
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Кифирчиккак утверждал тот чел, комбинация уникальная для каждого человека в РФ - Все лгут! (с)сами_знаете_кто Хе-хе! Нарочно посмотрел "иванп1958", найдено три человека: две женщины, один мужчина. Вот иванп03091974 - это уже комбинация, но тоже 100% гарантии не дает, так что для ключика маловато будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.05.2009, 09:52
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Evgen2009 Если же окажется, что Иванов Иван Иванович стал Ивановым Петром Петровичем, так и будет добавлен в Спр_П новый посетитель с этим именем, ну и т.д. А если человек сменил фамилию, то как узнать, что тот посетитель со старой фамилией, и этот с новой - одно и то же лицо? Или этого не требуется, и каждое посещение - общение с чистого листа? Тогда к чему хранить всю эту кучу информации? Записать каждый раз, что человек сказал - вот и все, что известно. Похоже, у вашей системы будет "лучшая болезнь - склероз: ничего не болит, и каждый день столько новых людей приходит..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.05.2009, 10:10
|
|||
|---|---|---|---|
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Evgen2009Кифирчиккак утверждал тот чел, комбинация уникальная для каждого человека в РФ - Все лгут! (с)сами_знаете_кто Хе-хе! Нарочно посмотрел "иванп1958", найдено три человека: две женщины, один мужчина. Вот иванп03091974 - это уже комбинация, но тоже 100% гарантии не дает, так что для ключика маловато будет. мде.. правда брехун ) либо что-то не так запомнил ) я так понял у вас есть большааая база... а попробуйте сделать запрос, и с группировать... типа.. SELECT... () AS test_key, count(test_key) FROM... WHERE count(test_key) > 1 GROUP BY test_key появятся ли дубли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.05.2009, 11:06
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
Cane Cat FisherА если человек сменил фамилию, то как узнать, что тот посетитель со старой фамилией, и этот с новой - одно и то же лицо? Я бы не сказал, что в данном контексте это проблема. Если вести паспорт здоровья, то да - это очень важно. Тут бы на помощь пришел единый регистрационный номер гражданина, даваемый с момента рождения и неизменный до крышки гроба. Но раз такового у нас не существует, то и приходится довольствоваться тем, что есть. Вообще большая часть по отбраковке посетителей происходит еще в регистратуре, там посетитель должен предъявить страховой полис. Если полис не действительный, его отправляют в страховую компанию получать новый. Нет полиса - нет приема. Если человек раньше обращался под одним именем, а сейчас сменил его, то он не обязан докладывать о смене имени, а регистратор не обязан это выяснять, требовать что-то еще, кроме полиса, мы тоже не можем. Вот и копятся у нас в базе одни и те же люди, но под разными именами, в основном это, конечно же, женщины, они-то фамилии в основном и меняют. Все эти данные хранятся в справочнике посетителей вместе с данными в журнале регистрации. А вот хранить эти данные в справочнике страховых полисов просто нет нужды, он нужен всего лишь для сверки данных. Ведь кроме смены Ф.И.О. люди могут уехать или умереть. И держать таких в справочнике полисов не имеет смысла, а то количество давно бы перевалило за миллион. Но все-таки вернусь к сабжу, вот схема . Мне нужно каким-то образом грузить данные из "А" в "Б" или придумать что-то еще, варианты, опять же, в сабже. Опять же повторюсь. Справочник "Б" - что-то вроде словаря, посмотрел, как будет правильно, скопировал, закрыл. Все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.05.2009, 11:30
|
|||
|---|---|---|---|
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
справочник "А", тот, который dbf, после загрузки, будет изменяться? или залили и забыли про него? что мешает сделать структуру справочника "Б" такой-же, как и в "А", добавить столбец ID и не заморачиваться больше на этой теме? тем более, что справочник этот будет использоваться в качестве словаря, имхо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.05.2009, 12:05
|
|||
|---|---|---|---|
|
|||
Загрузка справочника в БД. Как лучше поступить? |
|||
|
#18+
egorychсправочник "А", тот, который dbf, после загрузки, будет изменяться? или залили и забыли про него? что мешает сделать структуру справочника "Б" такой-же, как и в "А", добавить столбец ID и не заморачиваться больше на этой теме? тем более, что справочник этот будет использоваться в качестве словаря, имхо Не очень понял, что подразумевается под "справочник "А", тот, который dbf, после загрузки, будет изменяться". Раз в месяц этот справочник "А" присылается к нам готовым, сами мы в него ничего не вносим. Старая версия программы писана на Фоксе под ДОС, там этот файл ежемесячно просто заменяется новым. А так как в новой версии предполагается использовать FB, то и думаем, как это дело провернуть. Так и задумано, что справочник "Б" - точная копия "А". Залить в БД (или не залить?), проиндексировать и дальше селектом его, селектом. Просто не дает покоя то, что его надо как-то обновлять в БД: то ли начисто перезаписывать, то ли приводить в соответствие, то ли так и использовать его прямо в dbf. Пытаюсь понять, что разумнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=32&tablet=1&tid=1543222]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 397ms |

| 0 / 0 |
