Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование БД о населении / 25 сообщений из 111, страница 1 из 5
01.12.2007, 06:30
    #34979485
michael_is_98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
Есть задача - создать БД для хранения информации по населению. Задача известна давно, подкупает своей простотой, но при ближайшем рассмотрении оказывается не такой тривиальной.

Исходные данные:
По гражданину: фамилия, имя, отчество, дата рождения, пол, место рождения
По документу: вид документа, серия, номер, дата документа, кем выдан, причина получения, причина изменения
По регистрации: дата регистрации, дата снятия, адрес куда прибыл, адрес куда убыл, причина прибытия, причина убытия
По смерти гражданина: номер актовой записи, дата актовой записи

Проектируемая структура БД должна отражать события:
- рождение гражданина
- первое получение паспорта
- смену документа
- перемену ФИО
- прибытие
- убытие
- смерть

Т.е. структура БД должна позволять получать отчеты за опр. период времени с данными граждан по отдельным событиям выше.

Ваши предложения?
...
Рейтинг: 0 / 0
01.12.2007, 06:39
    #34979488
michael_is_98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
Понятно, что должна быть таблица с ключом kodli и полями фамилия, имя, отчество, дата рождения, пол, место рождения
Может быть вторая таблица документа с полями kodli, датой документа, его реквизитами, кодом события (первое получение, замена), причиной получения/замены
Может быть третья таблица регистрации с полями kodli, датой регистрации, дата снятия с регистрации, адрес регистрации, причина регистрации/снятия с регистрации

Но как тогда хранить данные по событиям смена фио, смерть гражданина?
...
Рейтинг: 0 / 0
01.12.2007, 06:44
    #34979491
michael_is_98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
michael_is_98Есть задача - создать БД для хранения информации по населению. Задача известна давно, подкупает своей простотой, но при ближайшем рассмотрении оказывается не такой тривиальной.

Исходные данные:
По гражданину: фамилия, имя, отчество, дата рождения, пол, место рождения
По документу: вид документа, серия, номер, дата документа, кем выдан, причина получения, причина изменения
По регистрации: дата регистрации, дата снятия, адрес куда прибыл, адрес куда убыл, причина прибытия, причина убытия
По перемене ФИО: номер актовой записи, дата актовой записи о браке, номер актовой записи, дата актовой записи о расторжение брака
По смерти гражданина: номер актовой записи, дата актовой записи о смерти

Проектируемая структура БД должна отражать события:
- рождение гражданина
- первое получение паспорта
- смену документа
- перемену ФИО
- прибытие
- убытие
- смерть

Т.е. структура БД должна позволять получать отчеты за опр. период времени с данными граждан по отдельным событиям выше.

Ваши предложения?
...
Рейтинг: 0 / 0
01.12.2007, 07:16
    #34979494
michael_is_98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
michael_is_98 michael_is_98Есть задача - создать БД для хранения информации по населению. Задача известна давно, подкупает своей простотой, но при ближайшем рассмотрении оказывается не такой тривиальной.

Исходные Данные:
- гражданин: фамилия, имя, отчество, дата рождения, пол, место рождения
- документ, удостоверяющий личность (паспорт РФ, паспорт СССР, свидетельство о рождении):
дата выдачи, серия, номер, кем выдан
- листок прибытия/убытия: дата регистрации, дата снятия, адрес куда прибыл, адрес куда убыл, причина прибытия, причина убытия
- запись акта ЗАГС (о смерти, о перемене ФИО, о браке, о расторжении брака): дата актовой записи, номер актовой записи

Регистрируемые события:
-Рождение: запись акта о рождении, сообщение о рождении ребенка
-Получение паспорта: листок прибытия с данными документа, удостоверяющего личность
-Прибытие: листок прибытия с данными по регистрации прибытия
-Перемена ФИО: листок прибытия, запись акта перемены ФИО, запись акта о браке, запись акта о расторжении брака, внесение изменений в запись акта о рождении
-Смена документа:листок прибытия
-Убытие: листок убытия, сообщение об убытии
-Смерть: листок убытия, запись акта о смерти

Проектируемая структура БД должна отражать эти события и получать отчеты за опр. период времени с данными граждан и события по отдельным событиям выше.

Ваши предложения?
Так ближе к ГАС "Выборы" - лучше ориентироваться на этот пост
...
Рейтинг: 0 / 0
01.12.2007, 07:48
    #34979497
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
> Ваши предложения?

Традиционные, дружище: наймите нормального архитектора, который умеет решать такие задачи.

Опционально: попробуйте понять, что "осваивать бабло" и "квалификация" - взаимоисключающие понятия.
...
Рейтинг: 0 / 0
01.12.2007, 08:07
    #34979503
