Php 一行中有多个项目?
使用MySQL+PHP,我想在MySQL数据库中为一家餐厅Php 一行中有多个项目?,php,mysql,Php,Mysql,使用MySQL+PHP,我想在MySQL数据库中为一家餐厅order存储几个food\u项目 我有两张桌子:订单和食品: 许多food\u item\u id将存储为单个订单 我只是想知道,在订单表中存储food\u item\u ids的最佳方法是什么 我应该将每个食品项目id存储在订单表的单独一行中,还是将特定订单的所有食品项目id放在一行中?如果您想要3NF(除非您发现性能有问题),您应该: 在food_item表的每一行中存储订单ID(如果food_items是每个订单表) 或者使用多
order
存储几个food\u项目
我有两张桌子:订单
和食品
:
许多food\u item\u id
将存储为单个订单
我只是想知道,在订单表中存储food\u item\u id
s的最佳方法是什么
我应该将每个食品项目id
存储在订单
表的单独一行中,还是将特定订单的所有食品项目id
放在一行中?如果您想要3NF(除非您发现性能有问题),您应该:
- 在food_item表的每一行中存储订单ID(如果food_items是每个订单表)李>
- 或者使用多对多关系(如果食物只是你可能点的东西)
对于第一个选项,类似这样的内容就足够了:
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
在我看来,所有的数据库表都应该设计成第三范式。一旦您的表变得如此之大,以至于性能可能成为一个问题(它必须非常大),那么您可以开始考虑对速度进行非规范化
对于一家餐厅来说,我无法想象订单和食物表会变得足够大以至于需要取消标准化。如果您想要3NF(除非您发现性能有问题,否则您应该这样做),您应该:
- 在food_item表的每一行中存储订单ID(如果food_items是每个订单表)李>
- 或者使用多对多关系(如果食物只是你可能点的东西)
对于第一个选项,类似这样的内容就足够了:
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
在我看来,所有的数据库表都应该设计成第三范式。一旦您的表变得如此之大,以至于性能可能成为一个问题(它必须非常大),那么您可以开始考虑对速度进行非规范化
对于一家餐厅,我无法想象订单和食品表会变得足够大,以至于需要取消规范化。如果每个食品项目对于特定订单是唯一的,那么您应该将订单ID存储在食品表中,然后您可以这样查询:
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
如果每个食品项目对于特定订单是唯一的,那么您应该将订单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