文件权限的嵌套集或邻接列表模型(MySQL)

时间:2012-05-29 21:45:18

标签: mysql adjacency-list nested-set-model adjacency-list-model

问题:

在MySQL数据库中存储所有用户文件/文件夹权限时,应该使用什么设计?

详细说明:

我无法确定嵌套集是否需要太多的插入时间,或者邻接列表是否需要使用分层数据的访问时间过长。我非常确定随着文件/文件夹数量的增加,嵌套设置会花费很长时间。例如,插入节点(行)需要在遍历的节点之后更新每个单个节点。是否可以在路径上使用字符串标记化(即/home/user/pictures --> //home/home/user)并在查询中使用它,相当于一个可变长度的Adjancency List Model?第三种选择是使用parent_folders表执行完全相同的功能,但使用更多空间而不是更多时间。

以下是filesfolders表的最低限度说明:

文件:

CREATE TABLE IF NOT EXISTS files
(
   id                    INT NOT NULL AUTO_INCREMENT,
   path                  VARCHAR(500) NOT NULL,
   r                     BOOL NOT NULL DEFAULT FALSE,

   PRIMARY KEY ( id )
)
engine=innodb;

文件夹:

CREATE TABLE IF NOT EXISTS folders
(
   id                    INT NOT NULL AUTO_INCREMENT,
   path                  VARCHAR(500) NOT NULL,
   r                     BOOL NOT NULL DEFAULT FALSE,

   PRIMARY KEY ( id )
)
engine=innodb;

以上是两个表,经过修改并带有潜在的parent_folders表:

文件:

CREATE TABLE IF NOT EXISTS files
(
   id                    INT NOT NULL AUTO_INCREMENT,
   parent_folder_id      INT NOT NULL,
   path                  VARCHAR(500) NOT NULL,
   r                     BOOL NOT NULL DEFAULT FALSE,

   FOREIGN KEY ( parent_folder_id ) REFERENCES folder ( id ),
   PRIMARY KEY ( id )
)
engine=innodb;

文件夹:

CREATE TABLE IF NOT EXISTS folders
(
   id                    INT NOT NULL AUTO_INCREMENT,
   path                  VARCHAR(500) NOT NULL,
   r                     BOOL NOT NULL DEFAULT FALSE,

   PRIMARY KEY ( id )
)
engine=innodb;

parent_folders:

CREATE TABLE IF NOT EXISTS parent_folders
(
   id                    INT NOT NULL AUTO_INCREMENT,
   parent_folder_id      INT NOT NULL,
   folder_id             INT NOT NULL,

   FOREIGN KEY ( parent_folder_id ) REFERENCES folders ( id ),
   FOREIGN KEY ( folder_id ) REFERENCES folders ( id ), 
   PRIMARY KEY ( id )
)
engine=innodb;

0 个答案:

没有答案