0

问题:

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

细节:

我无法确定嵌套集是否需要太多插入时间,或者邻接列表是否需要太多访问分层数据的时间。我很确定随着文件/文件夹数量的增加,嵌套集会花费很长时间。例如,插入一个节点(行)需要在遍历该节点之后更新每个单个节点。是否可以在路径上使用字符串标记化(即/home/user/pictures --> /, /home, /home/user)并在查询中使用它,相当于可变长度邻接列表模型?第三种选择是拥有一个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;

父文件夹:

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;
4

0 回答 0