質問:
すべてのユーザー ファイル/フォルダーのアクセス許可を MySQL データベースに格納する場合、どのような設計を使用する必要がありますか?
詳細:
入れ子になったセットに必要な挿入時間が長すぎるのか、隣接リストが階層データでアクセスに時間がかかりすぎるのかを判断するのに苦労しています。ファイル/フォルダーの数が増えると、ネストされたセットに非常に長い時間がかかると確信しています。たとえば、ノード (行) を挿入するには、通過したノードの後にすべてのノードを更新する必要があります。パス (つまり、、、) で文字列のトークン化を/home/user/pictures
-->
/
使用/home
し/home/user
、それをクエリで使用して、可変長の隣接リスト モデルに相当するものを使用することは可能ですか? 3 番目のオプションは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;
上記の 2 つのテーブルを次に示します。変更され、潜在的な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;