michael_is_98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
По поводу найма архитекторов, "осваивания бабло" - не ко мне.
Предлагаю модератору подобные высказывания удалять без предупреждения.

интересует возможная схема БД и конкретные ответы на вопросы.
...
Рейтинг: 0 / 0
01.12.2007, 11:48
    #34979578
The Dwarf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
На днях крутил базу данных населения кем-то скачаную давным давно. Позлился с того, что на имя-фамилия-отчество и место жительства было выделено по 1 полю. Так что рекомендую адрес тоже раздробить на поля, чтоб не было проблем с поиском или, как у одного товарища здесь, вырезанием почтового индекса из адресной строки.
Я бы сделал отдельно таблицу городов и таблицу улиц и прочих часто повторяющихся данных.
...
Рейтинг: 0 / 0
01.12.2007, 11:51
    #34979580
The Dwarf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
Этому форуму очень не хватает возможности редактировать своё сообщение. Приходится писать ещё одно если хочешь что-нибудь добавить или изменить.
З.Ы. Автор а вы откуда и на кого работаете?
...
Рейтинг: 0 / 0
01.12.2007, 13:21
    #34979642
A grumbler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
Я бы сделал таблицу событий: id события, id гражданина (ваш kodli), тип события (рождение, смена ФИО, смерть), дата актовой записи, номер актовой записи.
...
Рейтинг: 0 / 0
01.12.2007, 13:39
    #34979658
Paul Sacks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
guest_20040621> Ваши предложения?

Традиционные, дружище: наймите нормального архитектора, который умеет решать такие задачи.



Поддерживаю на 100%. Не лечите нос у гинеколога...
...
Рейтинг: 0 / 0
01.12.2007, 13:40
    #34979659
Konstantin~
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
наверно имеет смысл хранить данные в двух таблицах, позволяющие только SELECT и INSERT:

гражданин (
(id,timestamp), -- PK
документ, -- FK (документ.id)
имя,
фамилия ,
дата_рождения,
дата_смерти,
...
кто_менял_запись
)


документ (
id, -- PK
тип_документа,
дата выдачи,
...
кто_менял_запись,
timestamp
)


идея 1 в том что для внесения записи в гражданин надо сначала заполнить документ на основании которого делается запись. (типа новый чел --> надо свидетельство о рождении, документ прописки и тд)

идея 2 в том что записи нельзя стирать или исправлять; правильной считается текущая запись.

нормализация, индексы, справочники -- по вкусу.
...
Рейтинг: 0 / 0
01.12.2007, 15:36
    #34979735
AlexTheRaven
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
michael_is_98<...>
Ваши предложения?
Поточнее сформулировать требования: списки событий и документов, требования к производительности, количеству пользователей, перечень доступных аппаратных и программных платформ. Т.к. задача очень серьёзная, БД населения страны - не БД отдела кадров небольшой конторки. А вы начинаете решать её "нахрапом", не с начала, а с середины. Что требует очень универсальных, а значит - менее эффективных, решений.
------------------------------------------
Классы: гражданин - событие - документ

"Документ" и "событие" - с большим кол-вом подклассов, укладывать в БД в виде EAV- или ROT-структур, с хранением истории изменений.

"Гражданин" - имеет только искусственный идентификатор, укладывать в таблицу, остальные поля которой содержат временные значения, вычисляемые на основании событий и документов при обращении и/или на регулярной основе, или вообще не укладывать.

Возможно, поддерживать 2 БД, "оперативную" и "историческую" (возможно с OLAP и ETL).

Организовать проверку корректности и "очистку" информации, интегрироваться с КЛАДРом.

Выбрать подходы по результатам исследования производительности для 150*10^9 граждан, 150*10^11 событий, 150*10^12 документов, оптимистический размер БД 150 Пб (150*10^15 байт, 150*10^3 Тб). Потянете задачку?
...
Рейтинг: 0 / 0
01.12.2007, 17:41
    #34979814
novise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
AlexTheRaven
"Гражданин" - имеет только искусственный идентификатор...
Не согласен.
ФИО+дата рождения+родители+место рождения - прикинь вероятность совпадений.
Ну и опять же извиняйте, ежели что. Мы ж ить академиев не кончали
...
Рейтинг: 0 / 0
01.12.2007, 19:29
    #34979900
hhhhhh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
Novise AlexTheRaven
"Гражданин" - имеет только искусственный идентификатор...
Не согласен.
ФИО+дата рождения+родители+место рождения - прикинь вероятность совпадений.
Ну и опять же извиняйте, ежели что. Мы ж ить академиев не кончали

А если один из родителей неизвестен (NULL), как тогда быть?
...
Рейтинг: 0 / 0
01.12.2007, 20:20
    #34979932
