餐厅提供自助餐。和自助餐有不同的点差。我想在自助餐上的每道菜上启用照片和评论。不确定哪种是将它们存储在数据库中的最佳方法

我做了什么 ?

我有一个餐厅Db,用于存储REst的常规信息。
存放数据库的菜品数据库。每道菜都被重新映射到“开胃菜”,“饮料”,“主菜”等类别。

现在如何以正常方式将菜品存储为餐厅自助餐的一部分。

最佳答案

您需要一个带有唯一主键REST_ID和其他餐厅属性(例如名称和位置,厨师名称)的餐厅表

您需要一个带有主键(REST_ID,BUFFET_ID)以及其他Buffet属性(例如名称)的Buffet表(例如“ Salad Bar”,“ Smorgasbord”或“ Sweets”。)

您需要一个带有主键(REST_ID,BUFFET_ID,DISH_ID)和其他属性(例如名称)(“土豆沙拉”,“黄油南”)的菜品表

您需要具有主键(REST_ID,BUFFET_ID,DISH_ID,PHOTO_ID)和其他属性(例如,照片本身的路径名或Blob)以及标题的Photos表。

您需要一个带有主键(REST_ID,BUFFET_ID,DISH_ID,REVIEW_ID)的评论表。

请注意,此数据模型中有一个设计选择:同一道菜不可能出现在两个不同的自助餐中。同一自助餐不可能出现在两家不同的餐厅中。也就是说,数据是严格分层的:

One restaurant: zero, one, or more buffets
One buffet: zero, one or more dishes
One dish: zero, one or more photos
One dish: zero, one or more reviews


这对于审阅应用程序很有意义。如果您在餐厅A的鸡蛋沙拉中食物中毒,那么对餐厅的负面评价就不会出现在餐厅B中。

这是每个表的一些示例行。

餐厅(REST_ID,姓名,厨师)

1 "McDonalds" Ronald
2 "Julia's Place" Julia
3 "Ritz Carlton Dining Room" Jack


自助餐(REST_ID,BUFFET_ID,名称)

2 1 "Soup Bar"   (this is the soup bar at Julia's place)
2 2 "Salad Bar"  (the salad bar at Julia's place)
3 1 "Cold Breakfast"  (the cold breakfast bar at the hotel dining room)
3 2 "Sweets"  ( the dessert bar at the hotel dining room)


菜式:(REST_ID,BUFFET_ID,DISH_ID,名称和类别)

2 1 1 "Minestrone" "Soup"
2 1 2 "French Onion" "Soup"
2 1 3 "Vegetarian Barley" "Soup"
2 1 4 "Saltines" "Crackers"
3 1 1 "Melon" "Fruit"
3 1 2 "Strawberry" "Fruit"
3 1 3 "Blueberry Muffin" "Bread"
3 1 4 "Multigrain Bread" "Bread"
3 1 5 "Corn Flakes" "Cereal"
3 1 6 "Orange Juice" "Drink"
3 1 7 "Milk" "Drink"


等等

09-25 16:11