5

我有代表文件夹的对象,我想知道它们是否应该在数据库中表示。

一方面,似乎最简单的方法是不表示文件夹对象,而只存储文件夹中包含的对象的路径值。我看到的问题是您不能保留其后代不包含任何项目的文件夹,这没什么大不了的。此外,我不清楚如何加载要显示的文件夹层次结构(例如在 TreeView 中)而不预先将所有内容加载到内存中,这可能是一个性能问题。

另一种方法是有一个“文件夹”表,其中包含对其父文件夹的引用。这似乎应该工作,但我不确定如何允许具有相同名称的文件夹,只要它们不共享父级。这甚至应该是数据库应该关注的事情,还是我应该在业务逻辑中强制执行的事情?

4

4 回答 4

7

这个想法是这样的(自我引用):

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
)
于 2009-04-05T16:51:15.853 回答
1

看看本页中间的 ERD 。将层次结构分解到单独的表中允许您支持多种分类法。

于 2009-04-05T17:29:17.853 回答
0

首先问问自己将层次结构保留在数据库中的目的是什么,以及从中获得什么功能。然后要求考虑这样做的工作和维护。

如果您只是使用它来填充树控件,则有一些内置控件直接针对文件夹系统。这对你会更好吗?通过将其存储在数据库中,您是否获得了更多的东西?您打算如何使数据库与可以在数据库之外更改的实际文件夹系统保持同步?除非您提供虚拟文件系统,否则最好直接针对真实的东西,并将相关路径存储在数据库中。

于 2009-04-05T18:44:58.000 回答
0

SQL Server 具有hierarchyid支持分层结构的数据类型。请注意,仅适用于完整版。

于 2009-04-05T19:19:34.907 回答