Firebase结构重复

时间:2017-01-30 15:15:25

标签: firebase firebase-realtime-database nosql

我是Firebase和NoSQL的新手,我为我的应用程序制作了一个结构,我有一些问题。

我的结构:

 ROOT
 |
 +-- USERS
 |     |
 |     +-- USER_ID
 |           |
 |           +-- USERNAME
 |           |
 |           +-- DISPLAY_NAME
 |           |
 |           +-- PROFILE_PICTURE_URL
 |           |
 |           +-- POST_COUNT
 |
 +-- CATEGORIES
 |     |
 |     +-- CATEGORY_ID
 |           |
 |           +-- NAME
 |           |
 |           +-- POST_COUNT
 |
 +-- POSTS
 |     |
 |     +-- POST_ID
 |           |
 |           +-- MESSAGE
 |           |
 |           +-- USER_ID
 |           |
 |           +-- USERNAME
 |           |
 |           +-- DISPLAY_NAME
 |           |
 |           +-- PROFILE_PICTURE_URL
 |           |
 |           +-- CATEGORIES
 |           |     |
 |           |     +-- CATEGORY_ID
 |           |
 |           +-- LIKE_COUNT
 |
 +-- USERS_POSTS
 |     |
 |     +-- USER_ID
 |           |
 |           +-- POST_ID
 |                 |
 |                 +-- MESSAGE
 |                 |
 |                 +-- USER_ID
 |                 |
 |                 +-- USERNAME
 |                 |
 |                 +-- DISPLAY_NAME
 |                 |
 |                 +-- PROFILE_PICTURE_URL
 |                 |
 |                 +-- CATEGORIES
 |                 |     |
 |                 |     +-- CATEGORY_ID
 |                 |
 |                 +-- LIKE_COUNT
 |
 +-- CATEGORIES_POSTS
 |     |
 |     +-- CATEGORY_ID
 |           |
 |           +-- POST_ID
 |                 |
 |                 +-- MESSAGE
 |                 |
 |                 +-- USER_ID
 |                 |
 |                 +-- USERNAME
 |                 |
 |                 +-- DISPLAY_NAME
 |                 |
 |                 +-- PROFILE_PICTURE_URL
 |                 |
 |                 +-- CATEGORIES
 |                 |     |
 |                 |     +-- CATEGORY_ID
 |                 |
 |                 +-- LIKE_COUNT
 |

我问自己这些事情是否合适?

  • 这些帖子多次重复。
  • 用户信息出现在每个帖子中,也许我只需要用户ID并稍后请求用户信息?
  • 我应该提取" likeCount"在另一个对象?
  • 当我想要更新用户或帖子时(或者" likeCount")我有很多更新要做。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

这个问题有点模糊,但这里有一些想法

  

这些帖子多次重复。

NoSQL中的重复数据没有任何问题 - 它实际上很常见。但是,重复数据需要有一个原因,通常是为了协助查询。除了展平之外,不要仅仅为了对数据进行非规范化复制。在问题中,不需要重复数据 - 这可能会根据您对数据的处理方式而改变。

  

用户信息出现在每个帖子中,也许我只需要   用户ID并稍后请求用户信息?

正确!在这种情况下,可能不需要重复数据。只需在帖子中使用uid即可在需要时收集其余的用户数据

  

我应该在另一个对象中提取“likeCount”吗?

这取决于。只有一个计数可以很容易地获得喜欢的数量,但不会链接回喜欢它的人,所以你放松了这个连接。另一方面,您可以只使用喜欢该帖子的uid来存储节点。这将非常快速地计算和维护谁喜欢它。

  

当我想要更新用户或帖子(或“likeCount”)时,我有很多   要做的更新。

不是真的。如果相同的计数仅存储在一个地方(带有帖子),那只是递增一个节点。更新用户节点中的帖子计数,而不是更大的交易。

通常,当您想要在Firebase中“计算”事物时,您可以a)读入所有节点并在代码中计算它们或b)在某处保留一个计数器节点并在运行中递增。计数器节点通常是这样做的方式,你正朝着正确的方向前进。