2010-02-04 3 views
0

Мы используем файловую систему для хранения файлов в приложении. Теперь мы изменим это, чтобы использовать SQL2K5 для хранения в виде BLOB в соответствии с требованием.Проектирование базы данных для файловой структуры

Теперь нам нужен совет относительно дизайна стола. Очевидно, что он должен иметь папку, файлы в файлах, размер, последнюю дату и т. Д., Аналогичную файловой системе.

Я начинаю с:

FILEID, ParentFileID, FileName, размер, LastDateModified, DateCreated, LastModifiedBy, ModifiedBy

Как это может быть изменен, чтобы обработать папки, а?

+0

Вы хотите сохранить файлы или сохранить факсимильную структуру файловой системы? Если последнее, почему? –

+0

Я хочу хранить файлы, а также структуру, в которой находится папка, размер и т. Д. – dcpartners

+0

Они уже придумали что-то для хранения файлов и структуры каталогов. Это называется файловой системой. Почему вы хотите дублировать это? Собираетесь ли вы реализовать безопасность? –

ответ

1

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

Однако, вы можете иметь свои причины, так вот как я бы структурировать таблицу:

filesystem (
    id,  // auto increment 
    type,  // flag field: 1 = file, 2 = folder, 3 = symlink, if needed (?) 
    parent_id, // id of a folder 
    filename, 
    modified, 
    created, 
    modified_by, 
    created_by, 
    file_data // blob 
) 

Вы бы нужен уникальный индекс (parent_id, имя файла), если вы хотите, чтобы имитировать реальную систему ,

Если вам нужны разрешения для каждого файла, я бы просто дублировал подход Unix с правами владельца/группы/всех - вам также нужно было бы отследить владельца и group_id в этой таблице. Возможно, вы могли бы упростить его владельцу/всем, и вы, вероятно, могли бы просто использовать чтение/запись (forgoing «execute»).

+0

@nickf: Для разрешения я просто добавляю еще один столбец, который я предполагаю. Это уровень разрешения? – dcpartners

+0

@ dewacorp: Это не так просто. ACL - сложная структура, и для нее, вероятно, потребуется, по крайней мере, две отдельные таблицы (одна для пользователей и/или ролей, одна для разрешений). – Aaronaught

0

Вы можете найти модифицированный один:

FileSytemObjects(
FileSystemObjectID, 
ParentFileSystemObjectID, 
FileSystemTypeID, --File, Folder, Shortcut 
Data, 
DateCreated, 
LastModified, 
CreatedBy, 
LastModifiedBy, 
IsActive 
) 

FileSystemSecurity(
FileSystemObjectID, 
GroupOrUserID, 
IsAllowFullControl, 
IsDenyFullControl, 
IsAllowExecute, 
IsDenyExecute, 
IsAllowListFolder, 
IsDenyListFolder, 
... 
... 
) 

С IsAllowFullControl, IsDenyFullControl, IsAllowExecute, IsDenyExecute, IsAllowListFolder, IsDenyListFolder, я знаю, что это не идеал DB дизайн, но это намного быстрее, чтобы получить разрешение на один удар ,

Как вы думаете?

Смежные вопросы