Firebase 中的最佳实践数据设计

best practice data design in firebase

我如何为以下场景构建数据?

有一个名为 Food Ordering System 的应用程序。它包含

用户名(谁在注册这家餐厅的在线订单菜单)

Restaurant_name

描述

地点

预计交货时间

菜单(一家餐厅有多个菜单)

我的设计

  "restaurant":{
    "username":{
        "restaurant_name":"KFC Restaurant",
        "description":"short description on restaurant",
        "estimated delivery":"1hour/km",
        "distance":"20km away",
        "location":"Kathmandu",
        "rating":"rating star up to 5",
        "menus":{
            "menu":{
                "item":"buff momo",
                "price":"",
                "rating":"rating star up to 5"
                },
            "menu":{
                "item":"Fried Chicken",
                "price":"",
                "rating":"rating star up to 5"
            },
            "menu":{
                "item":"BBQ",
                "price":"",
                "rating":"rating star up to 5"
            }
        }
    }

}

我的设计是最佳实践设计吗?

这实际上取决于你想用这些数据做什么。

如果您希望在您的网站中显示所有餐厅的列表,并且当您单击餐厅时显示他们提供的菜单列表,那么将菜单存储在餐厅内可能不是一个好主意。

因为根据文档:

When we read a data node in our Firebase database, we also retrieve all of its children!

(旧的)https://www.firebase.com/docs/rest/guide/structuring-data.html#section-denormalizing-data

此外,想象一下,如果您想做一个搜索栏并查找菜单(例如鸡块)和return提供此服务的餐厅列表,我会这样设计您的数据库:

"restaurant":{
"$username":{
    "restaurant_name":"KFC Restaurant",
    "description":"short description on restaurant",
    "estimated delivery":"1hour/km",
    "distance":"20km away",
    "location":"Kathmandu",
    "rating":"rating star up to 5",
    ...
  }
}

"menus":{
  "$username" : {
        "menu":{
            "item":"buff momo",
            "price":"",
            "rating":"rating star up to 5"
            },
        "menu":{
            "item":"Fried Chicken",
            "price":"",
            "rating":"rating star up to 5"
        },
        "menu":{
            "item":"BBQ",
            "price":"",
            "rating":"rating star up to 5"
        }
    }
}