You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Firebase中搭建类似SQL的三表关联数据存储结构?

Firebase Firestore 结构实现方案

首先先明确Firebase常用的Cloud Firestore和传统SQL数据库的核心差异,帮你快速理解逻辑:

  • SQL中的表对应Firestore的集合(Collection)
  • SQL中的行记录对应Firestore的文档(Document)
  • Firestore没有原生外键约束,关联关系靠业务代码维护,只要在文档中存储关联的ID字段即可
  • 文档主键默认是Firebase自动生成的字符串ID,你可以手动指定为需求里的int类型数值作为文档ID

1. 人员集合(对应你需求的第一个Person表)

集合命名建议为 persons,每个文档的ID直接设置为你要求的Person_ID(int类型数值),文档内部字段如下:

  • rate:数字类型(Firestore数字类型原生兼容double精度)
  • name:字符串类型
  • surname:字符串类型

参考数据示例:

{
  "rate": 22.5,
  "name": "明",
  "surname": "李"
}

2. 支出集合(对应你需求的第二个spese表)

集合命名建议为 expenses,每个文档的ID直接设置为你要求的id_spese(int类型数值),文档内部字段如下:

  • amount:数字类型(兼容Double精度)
  • DateSpesa:时间戳类型(优先用Firestore原生时间类型,比存字符串更方便做时间范围查询)
  • TipoSpesa:字符串类型
  • Person_ID:数字类型(存储关联的人员ID,对应persons集合的文档ID)

参考数据示例:

{
  "amount": 159.9,
  "DateSpesa": 2024-06-10T13:30:00Z,
  "TipoSpesa": "交通",
  "Person_ID": 1
}

3. 行程集合(对应你需求的第三个Travel表)

集合命名建议为 travels,每个文档的ID直接设置为你要求的Travel_ID(int类型数值),文档内部字段如下:

  • delivered:布尔类型
  • urgent:布尔类型
  • Person_ID:字符串类型(存储对应人员ID的字符串格式,关联persons集合的文档ID即可)
  • KM_routes:数字类型(注意字段名不要带空格,避免查询时报语法错误,建议统一用下划线命名)

参考数据示例:

{
  "delivered": true,
  "urgent": false,
  "Person_ID": "1",
  "KM_routes": 87
}
常用操作提示
  • 要查询某个人的所有支出/行程,直接对expenses/travels集合执行where("Person_ID", "==", 目标人员ID)的条件查询即可
  • Firestore没有强制外键校验,删除人员文档时,关联的支出/行程文档需要你手动写业务代码删除,也可以搭配Firebase Cloud Function触发自动清理
  • 所有字段名建议不要带空格、特殊符号,优先用驼峰或下划线命名,避免后续查询出现异常

内容的提问来源于stack exchange,提问作者Ra1Ca7 eM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 04:45:07