数据库架构:如何设计用户,文件和文件夹之间的关系?

Age*_*oul 3 database database-design database-schema

我想知道如何设计Dropbox的数据库架构?我正在考虑三个表:用户,文件,文件夹具有以下约束。

限制条件:

  1. 一个用户可以包含多个文件和文件夹。
  2. 每个文件可以在多个用户之间共享。
  3. 可以在一个文件夹中为一个用户组织一个文件,但不能为另一个用户组织一个文件(如果文件是共享的)。
  4. 每个文件夹可以包含多个文件以及其他文件夹。

您将如何在它们之间建立关系?

Joe*_*own 5

此ERD符合您描述的规则:

ERD

请注意,在此架构中,每个用户都有自己的个性化文件夹视图。另一方面,文件仅代表一次,但可以分配给一个或多个文件夹,即使对于不同的用户也是如此。


编辑:(略)扩展模型:

通过添加一个用于跟踪物理文件夹及其内容的表,我提出的模式还解决了Branko Dimitrijevic建议的所有其他功能:

在此处输入图片说明


Bra*_*vic 5

乔尔·布朗的模型是一个好的开始,但让我胳肢你的想象力与另一种可能性:

在此处输入图片说明

该模型具有以下属性:

  • 它模拟文件系统硬链接。您可以在多个文件夹中拥有一个文件,甚至可以在同一个文件夹中多次使用不同的名称。文件夹同上。
  • 它将命名与内容分开,这是“硬链接”范例所必需的。因此,名称在 FILE_IN_FOLDER 和 FOLDER_IN_FOLDER 中(而不是在 FILE 和 FOLDER 中)。
  • 它正确地强制执行“本地”名称的唯一性(在同一个父文件夹下不能有两个以相同方式命名的文件或文件夹)。
  • 用户既不拥有文件也不拥有文件夹。用户只拥有链接。这样,每个用户都有自己的私人“目录树”,可能共享所有文件,或者不共享或共享任何文件。

当然,问题是您使用此模型获得的更大灵活性是否值得额外的复杂性,但这只有您才能回答......