AlexTheRaven
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
Novise AlexTheRaven
"Гражданин" - имеет только искусственный идентификатор...
Не согласен.
ФИО+дата рождения+родители+место рождения - прикинь вероятность совпадений.
Ну и опять же извиняйте, ежели что. Мы ж ить академиев не кончали
Кстати, сколько у нас приезжих, сирот, подкидышей, беспризорных, детей, появляющихся у бомжей, беженцев, сектантов, в глухих деревеньках, в дороге?
ФИО на момент рождения? А если усыновление, отказ, свадьба, развод или какая-нибудь программа защиты свидетелей?
Я считаю, что "присвоенные" человеку характеристики ненадёжны, а биометрические - пока не реализуемы, да и... сетчатка глаза или отпечатки пальцев - а если глаза или пальцы повреждены? ДНК - а если ретровирусы?
Вероятность совпадений среди персонала даже довольно крупной компании пренебрежимо мала, среди населения страны - думаю, тысячи случаев. И каждый такой случай чреват. Ну, например, наследство или срок могут дать не тому :) .
В общем, тема многократно поднималась на форуме, не хочется начинать новый holy war :) .
...
Рейтинг: 0 / 0
01.12.2007, 21:32
    #34979962
novise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
AlexTheRaven
А если усыновление, отказ, свадьба, развод или какая-нибудь программа защиты свидетелей?
Вероятность совпадений среди персонала даже довольно крупной компании пренебрежимо мала, среди населения страны - думаю, тысячи случаев. И каждый такой случай чреват. Ну, например, наследство или срок могут дать не тому :) .
В общем, тема многократно поднималась на форуме, не хочется начинать новый holy war :) .
Одно время я актуализировал ГАС ВЫБОРЫ в Москве. Статистика - на 150 тыс населения - 0 повторов по ФИО+дата рождения в течение 6 месяцев. Дальше не проверял - надоело быть машинисткой.

AlexTheRaven
А если усыновление, отказ, свадьба, развод или какая-нибудь программа защиты свидетелей ?
В общем, тема многократно поднималась на форуме, не хочется начинать новый holy war :) .
Особые случаи нужно предусмотреть и обрабатывать особо. Но я не собираюсь давать решение. Приведенные примеры - это примеры истории изменения учетных параметров, не более того.

to hhhhhh:
>А если один из родителей неизвестен (NULL), как тогда быть?
Ну и где проблема? Ваша БД не допускает Null в ключе? Это не влияет на задачу.
Вот такое, брат IMHO.
PS: пора пиво пить. А топикстартер - поднял тему для пятницы. (Понедельник начинается в cубботу!)
...
Рейтинг: 0 / 0
02.12.2007, 03:52
    #34980089
michael_is_98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
По поводу хранения адреса могу сказать следующее - это отдельная тема. Не будем ее здесь поднимать. Т.к. задача решается на массиве данных 300-400 тыс. человек (население небольшого города), пусть для простоты будем считать, что адрес человека определяется кодом дома по городу (идентификатор дома в городе), номером квартиры и номером нанимателя (имеет смысл для коммунальной квартиры).
ФИО нужно хранить в 3-х разных полях. Что касается идентификатора личности, то в нашем городе не встречается двух людей с одинаковой ФИО,датой рождения. Этого достаточно. Как это делается в масштабах страны - также не будем вдаваться (скорее всего, добавляется еще место рождения или еще что-то).

В администрации небольшого города работаю я. Стоит здесь у 27 паспортистов система на SQL Server 2000, но ошибки идут, исправить программу невозможно. Собственно на уровне БД система проработана более-менее хорошо, но клиентская часть недоработана...
Есть еще требование получать события (список привел) за определенный период. А система сделать это не позволяет. Вот и нужно думать о новой системе (СУБД, язык программирования пока не определены).
...
Рейтинг: 0 / 0
02.12.2007, 22:48
    #34980873
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
Konstantin~наверно имеет смысл хранить данные в двух таблицах, позволяющие только SELECT и INSERT:

гражданин (
(id,timestamp), -- PK
документ, -- FK (документ.id)
имя,
фамилия ,
дата_рождения,
дата_смерти,
...
кто_менял_запись
) паспорт можно поменять. вместе в ФИО/полом/др (если найдется ошибка в записях загса) и т.п.

так что у гражданина только id. остальное - в истории этого гражданина.
...
Рейтинг: 0 / 0
03.12.2007, 14:37
    #34982359
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
michael_is_98Что касается идентификатора личности, то в нашем городе не встречается двух людей с одинаковой ФИО,датой рождения. Этого достаточно.Совершенно принципиально неправильное решение.
...
Рейтинг: 0 / 0
03.12.2007, 17:05
    #34982978
KGP
KGP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
michael_is_98
ФИО нужно хранить в 3-х разных полях. Что касается идентификатора личности, то в нашем городе не встречается двух людей с одинаковой ФИО,датой рождения.

