我是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
|
我问自己这些事情是否合适?
提前谢谢!
答案 0 :(得分:1)
这个问题有点模糊,但这里有一些想法
这些帖子多次重复。
NoSQL中的重复数据没有任何问题 - 它实际上很常见。但是,重复数据需要有一个原因,通常是为了协助查询。除了展平之外,不要仅仅为了对数据进行非规范化复制。在问题中,不需要重复数据 - 这可能会根据您对数据的处理方式而改变。
用户信息出现在每个帖子中,也许我只需要 用户ID并稍后请求用户信息?
正确!在这种情况下,可能不需要重复数据。只需在帖子中使用uid即可在需要时收集其余的用户数据
我应该在另一个对象中提取“likeCount”吗?
这取决于。只有一个计数可以很容易地获得喜欢的数量,但不会链接回喜欢它的人,所以你放松了这个连接。另一方面,您可以只使用喜欢该帖子的uid来存储节点。这将非常快速地计算和维护谁喜欢它。
当我想要更新用户或帖子(或“likeCount”)时,我有很多 要做的更新。
不是真的。如果相同的计数仅存储在一个地方(带有帖子),那只是递增一个节点。更新用户节点中的帖子计数,而不是更大的交易。
通常,当您想要在Firebase中“计算”事物时,您可以a)读入所有节点并在代码中计算它们或b)在某处保留一个计数器节点并在运行中递增。计数器节点通常是这样做的方式,你正朝着正确的方向前进。