【问题标题】:Firestore Food-Ordering Application Database Design QuestionsFirestore 食品订购应用程序数据库设计问题
【发布时间】:2020-06-29 18:51:31
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: firebase flutter google-cloud-firestore nosql


    【解决方案1】:

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

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

    【讨论】:

    • 所以为了实现订单号,我想把 orderNumber 字段放在订单集合中,这样每个订单文档都有一个从 1 开始到 99 的字段,但是每当有新订单到达时,我需要找出最后一个订单号是什么,我现在能想到的最好方法是查看所有订单并找到该餐厅的最新订单。有没有更好的方法来处理这个?
    • 取决于您如何构建数据库。如果这是您不想在客户端执行的服务器操作,请考虑使用云功能。
    • 您可以发布您如何构建 Orders 集合,然后只有我可以提出一些建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    相关资源
    最近更新 更多