0

我应该使用关系数据库模式 (3NF) 来设计 Skygear 的数据存储吗?

例如,我必须包含包含用户的用户组,它应该是下面的案例 A 还是 B?

一个。

  • 用户{userId}
  • 组{groupId, groupName}
  • 分组(用户 ID,组 ID,角色}

B.

  • 组{userId, groupId, groupName, role}

我认为在传递给应用程序时我最终应该得到以下结果。

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

   ]
}

4

2 回答 2

1

3NF 有利于数据完整性。每个人都喜欢数据完整性,但在设计应用程序时它可能并不总是首要任务。

在您提供的情况下,我可能会选择 A。Group如果groupName更改,B 需要更新所有内容。

除了考虑数据如何传递到应用程序之外,还要考虑如何更新和创建?


skygear什么时候破3NF?

组中的用户数。

在 3NF 中,您可能会使用聚合函数。Skygear 还没有提供它,这是添加user_count列进行group记录的常用方法。并在添加/删除用户时更新号码。

于 2017-02-20T02:56:17.210 回答
0

应使用 3NF。

虽然 skygear 不支持表连接。它具有用于使用外键的记录关系数据类型。(虽然只有一级)

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

于 2017-02-20T02:55:50.073 回答