【发布时间】:2012-03-16 11:38:42
【问题描述】:
我想知道如何设计 Dropbox 的数据库架构?我正在考虑三个表:具有以下约束的用户、文件、文件夹。
约束:
- 一个用户可以包含多个文件和文件夹。
- 每个文件都可以在多个用户之间共享。
- 一个文件可以为一个用户组织在文件夹中,但不能为另一个用户组织(如果文件是共享的)。
- 每个文件夹可以包含多个文件以及其他文件夹。
您将如何在它们之间建立关系?
【问题讨论】:
-
1) 创建一个包含 user_id、file_id、folder_id 作为 fk 的联结表。 file_id 和 folder_id 可以为空。这样我们就可以找到用户的所有文件以及它们是否包含在任何文件夹中。还可以找到给定文件夹(用户的)的所有文件。
-
2) 由于文件夹与自身是一对多的关系,我们可以创建文件夹表,其中包含一个folder_id列,该列将是一个代表其父文件夹的pk的fk。
标签: database database-design database-schema