Каков наилучший способ хранения файловой структуры вместе с файлами, например, из Zip-файла? В настоящее время каждый файл представляет собой строку в базе данных MySQL, но, очевидно, от нее не может быть прочитана никакая структура. Я хочу избежать хранения двоичного файла. Все файлы должны быть текстовыми. Каждая структура zip / file является частной для пользователя, который ее отправил.
Если вы хотите создать структуру, вы можете иметь таблицу каталогов и таблицу файлов. Тогда для каждого каталога в корне будет иметь родительский идентификатор 0. И тогда каждый каталог под ним имеет родительский идентификатор его родителя.
Затем вы укажете идентификатор каталога файлов, чтобы указать, где они находятся.
Моя рекомендация была бы похожа на рекомендацию Олафура Вааге, хотя я бы использовал одну таблицу с столбцами индикаторов, чтобы обозначить «тип» записи.
id - Primary Key parent_id - FK to self (id) type - enum('D', 'F') name - varchar content - BLOB (if you wanted to ever store the file contents).
Это следует за иерархической древовидной структурой, которая для MySQL вы можете найти здесь дополнительную информацию: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
Самый простой способ (возможно, не самый лучший) – определить папку «root» в дереве каталогов, после которого вы будете следовать, а затем по каждому файлу пройти путь относительно этой папки и сохранить его как другой столбец (например, «путь») в db Таблица. Позднее вы можете посмотреть эти значения, чтобы создать одну и ту же структуру каталогов.
Лучше всего контекстуально. Но, принимая его за номинал, я бы сказал, что лучший способ сохранить файловую структуру будет в файловой системе. Если вам не нужно связывать записи вместе с другими записями или иным образом запрашивать их, реляционная база данных не является лучшим выбором для произвольных, иерархических данных. Вы также можете использовать гибридное решение, в котором вы сохраняете индекс в базе данных, с файловым путем и, возможно, с некоторыми метаданными, но сохраняете его в файловой системе.