|
|
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
Есть задача - создать БД для хранения информации по населению. Задача известна давно, подкупает своей простотой, но при ближайшем рассмотрении оказывается не такой тривиальной. Исходные данные: По гражданину: фамилия, имя, отчество, дата рождения, пол, место рождения По документу: вид документа, серия, номер, дата документа, кем выдан, причина получения, причина изменения По регистрации: дата регистрации, дата снятия, адрес куда прибыл, адрес куда убыл, причина прибытия, причина убытия По смерти гражданина: номер актовой записи, дата актовой записи Проектируемая структура БД должна отражать события: - рождение гражданина - первое получение паспорта - смену документа - перемену ФИО - прибытие - убытие - смерть Т.е. структура БД должна позволять получать отчеты за опр. период времени с данными граждан по отдельным событиям выше. Ваши предложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 06:30 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
Понятно, что должна быть таблица с ключом kodli и полями фамилия, имя, отчество, дата рождения, пол, место рождения Может быть вторая таблица документа с полями kodli, датой документа, его реквизитами, кодом события (первое получение, замена), причиной получения/замены Может быть третья таблица регистрации с полями kodli, датой регистрации, дата снятия с регистрации, адрес регистрации, причина регистрации/снятия с регистрации Но как тогда хранить данные по событиям смена фио, смерть гражданина? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 06:39 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
michael_is_98Есть задача - создать БД для хранения информации по населению. Задача известна давно, подкупает своей простотой, но при ближайшем рассмотрении оказывается не такой тривиальной. Исходные данные: По гражданину: фамилия, имя, отчество, дата рождения, пол, место рождения По документу: вид документа, серия, номер, дата документа, кем выдан, причина получения, причина изменения По регистрации: дата регистрации, дата снятия, адрес куда прибыл, адрес куда убыл, причина прибытия, причина убытия По перемене ФИО: номер актовой записи, дата актовой записи о браке, номер актовой записи, дата актовой записи о расторжение брака По смерти гражданина: номер актовой записи, дата актовой записи о смерти Проектируемая структура БД должна отражать события: - рождение гражданина - первое получение паспорта - смену документа - перемену ФИО - прибытие - убытие - смерть Т.е. структура БД должна позволять получать отчеты за опр. период времени с данными граждан по отдельным событиям выше. Ваши предложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 06:44 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
michael_is_98 michael_is_98Есть задача - создать БД для хранения информации по населению. Задача известна давно, подкупает своей простотой, но при ближайшем рассмотрении оказывается не такой тривиальной. Исходные Данные: - гражданин: фамилия, имя, отчество, дата рождения, пол, место рождения - документ, удостоверяющий личность (паспорт РФ, паспорт СССР, свидетельство о рождении): дата выдачи, серия, номер, кем выдан - листок прибытия/убытия: дата регистрации, дата снятия, адрес куда прибыл, адрес куда убыл, причина прибытия, причина убытия - запись акта ЗАГС (о смерти, о перемене ФИО, о браке, о расторжении брака): дата актовой записи, номер актовой записи Регистрируемые события: -Рождение: запись акта о рождении, сообщение о рождении ребенка -Получение паспорта: листок прибытия с данными документа, удостоверяющего личность -Прибытие: листок прибытия с данными по регистрации прибытия -Перемена ФИО: листок прибытия, запись акта перемены ФИО, запись акта о браке, запись акта о расторжении брака, внесение изменений в запись акта о рождении -Смена документа:листок прибытия -Убытие: листок убытия, сообщение об убытии -Смерть: листок убытия, запись акта о смерти Проектируемая структура БД должна отражать эти события и получать отчеты за опр. период времени с данными граждан и события по отдельным событиям выше. Ваши предложения? Так ближе к ГАС "Выборы" - лучше ориентироваться на этот пост ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 07:16 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
> Ваши предложения? Традиционные, дружище: наймите нормального архитектора, который умеет решать такие задачи. Опционально: попробуйте понять, что "осваивать бабло" и "квалификация" - взаимоисключающие понятия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 07:48 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
По поводу найма архитекторов, "осваивания бабло" - не ко мне. Предлагаю модератору подобные высказывания удалять без предупреждения. интересует возможная схема БД и конкретные ответы на вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 08:07 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
На днях крутил базу данных населения кем-то скачаную давным давно. Позлился с того, что на имя-фамилия-отчество и место жительства было выделено по 1 полю. Так что рекомендую адрес тоже раздробить на поля, чтоб не было проблем с поиском или, как у одного товарища здесь, вырезанием почтового индекса из адресной строки. Я бы сделал отдельно таблицу городов и таблицу улиц и прочих часто повторяющихся данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 11:48 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
Этому форуму очень не хватает возможности редактировать своё сообщение. Приходится писать ещё одно если хочешь что-нибудь добавить или изменить. З.Ы. Автор а вы откуда и на кого работаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 11:51 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
Я бы сделал таблицу событий: id события, id гражданина (ваш kodli), тип события (рождение, смена ФИО, смерть), дата актовой записи, номер актовой записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 13:21 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Ваши предложения? Традиционные, дружище: наймите нормального архитектора, который умеет решать такие задачи. Поддерживаю на 100%. Не лечите нос у гинеколога... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 13:39 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
наверно имеет смысл хранить данные в двух таблицах, позволяющие только SELECT и INSERT: гражданин ( (id,timestamp), -- PK документ, -- FK (документ.id) имя, фамилия , дата_рождения, дата_смерти, ... кто_менял_запись ) документ ( id, -- PK тип_документа, дата выдачи, ... кто_менял_запись, timestamp ) идея 1 в том что для внесения записи в гражданин надо сначала заполнить документ на основании которого делается запись. (типа новый чел --> надо свидетельство о рождении, документ прописки и тд) идея 2 в том что записи нельзя стирать или исправлять; правильной считается текущая запись. нормализация, индексы, справочники -- по вкусу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 13:40 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
michael_is_98<...> Ваши предложения? Поточнее сформулировать требования: списки событий и документов, требования к производительности, количеству пользователей, перечень доступных аппаратных и программных платформ. Т.к. задача очень серьёзная, БД населения страны - не БД отдела кадров небольшой конторки. А вы начинаете решать её "нахрапом", не с начала, а с середины. Что требует очень универсальных, а значит - менее эффективных, решений. ------------------------------------------ Классы: гражданин - событие - документ "Документ" и "событие" - с большим кол-вом подклассов, укладывать в БД в виде EAV- или ROT-структур, с хранением истории изменений. "Гражданин" - имеет только искусственный идентификатор, укладывать в таблицу, остальные поля которой содержат временные значения, вычисляемые на основании событий и документов при обращении и/или на регулярной основе, или вообще не укладывать. Возможно, поддерживать 2 БД, "оперативную" и "историческую" (возможно с OLAP и ETL). Организовать проверку корректности и "очистку" информации, интегрироваться с КЛАДРом. Выбрать подходы по результатам исследования производительности для 150*10^9 граждан, 150*10^11 событий, 150*10^12 документов, оптимистический размер БД 150 Пб (150*10^15 байт, 150*10^3 Тб). Потянете задачку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 15:36 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
AlexTheRaven "Гражданин" - имеет только искусственный идентификатор... Не согласен. ФИО+дата рождения+родители+место рождения - прикинь вероятность совпадений. Ну и опять же извиняйте, ежели что. Мы ж ить академиев не кончали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 17:41 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
Novise AlexTheRaven "Гражданин" - имеет только искусственный идентификатор... Не согласен. ФИО+дата рождения+родители+место рождения - прикинь вероятность совпадений. Ну и опять же извиняйте, ежели что. Мы ж ить академиев не кончали А если один из родителей неизвестен (NULL), как тогда быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 19:29 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
Novise AlexTheRaven "Гражданин" - имеет только искусственный идентификатор... Не согласен. ФИО+дата рождения+родители+место рождения - прикинь вероятность совпадений. Ну и опять же извиняйте, ежели что. Мы ж ить академиев не кончали Кстати, сколько у нас приезжих, сирот, подкидышей, беспризорных, детей, появляющихся у бомжей, беженцев, сектантов, в глухих деревеньках, в дороге? ФИО на момент рождения? А если усыновление, отказ, свадьба, развод или какая-нибудь программа защиты свидетелей? Я считаю, что "присвоенные" человеку характеристики ненадёжны, а биометрические - пока не реализуемы, да и... сетчатка глаза или отпечатки пальцев - а если глаза или пальцы повреждены? ДНК - а если ретровирусы? Вероятность совпадений среди персонала даже довольно крупной компании пренебрежимо мала, среди населения страны - думаю, тысячи случаев. И каждый такой случай чреват. Ну, например, наследство или срок могут дать не тому :) . В общем, тема многократно поднималась на форуме, не хочется начинать новый holy war :) . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 20:20 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
AlexTheRaven А если усыновление, отказ, свадьба, развод или какая-нибудь программа защиты свидетелей? Вероятность совпадений среди персонала даже довольно крупной компании пренебрежимо мала, среди населения страны - думаю, тысячи случаев. И каждый такой случай чреват. Ну, например, наследство или срок могут дать не тому :) . В общем, тема многократно поднималась на форуме, не хочется начинать новый holy war :) . Одно время я актуализировал ГАС ВЫБОРЫ в Москве. Статистика - на 150 тыс населения - 0 повторов по ФИО+дата рождения в течение 6 месяцев. Дальше не проверял - надоело быть машинисткой. AlexTheRaven А если усыновление, отказ, свадьба, развод или какая-нибудь программа защиты свидетелей ? В общем, тема многократно поднималась на форуме, не хочется начинать новый holy war :) . Особые случаи нужно предусмотреть и обрабатывать особо. Но я не собираюсь давать решение. Приведенные примеры - это примеры истории изменения учетных параметров, не более того. to hhhhhh: >А если один из родителей неизвестен (NULL), как тогда быть? Ну и где проблема? Ваша БД не допускает Null в ключе? Это не влияет на задачу. Вот такое, брат IMHO. PS: пора пиво пить. А топикстартер - поднял тему для пятницы. (Понедельник начинается в cубботу!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 21:32 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
По поводу хранения адреса могу сказать следующее - это отдельная тема. Не будем ее здесь поднимать. Т.к. задача решается на массиве данных 300-400 тыс. человек (население небольшого города), пусть для простоты будем считать, что адрес человека определяется кодом дома по городу (идентификатор дома в городе), номером квартиры и номером нанимателя (имеет смысл для коммунальной квартиры). ФИО нужно хранить в 3-х разных полях. Что касается идентификатора личности, то в нашем городе не встречается двух людей с одинаковой ФИО,датой рождения. Этого достаточно. Как это делается в масштабах страны - также не будем вдаваться (скорее всего, добавляется еще место рождения или еще что-то). В администрации небольшого города работаю я. Стоит здесь у 27 паспортистов система на SQL Server 2000, но ошибки идут, исправить программу невозможно. Собственно на уровне БД система проработана более-менее хорошо, но клиентская часть недоработана... Есть еще требование получать события (список привел) за определенный период. А система сделать это не позволяет. Вот и нужно думать о новой системе (СУБД, язык программирования пока не определены). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2007, 03:52 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
Konstantin~наверно имеет смысл хранить данные в двух таблицах, позволяющие только SELECT и INSERT: гражданин ( (id,timestamp), -- PK документ, -- FK (документ.id) имя, фамилия , дата_рождения, дата_смерти, ... кто_менял_запись ) паспорт можно поменять. вместе в ФИО/полом/др (если найдется ошибка в записях загса) и т.п. так что у гражданина только id. остальное - в истории этого гражданина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2007, 22:48 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
michael_is_98Что касается идентификатора личности, то в нашем городе не встречается двух людей с одинаковой ФИО,датой рождения. Этого достаточно.Совершенно принципиально неправильное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2007, 14:37 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
michael_is_98 ФИО нужно хранить в 3-х разных полях. Что касается идентификатора личности, то в нашем городе не встречается двух людей с одинаковой ФИО,датой рождения. имхо - у вас мало опыта не только в проектировании, но и предметной области. 1. узнайте ЧТО может меняться в данных одного человека 2. ЧТО может происходить при смене данных одного человека 3. в ваш маленький город может приехать человек из любого города России и слабо вериться в реальность UI = {Ф+И+О+дата_рождения} 4. Ф, И, О меняется - так что лучше всеже иметь pk = {автоинкрементный id} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2007, 17:05 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
michael_is_98 , дружище, начни с изучения законодательства по этому вопросу, а то такого напроектируешь, что потом переделывать будешь. А переделывать действующую БД это жуткий гемор - я сам проходил. Например, по закону, я точно знаю, место рождения указывается то, которое было на момент рождения! И закон не интересует, что это место уже переименовано. Был г. Горький теперь это г. Нижний Новгород, а в своей БД ты обязан хранить их как два неселённых пункта - математически разных, а логически одинаковых. И у людей рождённых в разное время, указывать разное место рождения (даже если паспорт поменялся). Короче, читай закон - там всё написано. Потом проектировать будешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2007, 17:09 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
Да и в догонку. Населённых пункта два, а в зависимости от SQL запроса, например для статистики надо оба считать как один, а для юридических дел либо как один либо как два. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2007, 17:21 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
На первый взгляд так может проехать 1. Гражданин: айди , Ф.И.О., Дата_рождения, Место рождения - справочник, дата_регистрации, (рождение/прибытие), Дата_убытия, (смерть,убытие) 2. Событие: айди_события, айди , Дата_события, (1 получение паспорта, смена паспорта, перемена фио, и т.д - справочник) 3. Параметры события: айди_события,..... А на второй - пусть скажут более опытные. Вроде локальная история гражданина в эту схему ложится. Если у тебя нормальная база, которая устраивает, не трогай ее. Переделай приложение. Или сделай доп нашлепку. Переход с одной базы на другую - это нечто не предсказуемо геморное. Замечание Змейше по поводу городов - оч хор! И улиц - точно так же! И номеров домов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2007, 22:32 |
|
||
|
Проектирование БД о населении
|
|||
|---|---|---|---|
|
#18+
Правила регистрации населения не прописаны четко в законах РФ, в том-то и дело. У меня предложение. Давайте не будем вдаваться в детали. Да, действительно место рождение может именоваться по-разному, но указывать на один город. Могу даже так сказать - пусть место рождения записывается одной строкой (хотя я знаю, что это заведомо неправильно), пусть ФИО+дата рождения не повторяются (хотя есть примеры когда разные люди имеют одинаковое ФИО+дата рождения). Интересует именно структура БД, по которой можно получать список внесенных паспортистом изменений в данные в виде событий. Список событий привел и его можно считать исчерпывающим для задачи. [quote] -Рождение: запись акта о рождении, сообщение о рождении ребенка -Получение паспорта: листок прибытия с данными документа, удостоверяющего личность -Прибытие: листок прибытия с данными по регистрации прибытия -Перемена ФИО: листок прибытия, запись акта перемены ФИО, запись акта о браке, запись акта о расторжении брака, внесение изменений в запись акта о рождении -Смена документа:листок прибытия -Убытие: листок убытия, сообщение об убытии -Смерть: листок убытия, запись акта о смерти [/quote] Просто каждое изменение (событие) происходит на определенных основаниях. Основания я указал после каждого события через ":". Данные документа-основания должны храниться в БД (и опять-таки не будем вдаваться в подробности, как хранить адрес регистрации/снятия с регистрации). Список документов-оснований: - листок прибытия/убытия: дата регистрации, дата снятия, адрес куда прибыл, адрес куда убыл, причина прибытия, причина убытия, реквизиты документа, удостоверяющего личность, гражданин - запись акта ЗАГС (о смерти, о перемене ФИО, о браке, о расторжении брака): дата актовой записи, номер актовой записи, гражданин При этом есть 2 сущности с реквизитами: - гражданин: фамилия, имя, отчество, дата рождения, пол, место рождения - документ, удостоверяющий личность (паспорт РФ, паспорт СССР, свидетельство о рождении): дата выдачи, серия, номер, кем выдан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2007, 04:42 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34979580&tid=1544072]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
145ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 427ms |

| 0 / 0 |
