2017-02-17 13 views
0

Должен ли я использовать схему реляционной базы данных (3NF) для проектирования хранилища данных для Skygear?Схема схемы DB для Skygear

Например, у меня есть группа пользователей, которая содержит пользователя, должна ли она быть в случае A или B ниже?

А.

  • пользователя {идентификатор пользователя}
  • Группа {идентификатор_группы, GroupName}
  • Группировка (идентификатор пользователя, идентификатор_группы, роль}

Б.

  • Группа {userId, groupId, groupName, role}

Я думаю, что при переходе в приложение, я должен получить следующий результат.

{ 
 
    "groupName":"Group A", 
 
    "groupId":"G123", 
 
    "administrator":[ 
 
     { 
 
     "userId":"U123" 
 
     }, 
 
     { 
 
     "userId":"U456" 
 
     } 
 
    ], 
 
    "creator":{ 
 
     "userId":"U123" 
 
    }, 
 
    "member":[ 
 

 
    ] 
 
}

+0

Дизайн B не в 3NF; одно и то же имя группы ненужно повторяется для каждой другой комбинации идентификатора пользователя и группы, с которым он появляется. Приложение запрашивает все, что захочет, с точки зрения базовых таблиц. Для этого предназначены реляционные СУБД. Почему, по вашему мнению, важно, чтобы какой-то запрос выглядел не так, как в таблице наилучшего дизайна базы данных? – philipxy

ответ

0

3NF следует использовать.

Хотя skygear не поддерживает соединение таблицы. Он имеет тип данных отношений записи для использования внешнего ключа. (Хотя на один уровень только)

https://docs.skygear.io/guides/cloud-db/data-types/android/

1

3NF хорош для целостности данных. Все любят целостность данных, но это может не всегда быть первым приоритетом при разработке приложения.

В случае, если вы предоставили мне, я, возможно, выберет A. B требует обновления всех Group, если groupName изменен.

Помимо рассмотрения того, как данные передаются в приложение, попробуйте рассмотреть, как обновлять и создавать тоже?


Когда разрывать 3NF в небе?

Нет пользователей в группе.

В 3NF вы, вероятно, будете использовать функцию aggregate. Skygear еще не предоставил его, обычный способ добавить столбец user_count в group. И обновите номер при добавлении/удалении пользователя.