firebase - Firestore 食品订购应用程序数据库设计问题
问题描述
我正在开发一个 Flutter 应用程序,该应用程序基本上允许用户向餐馆下订单,然后去取这些订单。
一家餐厅有一个 MenuGroups 列表,每个组都有一个 ExtraIngredients 列表和 MenuItems 列表。
MenuItem 有几个不同价格的变体,还有该项目附带的成分列表和可以添加的 ExtraIngridients。
目前,在firestore 中,我有一个名为restaurants 的集合,每个餐厅都有一个MenuGroups 列表。有没有办法让这更有效
例如,将 menuGroups 作为文档中的子集合是否更好?
还要实现一个订单队列编号系统(第一个订单从 1 开始到 99 然后回到 1)
将其存储在餐厅文档中的变量中是否更好(每当有新订单时,将读取 1 次以获取当前数字,而不是 1 次写入以增加该数字,并且在达到 99 后将其设置回 1)
或在订单文档本身中(现在每个订单都有一个额外的字段 1 读取以获取最后一个订单的编号,并且新订单将全部写入,因此仅针对队列编号没有额外的写入操作)
解决方案
没有确定的方法来回答这个问题。但是我会说一些规则来有效地解决这个问题。
- 如果要一起显示,请将数据放在同一个文档中。(不要太大,也不要太小)
- 将数据放入集合中,当您想要搜索该数据的单个部分时,或者您有一个数据库要增长。
map
如果要根据该数据搜索参数,请使用。map
如果您想存储相关数据(如用户的送货地址),请使用。- 文档写入不计入您写入的数据,无论您将订单计数器值增加 1,还是更改整个文档,都将计为一次写入。
推荐阅读
- angular - 用于嵌套数组的 RXJS 运算符
- java - 发布json时android studio应用程序不断停止
- docker - 从二进制文件创建 RPM 包不会将文件打包到存档中
- ajax - CORS 在某些目录上被阻止,但在其他目录上没有
- excel - 我如何循环两次之间的所有分钟?
- amazon-web-services - Lambda 触发器无法按预期处理批量数据
- node.js - ESP8266 模块发布消息,但订阅者没有通过 MQTT 获得任何信息
- java - java中的颜色渐变
- antd - 反应蚂蚁设计打字稿表单验证不起作用
- python - 同时在不同包中执行多个方法的更快方法