如何创建一个数据库列出自助餐厅系统?

时间:2010-09-25 10:07:38

标签: mysql database-design relational-database

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

我做了什么?

我有一个餐厅Db,存储了REst的一般信息。 菜肴DB存储Resturants的菜肴。每个菜肴再次映射到类别,如初学者,饮料,主菜。

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

1 个答案:

答案 0 :(得分:1)

您需要一张餐桌,其中包含唯一的主键REST_ID和其他餐厅属性(如姓名和地点,厨师姓名)

您需要一个包含主键(REST_ID,BUFFET_ID)和其他自助属性的自助餐表,例如名称(例如“沙拉吧”,“Smorgasbord”或“糖果”)。

你需要一个带有主键(REST_ID,BUFFET_ID,DISH_ID)的Dish表和其他属性,如名称(“Potato Salad”,“Buttered Nan”)

您需要一张包含主键(REST_ID,BUFFET_ID,DISH_ID,PHOTO_ID)和其他属性的照片表,例如照片本身的路径名或blob以及标题。

您需要一个包含主键的评论表(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"