|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
Доброго времени суток! Прошу совета по проектированию базы данных у более опытных людей: Разрабатываю систему учета документации по персоналу. Учитываются: свидетельство о рождении, школьный аттестат, диплом, паспорт, медицинский полис, списки поощрений сотрудников и т.д. Всего видов документов на данный момент 16. У многих из них одинаковые поля: номер, дата выдачи, кем выдан, срок действия, и т.д. Как быть при построении БД? Для каждого документа отдельная таблица? Или создать одну таблицу со всеми документами, где будет ссылка на таблицу с типами документов? Какие достоинства и недостатки каждого из решений? Ведь каждый документ связан с людьми по-разному: свидетельство рождения у человека одно, как и человек у свидетельства о рождении. Паспортов же у человека уже за всю жизнь три, это тоже учитывается, но у каждого паспорта хозяин один. А вот списки поощрений уже точно MANY-TO-MANY, потому что в одном списке может быть много сотрудников, а одного сотрудника за всю карьеру поощрить могут несколько раз. Пример выдуманный. Но суть одна: имеется много сущностей со сходим список полей, некоторые отличаются только названием. Объединять в одну таблицу или делать разные? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 20:03 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
sqrt0805Объединять в одну таблицу или делать разные? Кинь монетку. На данном этапе разницы нет, а позже, когда она выявится, решение легко поменять. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 20:22 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, А может есть разница в быстродействии? Обращаться к одной таблице, чтобы подгрузить все документы о человеке, или обращаться к одной? Но в то же время, чтобы просто получить список всех паспортов, нужно обратиться к таблице, где очень много данных, не относящихся к данному виду документа? Или это незначительная разница, если речь идет максимум о миллионе записей? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 20:27 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
sqrt0805 Пример выдуманный. Но суть одна: имеется много сущностей со сходим список полей, некоторые отличаются только названием. Объединять в одну таблицу или делать разные? Спасибо. Зависит от того, как эти сущности будут использоваться в бизнес-логике. В качестве эмпирического правила, дающего неплохое стартовое приближение, стоит посмотреть на внешние ключи:
... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 20:38 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
sqrt0805 Пример выдуманный. Но суть одна: имеется много сущностей со сходим список полей, некоторые отличаются только названием. Объединять в одну таблицу или делать разные? Исключительный вопрос к запущенности случая, читай, к бизнес логике. Если разница в 50 аттрибутов между разными документами может быть, это одно, если 5 атрибутов - другое. Как часто меняется добавляется выбирается эта информация и в каком формате крайне важно. Наиболее гибкая система будет eav с типами и таблица соединений, но придется это все разворачивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 21:18 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
PizzaPizza, Спасибо! Почитал про EAV и понял, как лучше сделать. В том то и есть моя проблема: я самоучка на ранней стадии развития. Из области баз данных есть знания SQL и все. Практически никаких знаний по принципам правильной организации структуры в БД нету. Не могли бы посоветовать литературу на данную тему? Заранее благодарен! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 22:46 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
PizzaPizzaНаиболее гибкая система будет eav с типами и таблица соединений, но придется это все разворачивать. Не надо EAV разворачивать. "Там тупик, обрыв..." Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 23:05 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, да я и не стал, но понял как другую проблему решить, которую не описывал в данной теме. Но вот вопрос по литературе остается открытым... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 23:15 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
sqrt0805 Пример выдуманный. ну а о чем тогда говорить ? Только конкретика переходит в конкретику... Например, если то, что ниже это реальность: sqrt0805 Разрабатываю систему учета документации по персоналу. Учитываются: свидетельство о рождении, школьный аттестат, диплом, паспорт, медицинский полис, списки поощрений сотрудников и т.д. Всего видов документов на данный момент 16. У многих из них одинаковые поля: номер, дата выдачи, кем выдан, срок действия, и т.д. То: Персонал - это организация, а это отдел кадров... Зачем долбить все эти данные общие и не общие в учет документов? Все равно есть карточка сотрудника где это всё есть так или иначе... А для хранения самих документов достаточно одной таблицы: Код Сотрудника + Тип Документа + Дата Документа + Номер Документа + Скан Документа (для поощрений не нужен, кому нужно найдет сам приказ) Тип Документа (свидетельство, паспорт, ...) Дата Документа - и так понятно... Номер документа (серийный номер или серия+номер) Ну может быть +- еще пару параметров... По уму-то документ сам нужен (скан), когда есть сомнения в подлинности введенных данных или их полноты не достаточно... Это был ответ на ту конкретику, которую я нашел в вопросе... И да - для каждого документа - отдельная таблица - это задница... в период эксплуатации возможно изменение схемы БД, скорее всего влекущее за собой изменение и интерфейса... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 02:30 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
sqrt0805 Не могли бы посоветовать литературу на данную тему? Что либо про основы баз данных. Нормализация обсуждается везде, а логических моделей хранения не так много. Обратите внимание, что EAV это концепция, которую можно и нужно совмещать с другими структурами. Гибкость имеет стоимость. В чистом виде я бы применял это только на этапе прототипирования если не понятна еще структура данных и требования к системе меняются. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 02:58 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
sqrt0805 Доброго времени суток! Всего видов документов на данный момент 16. У многих из них одинаковые поля: номер, дата выдачи, кем выдан, срок действия, и т.д. . Реляционная модель данных предполагает, что одинаковые данные (ключевые сущности) должны храниться в БД в одном месте. Например, номер паспорта должен храниться в одном месте (таблице), а не, скажем, в 10 таблицах. Т. е. при корректировке номера паспорта (например, при его восстановлении после утери) он корректируется в одной таблице, а не в 10. При этом дополнительные атрибуты объекта (например, "Дата выдачи", "Срок действия") хранятся в основной таблице "Паспорта". Поле "Кем выдан" может содержать ссылку на запись справочника (отдельной таблицы) "Паспортные отделения РУВД". ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 18:43 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
ЮВ, автор спрашивает о том, как хранить "советские паспорта", "российские паспорта" и "загранпаспорта" - в одной таблице или в трёх разных. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 05:10 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
1. Таблица "сотрудники" (id, фио и прочие, если нужны). 2. Таблица "документы сотрудника" (id документа из атрибутов документа, id сотрудника). 3. Таблица "Атрибуты документа" (id документа, Номер, Название или тип атрибута, значение атрибута). 4. Таблица "Типы атрибута" - по желанию, так как можно список закодировать и без таблицы. Это самый простой вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 09:31 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
Еще можно добавить признак актуальности документа, т.к. документ может быть аннулирован/утерян с выдачей нового документа. Может понадобиться возможность проверки данных и старого и нового паспорта. Возможно понадобиться введение признака "Дубликат документа" и "Действителен до даты ХХХ". Ну и комментарий должен быть обязательно. В нем можно указывать специфическую информацию для документа (присвоенную категорию, квалификацию, допуски, разряды, аттестацию и пр.). Может быть даже сделать это в XML/JSON структуре. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 11:35 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
Правильнее будет их вообще не хранить, ибо персональные данные и всё такое... Геморроя больше чем толка. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 14:03 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Правильнее будет их вообще не хранить, ибо персональные данные и всё такое... +++++ но это нужно делать грамотно... Давать возможность вводить или сканы или реквизиты или и то и другое, но как бы доп опцией, чтобы их наличие/отсутствие не влияло на предметное функционирование проекта... тогда те же кадровики, подолбив и просканировав неделю скажут - да ну его нахрен, вон оно всё в папке в шкафу стоит и пока хватит, а там видно будет... и на этом всё обычно заканчивается... Причем так всегда, везде и во всем... То все орут - нам нужен строгий учет техники по каждому изделию! Дя системного блока: материнская плата, тип процессора, память (тип и объем), параметры видео карты... Для монитора: производитель, марка, размер экрана в дюймах, максимальное разрешение, плоский или нет... бла... бла... бла... Корячишься, корячишься, через год залазишь в базу, а там кроме типа устройства, названия, инв. номера и ответственного больше и нет нихрена... и ничо, работают, все счастливы... Просто те кто орёт что им всё нужно, понимают что это всё они будут вводить сами - когда получают готовый продукт... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 16:22 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
sqrt0805 Но вот вопрос по литературе остается открытым... Дейт. Введение в системы баз данных. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2021, 00:11 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
Stanislav P, Это больше смахивает на вариант "не запариваться" ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2021, 18:50 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
cinas, это смахивает на вариант, какое ТЗ, такое и решение. Да и зачем плодить сущности без необходимости? Кроме того, у автора есть вопросы, на которые в моём сообщении дан ответ, как лучше, универсальнее решить поставленную задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 08:11 |
|
Одна таблица или несколько?
|
|||
---|---|---|---|
#18+
p.s. выше 6NF (https://habr.com/ru/company/avito/blog/322510/). Но все же лучше подумать. авторУ многих из них одинаковые поля: номер Номер у различных документов может иметь разный формат и ограничения, где-то только цифры и 10 символов, где-то только буквы и спец. символ, а где-то он вообще необязателен и.т.д. Вроде номер - но на самом деле это будет совершенно "разный номер" и мешать их в общем случае не стоит, хотя всё зависит от задачи. Физически каждый тип документа "уникальный" - нельзя вырвать страницу из паспорта и вставить её в загран. паспорт (это не деталь которая используются в изделии X раз). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2022, 02:47 |
|
|
start [/forum/topic.php?fid=32&fpage=1&tid=1539764]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 148ms |
0 / 0 |