Вопрос

У меня есть объекты, представляющие папки, и мне интересно, должны ли они быть представлены в базе данных.

С одной стороны, кажется, что самым простым способом было бы не представлять объекты папки, а просто сохранить значение пути для объектов, содержащихся в папке.Проблемы, которые я вижу в связи с этим, заключаются в том, что вы не можете сохранить папку, потомки которой не содержат никаких элементов, что не так уж и важно.Также у меня нет четкого представления о том, как загрузить иерархию папок для отображения (например, в виде дерева) без предварительной загрузки всего в память, что, вероятно, было бы проблемой производительности.

Альтернативой является наличие таблицы "Папка" со ссылками на ее родительскую папку.Кажется, это должно сработать, но я не уверен, как разрешить папки с одинаковым именем, если у них нет общего родительского элемента.Должно ли это вообще быть чем-то, чем должна заниматься БД, или это то, что я должен просто применять в бизнес-логике?

Это было полезно?

Решение

Идея заключается примерно в этом (самоссылка):

CREATE TABLE FileSystemObject ( 
    ID int not null primary key identity,
    Name varchar(100) not null,
    ParentID int null references FileSystemObject(ID),
    constraint uk_Path UNIQUE (Name, ParentID),
    IsFolder bit not null
)

Другие советы

Взгляните на ERD в середине этого Страница.Выделение иерархии в отдельную таблицу позволяет поддерживать несколько таксономий.

Сначала спросите себя, какова цель сохранения иерархии в базе данных и какую функциональность вы получаете за счет этого.Затем попросите рассмотреть работу и техническое обслуживание, которые требуются для этого.

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

SQL Server имеет hierarchyid тип данных, поддерживающий иерархические структуры.Имейте в виду, работает только в полной версии.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top