使用MySQL + PHP,我想在MySQL数据库中为单个餐馆food_item
存储几个order
。
我有两张桌子:orders
& food_items
:
将为单个food_item_ids
存储多个order
。
我只是想知道,将food_item_id
存储在orders_table中的最佳方法是什么?
我应该将每个food_item_id
存储在orders
表格的单独一行中,还是将所有特定订单的food_item_ids
放入一行?
答案 0 :(得分:6)
如果您想要3NF(除非您发现性能有问题,否则您应该这样做),您应该:
使用第一个选项,这样就足够了:
Orders:
order_id
other stuff
FoodItems:
order_id
item_id
other stuff.
对于第二个选项,单独的表提供了多对多关系:
Orders:
order_id
other stuff
FoodItems:
item_id
other stuff.
FoodItemsInOrder:
order_id
item_id
count
在我看来,所有数据库表应该以第三范式设计。一旦你的表变得如此之大以至于性能可能成为一个问题(它必须非常大),那么你就可以开始考虑对速度进行去标准化。
对于一家餐馆来说,我无法想象订单和食品项目表的大小足以保证去标准化。
答案 1 :(得分:2)
如果每个食品对特定订单都是唯一的,那么您应该将订单ID存储在food_items表中,然后您可以这样查询:
SELECT orders.id, food.id
FROM orders
INNER JOIN food ON orders.id = food.order_id
但是,如果您有标准食品,例如“汉堡”,“筹码”,“热狗”那么你应该使用三张桌子。一个用于订单,一个用于食品,一个用于加入两个:
SELECT orders.id, food.id
FROM orders
INNER JOIN orders_food ON orders.id = orders_food.order_id
INNER JOIN food ON orders_food.food_id = food.id