Php 一行中有多个项目?

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是每个订单表) 或者使用多

使用MySQL+PHP,我想在MySQL数据库中为一家餐厅
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