2009-07-03 2 views
1

MySQL + PHP를 사용하여 단일 레스토랑 order을 MySQL 데이터베이스에 여러 개 저장하고 싶습니다. orders & food_items :단일 MySQL 행에 여러 항목이 있습니까?

많은 food_item_ids는 하나의 order 저장됩니다

나는 두 개의 테이블이있다.

food_item_id을 orders_table에 저장하는 가장 좋은 방법은 무엇일까요?

food_item_idorders 테이블의 별도 행에 저장해야합니까? 아니면 특정 주문의 food_item_ids을 모두 한 행에 넣어야합니까? 당신이 (당신이하지 않는 한 때까지 성능이 문제가 찾아야한다) 3NF를 원하는 경우에

답변

6

, 당신은해야 하나 :

  • 저장합니다 food_item 테이블의 각 행에서 주문 ID (food_items은 당 경우 - 표);
  • 또는 many-to-many 관계를 사용하십시오 (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 

을 내 의견, 모두 데이터베이스 테이블은 세 번째 정규 형식으로 설계되어야합니다. 테이블이 너무 커지면 성능이 문제가 될 수 있습니다 (그리고 은 매우 일 것입니다), 속도를 줄이기 위해 생각을 시작할 수 있습니다.

레스토랑의 경우 주문 및 식료품 테이블이 정규화되지 않았 음을 알 수있을만큼 충분히 커질 것이라고 상상할 수 없습니다. 각 음식 항목이 특정 순서에 고유 한 경우

2

, 당신은 food_items 테이블의 주문 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 
관련 문제