Я не думаю, что ваши подрядчики сделали что-то не так, tbh. Взятие загруженных файлов со всеми их проблемными символами / дублированными именами (у вас более одного пациента с именем JohnSmith.jpg?) И c и переименование их в GUID, чтобы они могли сосуществовать вместе с другими изображениями, не перезаписывая их, это а) разумно и б) что бы я сделал.
Я бы также не стал хранить изображения в базе данных, так как тогда единственное, что вы можете сделать с ними, - это снова их извлечь; что-то, что вы должны делать каждый раз, когда хотите что-то с ними сделать. Возможность сопоставить папку изображений с URL-адресом на вашем веб-сервере и затем отправить html, используя только имя файла, означает, что веб-сервер может разделить изображение без необходимости извлекать его из базы данных; db не обязательно вовлекаться в бессмысленный ввод-вывод.
Способ сопоставления этих изображений с пациентами, которым они принадлежат, осуществляется с помощью базы данных. Где-то в другом месте в структуре базы данных будет, например, запись пациента со столбцом DocumentId, который ссылается на эту запись документа, или таблицу PatientDocuments, содержащую пары PatientId / DocumentId.
Если нет, то хранение байтов документа в базе данных не поможет связать их с пациентом, потому что это отношение не о том, где находятся байты изображения, а о том, какие другие данные были хранится, чтобы сделать систему пригодной для использования. Ваши мысли по этому поводу, загрузка десятков тысяч изображений в базу данных просто для того, чтобы вы могли ... э-э ... получить их все снова, похоже, указывают на то, что вы еще не полностью поняли причины, по которым ваши подрядчики сделали то, что они сделали.
Поскольку у вас сложилось впечатление, что вы можете это сделать, вы, кажется, знаете, как база данных связывает документ с пациентом (если это не так, ваш предложенный процесс потерпит неудачу), и поэтому вы можете организовать подходящий процесс переименования без необходимости перемещать данные изображения куда-либо. По сути, вы не видите, что файловая система, хранящая данные файла по уникальным путям, ничем не отличается от таблицы базы данных, хранящей данные файла по уникальным идентификаторам. Таблицы вашей базы данных для документов ясно, поэтому ссылки на вашу файловую систему / файловую систему можно рассматривать как расширение таблицы документов. Вам нужны другие таблицы в db, чтобы понять файлы, но вам нужны другие таблицы в db, чтобы понять любую таблицу в db. Это ключевые концепции моделирования связанных данных
Я не рекомендую вам предпринимать предложенный вами процесс, но я уверен, что это не отговорит. Рассмотрим затем (потому что вы на самом деле не опубликовали никаких деталей, с которыми мы могли бы работать) этот предполагаемый сценарий:
Patients
Name,DocumentId
John Smith,1
Jane Doe,2
Documents
Id,FilePath
1,'/root/2020/05102019/69353829-e46b-47e7-ab56-a1762424f0dd.pdf'
2,'/root/2014/09282017/385ba21d-e108-4cbb-9287-91110c16edb0.jpg'
SELECT CONCAT('REN ', d.filePath, ' "', p.Name, RIGHT(d.filePath, 4), '"')
FROM
Patients p
INNER JOIN Documents d ON p.DocumentId = d.DocumentId
Результаты запроса будут по существу пакетным файлом, полным команд переименования, который переименовывает все файлы в единую папку, организованную по имени пациента.
И теперь все ваши несколько пациентов с одинаковыми именами будут перезаписывать друг друга, и все закончится беспорядком
Это также дает мне понять, что «не храните файлы в db "- посмотрите, насколько легко управлять файлами, когда они находятся в файловой системе, используя существующие команды, которые понимают файловые системы и файлы и делают такие вещи, как переименование файлов или извлечение данных exif, поворот, изменение размера и печать ... если все эти изображения были в вашей базе данных, единственное, что вы могли сделать с ними, - это вытащить их снова; sqlserver не может вращать, изменять размер, печатать и т. д. c BLOB-данные, но существуют тысячи инструментов, которые понимают файлы и могут их преобразовывать - эти инструменты не могут понять вашу базу данных, поэтому помещение файлов в базу данных обременяет вас проблемой, что они становятся бесполезными пока снова не откопают
Возможно, ваши подрядчики не были такими глупыми, как вы думаете; сделайте паузу, прежде чем приступить к разбору всего, что они сделали, и спросите, действительно ли ваш драйвер для этого верен. Если Джейн на стойке регистрации необходимо увидеть фотографию Джона Смита с водительскими правами XY1234, чтобы идентифицировать его, не предоставляйте ей общий диск, полный всех фотографий, и позвольте ей дважды щелкнуть, перетащить и случайно удалить свой путь по файловой системе. . Предоставьте ей приложение, которое просматривает базу данных, получает непонятное, но услужливо уникальное имя файла с диска и открывает его для просмотра. И сделайте файловую систему доступной только для чтения всем, кроме приложения, чтобы пользователи не могли что-то сломать