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

时间:2012-03-16 11:38:42

标签: database database-design database-schema

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

约束:

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

2 个答案:

答案 0 :(得分:5)

此ERD符合您所描述的规则:

ERD

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


编辑:(稍微)扩展模型:

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

enter image description here

答案 1 :(得分:3)

Joel Brown's model是一个好的开始,但让我用另一种可能性来激发你的想象力:

enter image description here

此模型具有以下属性:

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

当然,问题在于,使用此模型获得的灵活性是否值得增加额外的复杂性,但这只是您可以回答的问题......