Собираю базу данных. Задача найти оптимальное (наиболее производительное) решение модели базы.
Дано:
Вопрос:
Оптимальное ли данное решение связей с точки зрения производительности, либо лучше отказаться от таблиц "hrms_passports_docs_paths", "hrms_сertificates_docs_paths", "hrms_educations_docs_paths" в пользу хранения всех путей напрямую в таблице "hrms_docs_paths" с добавлением двух индексов: id_document (ключ в основной таблице документов) и type (passport, education, certificate)?
Текущая реализация:
(На типы данных не обращайте внимание, сейчас набрасывается общая модель.)
Одна таблица для сканов, одно поле типа enum для типа скана (или отдельная таблица с типами, если они будут динамические и пополняемые).
И, главное, не хранить пути к файлам в базе. Каждый скан так или иначе имеет уникальные признаки - идешка, тип, владелец. Дата создания на худой конец или контрольная сумма от файла. Всего этого достаточно для генерации путей до файла.
Завтра поменяете способ хранения файлов и придётся обновлять все записи в базе? Нет, только поменяете генератор путей. Плохая идея хранить весь миллион файлов в одной папке. Вы всё равно рано или поздно придёте к шардированию в том или ином виде. Базы это никак касаться не должно.
Предложу свой вариант.
Создайте 3 таблицы.
1 и 2 таблицу свяжите общим ключом, возможно это будет какой-либо ID или номер табеля сотрудника в организации.
2 и 3 таблицы свяжите id_type
В конечном итоге запрос по сотруднику условно говоря будет такого вида
SELECT empl.*, doc.passport, doc.certificates FROM hrms_employees empl
JOIN hrms_docs_paths doc
ON doc.id_empl = empl.id_empl
WHERE empl.name = 'Иванов'
Если хотите выводить название документа, в запрос вкладываете JOIN по hrms_docs_type, где будет 2 стобца: id_type, type_name
С точки зрения проектирования такой вариант будет предпочтительней, чем для каждого типа документа создавать отдельную базу.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
После покупки нового компьютера (доступ к старому есть ещё есть), нужно перенести на него информацию из базы данных которая у меня там была...