Схема базы данных: как можно построить связь между пользователем, файлом и папкой? - PullRequest
3 голосов
/ 16 марта 2012

Мне было интересно, как будет разработана схема базы данных Dropbox?Я имею в виду три таблицы: Пользователь, Файл, Папка со следующими ограничениями.

Ограничения:

  1. Пользователь может содержать несколько файлов и папок.
  2. Каждый файлможет использоваться несколькими пользователями.
  3. Файл может быть организован в папке для одного пользователя, но не для другого пользователя (если файл является общим).
  4. Каждая папка также может содержать несколько файловкак и другие папки.

Как бы вы создали отношения между ними?

Ответы [ 2 ]

5 голосов
/ 16 марта 2012

Этот ERD соответствует правилам, которые вы описали:

ERD

Обратите внимание, что в этой схеме каждый пользователь имеет свое индивидуальное представление папок.Файлы, с другой стороны, представлены только один раз, но могут быть назначены одной или нескольким папкам, даже для разных пользователей.


РЕДАКТИРОВАТЬ: (слегка) расширенная модель:

С добавлением единой таблицы для отслеживания физических папок и их содержимого моя предложенная схема также охватывает все дополнительные функции, предложенные Бранко Димитриевичем:

enter image description here

3 голосов
/ 16 марта 2012

Модель Джоэла Брауна - хорошее начало, но позвольте мне поразить ваше воображение еще одной возможностью:

enter image description here

Эта модель обладает следующими свойствами:

  • Эмулирует файловую систему жесткие ссылки . Вы можете иметь один файл в нескольких папках или даже несколько раз в одной папке под разными именами. То же самое для папок.
  • Он отделяет наименование от контента, который необходим для парадигмы «жестких ссылок». Итак, имена в FILE_IN_FOLDER и FOLDER_IN_FOLDER (а не в FILE и FOLDER).
  • Правильно применяет уникальность локального имени (в одной и той же родительской папке не может быть двух файлов или папок с одинаковым именем).
  • Пользователь не владеет ни файлами, ни папками. Пользователь просто владеет ссылками. Таким образом, каждый пользователь имеет свое собственное «дерево каталогов» , потенциально разделяющее все файлы, или ни одного, ни ничего между ними.

Вопрос, конечно, состоит в том, стоит ли повышенная гибкость, которую вы получаете с этой моделью, дополнительной сложности, но на это только вы можете ответить ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...