2012-04-14 4 views
0

MySqlで "仮想ファイルシステム"を作成する必要があります(asp.netをWebアプリケーションとして使用する必要があります)。それは非常に複雑ではないでしょう、おそらく最大2-3のサブフォルダ "深い"、おそらく各ファイルに最大10のファイル。各ユーザーは、ログイン後に独自のフォルダとファイルを持ちます。管理者は「テンプレート」を作成し、新しいユーザーにテンプレートを割り当てることができます。テンプレートにはいくつかのフォルダとファイルがあります。そして、これが私の頭をどのように作るのかを傷つけているのです。私は少なくともテーブルをデザインするのには近いと思っていますが、わかりません。これまでに作成した表は次のとおりです。MySqlの仮想フォルダシステム "templates"

Files 
ID 
Name 
ContentType 
FileDataSize 
FileData 
Parent_Folder_ID 

Folders 
ID 
Name 
Parent_Folder_ID 

Users 
ID 
Name 
Email 
Password 

Templates 
ID 
Name 

User_Templates 
User_ID 
Template_ID 

私はここに正しいトラックを持っていますか?または私は何かを逃していますか?

+0

フォルダ階層に[ネストセット](http://en.wikipedia.org/wiki/Nested_set_model)を使用すると思います。隣接リストは機能しますが、再帰の必要性のために痛いです。ユーザーをフォルダにリンクする関連テーブルがないようです。 – nnichols

答えて

1

これはかなりシンプルに見えますが、これはおそらくあなたの目的のために働くでしょう。 唯一の問題は、リーフノードのフルパスを判断するためにいくつかのクエリが必要になることです。

これを解決する最も簡単な方法は、実際のような、別の列に完全なパスを格納することです:

のfolder1 /フォルダ2 /ノード対処するのが最も簡単絶対確か

としてかなり重要な情報と。

また、プリオーダーツリートラバーサルアルゴリズムを使用することもできますが、これはより複雑になりますが、サブツリーの取得は高速ですが、更新が非常に遅くなる可能性があります。

+0

「フルパス」列をフォルダテーブルに追加することを意味しますか? –

+0

そうです。でも試してみませんか?どのような質問が必要ですか?クエリを書いたら、見つからないものや見つからないものをすばやく見つけることができます。 – Evert

+0

はい、試してみます。先端Evert:ありがとうございます –