我在火车头/后端世界很新。我最近开始学习了。所以我决定做一个样本项目来学习。这个项目更像是职业简介,比如LinkedIn/Smartr。我很难决定如何构造我的数据库。
我使用角13在前端和火基(@角/火)作为后端。
所以我想要建立的项目非常简单。它将提供一些用户的基本信息,如firstName、lastName、age、title、location。这些是完成配置文件所必需的基本信息。
因此,在Firestore中,我创建了一个名为 user 的集合,其中每个用户都有一个由以下信息生成的文档id。
{
  age: 23,
  email: "demo.user@mail.com",
  firstName: "Demo",
  lastName: "User",
  title: "Engineer"
  location: "USA"
  uid: "232dsf23"
}该系统还将有一个认证系统。使用已经定义的防火墙身份验证系统。
因此,我保留的uid是我在用户注册后得到响应的id。我使用它作为Users 文档Id。
到目前为止我已经做了这件事。接下来,我想在我的演示项目中添加一个工作体验部分。
该功能将与我们在LinkedIn/Smartr.中看到的完全相同。用户一次只能添加/编辑一次使用模式/对话框的工作体验。
因此,我的问题是:
users集合的每个文档中包含一个新的对象属性workExperience。如果我在workExperience集合的文档中保留了一个名为users的新属性,那么如果我没有错,因为用户一次只能编辑/更新一个体验,那么我将需要一个带有每个体验的id。因此,由于firebase不支持自动增量id (据我所知),那么我应该如何处理它呢?work-experience的集合,在其中添加一个新的体验将为每个用户在该集合中创建一个新的文档,那么我将如何连接哪些体验与哪个用户相关?以及如何查询以获得预期的数据.我应该遵循哪种程序?如果你有其他的建议,我应该如何处理它,请建议。
发布于 2022-04-30 09:41:43
答案在很大程度上取决于您将如何在前端显示这些数据。
如果您计划在同一个屏幕上显示,、基本用户信息和工作体验,那么最好的方法是将工作体验添加到用户的Firestore文档中:只对此屏幕执行一个查询。
另一方面,如果您计划首先显示具有基本用户信息的屏幕,其中有一个链接/按钮来打开,另一个屏幕显示工作体验,那么将工作体验数据存储在另一个文档中是有意义的。只有当最终用户决定显示数据时,才会查询该数据。
为此,您可以有一个名为work-experience的“单独的集合”,对于每个用户来说,您可以使用userID作为工作体验Fi还原文档的ID (您可以很好地在不同的集合中重用相同的文档ID )。这样,查询特定用户的工作体验文档非常容易:只需交换查询中的集合名称即可。
- users (collection)
  - userId1 (doc)
  - userId2 (doc)
  ...
- work-experiences (collection)
  - userId1 (doc)
  - userId2 (doc)
  ...如果您计划增加一些与工作经验部分类似的部分,例如教育或业余爱好,您可以使用相同的方法。
- users (collection)
  - userId1 (doc)
  - userId2 (doc)
  ...
- work-experiences (collection)
  - userId1 (doc)
  - userId2 (doc)
  ...
- educations (collection)
  - userId1 (doc)
  - userId2 (doc)
  ...
- hobbies (collection)
  - userId1 (doc)
  - userId2 (doc)
  ...但另一种有趣的方法是为每个用户设置一个名为details-sections的子集合,您可以在其中使用固定的ID存储这些文档:
- users (collection)
  - userId1 (doc)
    - details-sections (sub-collection)
       - work-experience (doc)
       - education (doc)
       - hobbies (doc)
  - userId2 (doc)
    - details-sections (sub-collection)
       - work-experience (doc)
       - education (doc)
       - hobbies (doc)该数据模型的主要优点是很容易从Firebase控制台导航到用户的数据。从查询性能或成本角度来看,它与以前的数据模型完全相似。两种模型之间的安全规则略有不同,但没有任何实际影响在这两种模型之间的选择。
https://stackoverflow.com/questions/72066236
复制相似问题