在MySQL数据库中存储所有用户文件/文件夹权限时,应该使用什么设计?
我无法确定嵌套集是否需要太多的插入时间,或者邻接列表是否需要使用分层数据的访问时间过长。我非常确定随着文件/文件夹数量的增加,嵌套设置会花费很长时间。例如,插入节点(行)需要在遍历的节点之后更新每个单个节点。是否可以在路径上使用字符串标记化(即/home/user/pictures
-->
/
,/home
,/home/user
)并在查询中使用它,相当于一个可变长度的Adjancency List Model?第三种选择是使用parent_folders
表执行完全相同的功能,但使用更多空间而不是更多时间。
以下是files
和folders
表的最低限度说明:
文件:
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;