Структура базы данных Firebase для системы папок / проектов - PullRequest
0 голосов
/ 24 апреля 2019

Текущая структура базы данных пожарной базы:

"projects": {  
  $userId: {    
    $auto_generated_project_id_1: {
      'name': 'first_project',
      ...
    },
    $auto_generated_project_id_2: {
      'name': 'first_project',
      ...
    },
  }
}

Поскольку количество проектов увеличивается, я хочу добавить систему папок, такую ​​как finder или explorer.
Чтобы денормализовать для лучшей производительности, следуем тому, что я пробовал.

"folders": {  
  $userId: {    
    $auto_generated_folder_id_1: {
      'name': 'first_project',
      'parentId': 'parentId to go back',
      ...
    },
    $auto_generated_folder_id_1: {
      'name': 'first_project',
      'parentId': 'parentId to go back',
      ...
    },
  }
}

"projects": {  
  $userId: {    
    $auto_generated_project_id_1: {
      'name': 'first_project',
      'folderId': 'id_of_folder'
      ...
    },
    $auto_generated_project_id_2: {
      'name': 'first_project',
      'folderId': 'id_of_folder'
      ...
    },
  }
}

Дело в том, что, поскольку проекты даже растут, бремя читать целые проекты, чтобы найти, какие проекты находятся в каких папках. Так что теперь мне может понадобиться добавить другие понятия.
В настоящее время я сделал следующее:

"folders": {  
  $userId: {
    'depth_0': {
      $auto_generated_folder_id_1: {
        'name': 'first_project',
        'parentId': '',
        'projectIds': [] // not all sub projectIds, only first level children
        ...
      },
      $auto_generated_folder_id_1: {
        'name': 'first_project',
        'parentId': '',
        'projectIds': [] // // not all sub projectIds, only first level children
        ...
      },
    },
    'depth_1': {
      $auto_generated_folder_id_1: {
        'name': 'first_project',
        'parentId': 'id_amongst_depth_0',
        'projectIds': [] // not all sub projectIds, only first level children
        ...
      },
      $auto_generated_folder_id_1: {
        'name': 'first_project',
        'parentId': 'id_amongst_depth_0',
        'projectIds': [] // not all sub projectIds, only first level children
        ...
      },
    },
    'depth_2': {
      $auto_generated_folder_id_1: {
        'name': 'first_project',
        'parentId': 'id_amongst_depth_1',
        'projectIds': [] // not all sub projectIds, only first level children
        ...
      },
      $auto_generated_folder_id_1: {
        'name': 'first_project',
        'parentId': 'id_amongst_depth_0',
        'projectIds': [] // not all sub projectIds, only first level children
        ...
      },
    },
    ...    
  }
}

"projects": {  
  $userId: {    
    $auto_generated_project_id_1: {
      'name': 'first_project',
      'folderId': 'id_of_folder'
      ...
    },
    $auto_generated_project_id_2: {
      'name': 'first_project',
      'folderId': 'id_of_folder'
      ...
    },
  }
}

В идеале я хочу показать количество вложенных папок / подпроектов в родительских папках.
Например,

папка

Пожалуйста, дайте мне несколько подсказок, как организовать лучшую структуру.

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