【发布时间】:2016-12-16 13:47:18
【问题描述】:
我知道这个问题可能被视为基于意见的问题,但我认为值得讨论正确构建数据库的方法。我在 Swift 中开发 iOS 应用程序并决定使用 firebase 作为我的后端服务
让我们从应用描述开始
该应用旨在为图书阅读体验提供跟踪和社交功能,以及创建图书数据库。用户添加书籍,填写书名、作者、语言、页数等基本信息。接下来,这本书在应用程序的列表中可见,用户可以轻松访问书籍信息并保存他/她最近在哪个页面上的信息结束阅读。一本书被标记为已读后,用户获得经验值和徽章。最终,用户将能够浏览朋友的成就、创建排行榜等。
这是我对数据库结构的想法:
Users:
user_id:121jhg12h12
email: "john@doe.com"
name: "John Doe"
profile_pic_path: "https://...".
language: "en"
exp_points: 1284
friends: [user_id]
books: [[book_id, status, current_page, start_date, finish_date]]
badges: [[badge_id, get_date]]
Books:
book_id: 3213jhg21
title: "For whom the bell tolls"
author: "Ernest Hemingway"
language: "en"
pages_count: 690
ISBN: "21hjg1"
year: 2007
Badges:
badge_id:213hg12
name: "Great reader!"
image_path: "https://...".
我使用了填充一些虚拟数据的伪代码而不是 JSON 格式,以使其更具可读性,如果我失败了,请告诉我。
我希望通过提出这个问题来获得明确的答案,如果我的方法是正确的,或者我应该更改数据库结构中的某些内容以磨练未来的可扩展性和总体性能。
请注意,我知道这个问题可能被认为更适合代码审查论坛,但如您所知,很少有人在那里回答,尤其是在像 firebase 数据库结构这样狭窄的话题中。
提前致谢
【问题讨论】:
-
不可能对具有完整用例集的数据建模请求给出简短的回答。如果您担心特定的用例,我们可能会提供更好的帮助。推荐阅读:NoSQL data modeling.
-
感谢您的阅读!但是,正如我非常详细地描述了我的应用程序和用例一样,也许您可以判断我通过 id 从用户个人资料中访问书籍和徽章的想法通常是好还是坏?我相信有一种方法可以为我提供的上下文提供答案
标签: ios swift firebase firebase-realtime-database nosql