имхо - у вас мало опыта не только в проектировании, но и предметной области.
1. узнайте ЧТО может меняться в данных одного человека
2. ЧТО может происходить при смене данных одного человека
3. в ваш маленький город может приехать человек из любого города России и слабо вериться в реальность UI = {Ф+И+О+дата_рождения}
4. Ф, И, О меняется - так что лучше всеже иметь pk = {автоинкрементный id}
...
Рейтинг: 0 / 0
03.12.2007, 17:09
    #34982989
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
michael_is_98 , дружище, начни с изучения законодательства по этому вопросу, а то такого напроектируешь, что потом переделывать будешь. А переделывать действующую БД это жуткий гемор - я сам проходил.
Например, по закону, я точно знаю, место рождения указывается то, которое было на момент рождения! И закон не интересует, что это место уже переименовано.
Был г. Горький теперь это г. Нижний Новгород, а в своей БД ты обязан хранить их как два неселённых пункта - математически разных, а логически одинаковых. И у людей рождённых в разное время, указывать разное место рождения (даже если паспорт поменялся).

Короче, читай закон - там всё написано. Потом проектировать будешь.
...
Рейтинг: 0 / 0
03.12.2007, 17:21
    #34983034
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
Да и в догонку.
Населённых пункта два, а в зависимости от SQL запроса, например для статистики надо оба считать как один, а для юридических дел либо как один либо как два.
...
Рейтинг: 0 / 0
03.12.2007, 22:32
    #34983617
novise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
На первый взгляд так может проехать

1. Гражданин: айди , Ф.И.О., Дата_рождения, Место рождения - справочник, дата_регистрации, (рождение/прибытие), Дата_убытия, (смерть,убытие)
2. Событие: айди_события, айди , Дата_события, (1 получение паспорта, смена паспорта, перемена фио, и т.д - справочник)
3. Параметры события: айди_события,.....

А на второй - пусть скажут более опытные.
Вроде локальная история гражданина в эту схему ложится.

Если у тебя нормальная база, которая устраивает, не трогай ее.
Переделай приложение. Или сделай доп нашлепку. Переход с одной базы на другую - это нечто не предсказуемо геморное.

Замечание Змейше по поводу городов - оч хор!
И улиц - точно так же! И номеров домов.
...
Рейтинг: 0 / 0
04.12.2007, 04:42
    #34983757
michael_is_98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
Правила регистрации населения не прописаны четко в законах РФ, в том-то и дело.
У меня предложение. Давайте не будем вдаваться в детали. Да, действительно место рождение может именоваться по-разному, но указывать на один город. Могу даже так сказать - пусть место рождения записывается одной строкой (хотя я знаю, что это заведомо неправильно), пусть ФИО+дата рождения не повторяются (хотя есть примеры когда разные люди имеют одинаковое ФИО+дата рождения).
Интересует именно структура БД, по которой можно получать список внесенных паспортистом изменений в данные в виде событий. Список событий привел и его можно считать исчерпывающим для задачи.
[quote]
-Рождение: запись акта о рождении, сообщение о рождении ребенка
-Получение паспорта: листок прибытия с данными документа, удостоверяющего личность
-Прибытие: листок прибытия с данными по регистрации прибытия
-Перемена ФИО: листок прибытия, запись акта перемены ФИО, запись акта о браке, запись акта о расторжении брака, внесение изменений в запись акта о рождении
-Смена документа:листок прибытия
-Убытие: листок убытия, сообщение об убытии
-Смерть: листок убытия, запись акта о смерти
[/quote]

Просто каждое изменение (событие) происходит на определенных основаниях. Основания я указал после каждого события через ":". Данные документа-основания должны храниться в БД (и опять-таки не будем вдаваться в подробности, как хранить адрес регистрации/снятия с регистрации).

Список документов-оснований:
- листок прибытия/убытия: дата регистрации, дата снятия, адрес куда прибыл, адрес куда убыл, причина прибытия, причина убытия, реквизиты документа, удостоверяющего личность, гражданин
- запись акта ЗАГС (о смерти, о перемене ФИО, о браке, о расторжении брака): дата актовой записи, номер актовой записи, гражданин

При этом есть 2 сущности с реквизитами:
- гражданин: фамилия, имя, отчество, дата рождения, пол, место рождения
- документ, удостоверяющий личность (паспорт РФ, паспорт СССР, свидетельство о рождении):
дата выдачи, серия, номер, кем выдан
...
Рейтинг: 0 / 0
04.12.2007, 05:02
    #34983760
michael_is_98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование БД о населении
Наверное 3 сущности:
-третьей является адрес в виде кода дома по городу, квартиры и номера нанимателя (для коммунальной квартиры)
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование БД о населении / 25 сообщений из 111, страница 1 из 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]