首页 > 解决方案 > Firestore 食品订购应用程序数据库设计问题

问题描述

我正在开发一个 Flutter 应用程序,该应用程序基本上允许用户向餐馆下订单,然后去取这些订单。

一家餐厅有一个 MenuGroups 列表,每个组都有一个 ExtraIngredients 列表和 MenuItems 列表。

MenuItem 有几个不同价格的变体,还有该项目附带的成分列表和可以添加的 ExtraIngridients。

目前,在firestore 中,我有一个名为restaurants 的集合,每个餐厅都有一个MenuGroups 列表。有没有办法让这更有效

例如,将 menuGroups 作为文档中的子集合是否更好?

防火设计

还要实现一个订单队列编号系统(第一个订单从 1 开始到 99 然后回到 1)

将其存储在餐厅文档中的变量中是否更好(每当有新订单时,将读取 1 次以获取当前数字,而不是 1 次写入以增加该数字,并且在达到 99 后将其设置回 1)

或在订单文档本身中(现在每个订单都有一个额外的字段 1 读取以获取最后一个订单的编号,并且新订单将全部写入,因此仅针对队列编号没有额外的写入操作)

标签: firebasefluttergoogle-cloud-firestorenosql

解决方案


没有确定的方法来回答这个问题。但是我会说一些规则来有效地解决这个问题。

  1. 如果要一起显示,请将数据放在同一个文档中。(不要太大,也不要太小)
  2. 将数据放入集合中,当您想要搜索该数据的单个部分时,或者您有一个数据库要增长。
  3. map如果要根据该数据搜索参数,请使用。
  4. map如果您想存储相关数据(如用户的送货地址),请使用。
  5. 文档写入不计入您写入的数据,无论您将订单计数器值增加 1,还是更改整个文档,都将计为一次写入。

推荐阅读