2012-03-16 13 views
1

私はDropboxのデータベーススキーマがどのように設計されるのだろうかと思いましたか?私は3つのテーブルについて考えています:ユーザー、ファイル、次の制約のフォルダ。データベーススキーマ:ユーザー、ファイル、フォルダ間の関係を設計する方法は?

制約:

  1. ユーザーが複数のファイルやフォルダを含めることができます。
  2. 各ファイルは複数のユーザー間で共有できます。
  3. ファイルは1人のユーザー用にフォルダに編成できますが、別のユーザー用には構成できません(ファイルが共有されている場合)。
  4. 各フォルダには、複数のファイルと他のフォルダを含めることができます。

どのように関係を作成しますか?

ERD

注意をこのスキーマでは、すべてのユーザーがフォルダの独自の個別のビューを持っていること:

+0

であるかどうか、あなたは何をしようとしたのですか? –

+0

1)user_id、file_id、folder_idを含む結合表をfkとして作成します。 file_idとfolder_idはnullでもかまいません。こうすることで、ユーザーのすべてのファイルとそのフォルダに含まれているかどうかを調べることができます。また、(ユーザーの)特定のフォルダーのすべてのファイルを見つけることができます。 – Agent47DarkSoul

+0

2)folderはそれ自身と1対多の関係を持っているので、folder_idカラムを持つフォルダテーブルを作成することができます。これは親フォルダのpkを表すfkになります。 – Agent47DarkSoul

答えて

3

このERDは、あなたが説明したルールに適合します。一方、ファイルは一度しか表示されませんが、異なるユーザーであっても、1つ以上のフォルダに割り当てることができます。


EDIT:(少し)、拡張モデル:

物理フォルダとその内容を追跡するための単一のテーブルを追加すると、私の提案スキーマもブランコDimitrijevicによって提案された追加機能のすべてを扱います:

enter image description here

+0

あなたのご意見ありがとうございます。申し訳ありませんが、私は私の頭の中から出ることができない1つの疑いがあるようです。ファイルがいずれのフォルダにもなく、ルートレベルに直接存在する場合はどうなりますか?だから、どのユーザーにファイルが存在するのか、私たちはどのように理解できますか?もし私が何かを見逃してしまったら、事前にお詫びします。また、あなたがダイアグラムを精緻化することができれば、非常に感謝しています。 – Agent47DarkSoul

+0

スキーマについてもう少し疑問があります:1)物理フォルダのために1-Mの自己関係が必要なのはなぜですか?仮想フォルダを使用して導出できるのはなぜですか(ジャンクションテーブル全体のポイント)。 2)物理ファイルと物理フォルダの間に1Mの関係が必要なのはなぜですか? – Agent47DarkSoul

+0

@ Agent47DarkSoul最初のデザインは素敵でシンプルで、実際に必要なものかもしれません。基本的に、各ユーザーには専用のフォルダツリーがありますが、ファイルは複数のフォルダ(したがって複数のユーザー)で共有できます。 –

2

Joel Brown's modelは良いスタートですが、私は別の可能性にあなたの想像力をくすぐるてみましょう:

enter image description here

このモデルは、次のプロパティがあります

  • それはハードリンクファイルシステムをエミュレートします。複数のフォルダに1つのファイルを作成することも、同じフォルダ内に複数の名前を付けて複数のファイルにまとめることもできます。フォルダの場合も同様です。
  • "ハードリンク"のパラダイムに必要な、コンテンツからの名前付けを分離します。したがって、名前はFILE_IN_FOLDERとFOLDER_IN_FOLDERにあります(FILEとFOLDERではなく)。
  • 「ローカル」名前の一意性が適切に適用されます(同じ親フォルダの下に同じ方法で名前が付けられた2つのファイルまたはフォルダを持つことはできません)。
  • ユーザーはファイルもフォルダも所有していません。ユーザーはリンクを所有しているだけです。このようにして、各ユーザは自身のプライベート "ディレクトリツリー"を持ち、潜在的にすべてのファイルを共有します。

質問は、もちろん、あなたがこのモデルを取得する高い柔軟性は、余分な複雑さの価値があるが、これはあなたが答えることができるだけで何か...

+0

アイデアありがとう。 MSSQL Serverでこのスキーマの基本的な実装を試しました。正直なところ、あなたのデザインを理解し、それがどのようにすべての制約に適合しているかを知的に刺激していました。しかし、「ユーザーはファイルもフォルダも所有していない」という疑いがある。ファイルの所有者を知りたければどうなりますか?他の共有ユーザーにいくつかのアクセスルールを許可できることを考慮してください。ユーザーと他の共有ユーザーを区別する方法は?私の考えは、ファイルとユーザーの間に一対多の関係を作成するファイル(フォルダと同様に)テーブルにfkとしてowner_idを作成することでした。 – Agent47DarkSoul

+0

@ Agent47DarkSoulはい、確実にFILEとUSERの間にFKを作成して、ユーザーの1人を「特別な」(つまりファイル所有者)としてマークすることができます。問題は、実際にこれが必要かどうかです。私。同じファイルを共有するすべてのユーザーが同じように扱われるべきかどうかもう一度、あなただけがそれに答えることができます... –

+0

それをクリアしていただきありがとうございます。私はそれがかなり制約を完了したと思う。これは奇妙な要求に聞こえるかもしれませんが、私はジョエルのデザインとそれがあなたとどのように違うのかを理解する助けとなります。また、それについていくつか疑問があります。私はそれらをクリアするお手伝いをしていただけますか?もう一度、すべての学習経験に感謝します。 – Agent47DarkSoul

関連する問題