首页 > 解决方案 > 如何确定我需要使用集合还是子集合?

问题描述

我的应用程序有 2 种类型的用户 -企业客户。每个企业都有一条线路用户可以进入。

  1. 我不确定是否最好为每个带有customerId的业务创建一个名为“ tickets ”的子集合,或者使用相应的customerIdbusinessId创建一个单独的集合“tickets” 。我认为我永远不需要一次选择所有门票的机会。但我确信我会有一个仪表板,我希望客户在其中查看所有可用线路并查看那里有多少人。

  2. 就像我说的,我有两种类型的用户——客户企业,他们的个人资料信息可能会有所不同。所以,我想将它们分开而不是像userType这样的字段更好,对吧?

我将附上我创建的粗略架构,以更好地了解我需要存储哪些数据。

在此处输入图像描述

标签: firebasegoogle-cloud-firestore

解决方案


这取决于你如何喜欢它。如果您采用第一种方法,即创建一个专用集合来添加票证,那么我假设您的文档的一部分看起来像:

{
  customerID: "customerID",
  businessID: "businessID",
  customerType: "typeOfCustomer",
  createdAt: 1624178545493
}

这样做的好处是您可以创建各种查询,例如获取特定客户、业务或用户类型的票证或特定时间段内的票证。

在它自己的子集合中添加特定业务的工单看起来很有条理,但是如果您想查询特定用户的所有工单并且该用户在多个业务中拥有工单,那就更难了。您可能必须存储用户已打开票证的企业 ID。

在我看来,从长远来看,一个专门的集合可以为您提供灵活的查询。

您可以使用以下安全规则,以便用户只能看到他/她的票证。

service cloud.firestore {
  match /databases/{database}/documents {
    match /tickets/{ticketID} {
      allow read: if request.auth != null && resource.data.userID == request.auth.uid;
    }
  }
}

同样,您可以轻松地为企业和其他文档编写规则。您可以在此处阅读有关 Firestore 安全规则的更多信息


推荐阅读