2017-02-17 60 views
0

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

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

A.

  • 用户{用户id}
  • 组{的groupId,组名}
  • 分组(用户ID,的groupId,角色}

B.

  • 组{userId,groupId,groupName,role}

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

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

 
    ] 
 
}

+0

设计B不在3NF;对于每个不同组合的用户标识和组标识,都会重复使用相同的组名称。应用程序根据基表查询任何想要的内容。关系数据库管理系统就是为此而设计的。为什么你认为重要的是在最好的数据库设计中某些查询与某些表看起来不一样? – philipxy

回答

1

3NF是良好的数据的完整性。每个人都喜欢数据完整性,但在设计应用程序时,并不总是首要任务。

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

除了考虑数据如何传递到应用程序,请尝试考虑如何更新和创建呢?


什么时候打破天空中的3NF?

组中的用户数量。

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