如何设计Cloud Firestore数据库架构

问题描述 投票:6回答:2

从实时数据库迁移到云Firestore需要对数据库进行全面重新设计。为此,我创建了一个包含一些主要设计决策的示例。请参阅下面的电子表格中的图片和数据库设计。我的两个问题是:

1 - 当我有一对多的关系时,它也可以选择将信息作为数组存储在文档中吗?见数据库设计中的第8行。

2 - 我是否应仅包含引用,或复制一对多关系中的所有信息。请参见数据库模型中的第38行。

enter image description here

https://docs.google.com/spreadsheets/d/13KtzSwR67-6TQ3V9X73HGsI2EQDG9FA8WMN9CCHKq48/edit?usp=sharing

firebase google-cloud-firestore
2个回答
3
投票

对于问题1,在firestore文档中有一个解决方案:https://cloud.google.com/firestore/docs/solutions/arrays

而不是使用数组,您使用值的映射并将它们设置为'true',允许您查询它们,如下所示:

teachers: {
        "teacherid1": true,
        "teacherid2": true,
        "teacherid3": true
    }

对于问题2,您只需要保存教师ID,因为如果您有教师ID,您可以轻松查询相应的数据。


0
投票

通常:使数据存储尽可能浅,即避免子集和嵌套。

数据可以是一对一,一对多或多对多相关。 Firestore是一个automatically indexed实时数据存储区。 Firestore通常订阅而不仅仅是一次性查询/响应(系统的实时性)。

关于Firestore数据模型,请始终考虑如何查询此数据存储?谨慎地(很少)使用子集合,数组和映射,并且只有在必要时(并且您很可能不需要)。使用自动ID与人类可读ID,例如使用000kztLDGafF4uKb8Cal而不是banana作为文档ID。

随着应用程序功能的增加,使用Cloud Functions for Firebase和/或Admin SDK的服务器端脚本成为管理(创建和索引)多对多数据关系的宝贵工具。例如,Firestore不支持全文搜索。这归结为在您的应用上实施强大搜索功能似乎是一个障碍。

总之,请尝试避免子集,嵌套,数组和映射。遵循保持简单的愚蠢,KISS,原则。一旦您的应用扩展和/或需要更多功能,服务器端脚本可用于保持您的应用响应(快速),同时提供强大的功能。

© www.soinside.com 2019 - 2024. All rights reserved.