2014-11-22 2 views
0

두 개의 테이블 restaurantsmeals이 있습니다. 레스토랑은MySQL 관계 및 쿼리

`id` 
`name` 
`menu` 
`image` 
`text` 
`address` 

식사를 가지고 내가 그들을 meal.restaurant.id를 연결하는 생각은 무엇

`meal_id` 
`meal_name` 
`meal_image` 
`meal_weight` 
`meal_price` 
`meal_menu` 

있습니다. 좋은 접근 방법인가 아니면 다른 (세 번째) 테이블을 만들어 거기에 연결하는 것이 더 낫습니다.

ID가 1 인 식당을 선택했을 때이 식당에서만 식사를 표시하는 방법에 대한 질문을 제게 제공해 줄 수 있습니까? 당분간은 식당 번호를 meal_menu 행으로 잡는 것이 좋을 것 같습니다.

답변

1

예 : 피벗 테이블 만들기 이제

CREATE TABLE meal_restaurant 
(
    meal_id int not null, 
    restaurant_id int not null, 
    primary key (meal_id, restaurant_id), 
    foreign key (meal_id) references meals (meal_id), 
    foreign key (restaurant_id) references restaurants (id) 
); 

은 특정 식당의 모든 음식을 선택하면 다음
SELECT m.meal_id, meal_name, meal_image, meal_weight, meal_price 
    FROM meals m JOIN meal_restaurant mr 
    ON m.meal_id = mr.meal_id 
WHERE restaurant_id = 1 

SQLFiddle 데모

+0

그래서 하나 이상의 테이블에 meal_id와 restaurant_id가 저장됩니다. –

+0

하나 이상의 테이블을 사용하면 어떤 경우에도 'meal.menu' 행이 필요하지 않습니다. 이 분야에 대한 제 아이디어는 레스토랑 ID와 연결하는 것이 었습니다. 거기서 어떤 데이터도 사용하지 않습니다. –

+0

@JordanVit 확인. 그런 다음이 '메뉴'열을 제거하면 잘됩니다. 행운을 빕니다. – peterm

1

이 문제에 대한 이해를 바탕으로, 당신은 restaurants 기본 키의 id 필드와 mealid 필드를 참조하는 외래 키의 meal_id 필드를해야한다.

+0

아니요, 식사 표에 2 곳의 레스토랑에 대해 모든 식사를 개최 할 예정이므로 아니요. 그래서 ID를 통해 선택할 수 없습니다. 나는'restaurant.id'에 대한'id' 기본 및'meal_menu' 외래 키를 만들었습니다 –

+0

나는 그때를 잘 모르겠다. 식당과 식사를 연결하고 싶지만 ID로 식사를 선택할 수는 없습니까? – user1849060

+0

테이블'식사 '는 모든 식사를 개최합니다. 'meals_menu' 행은 1과 2가 레스토랑 인 '1'또는 '2'를 포함합니다.그래서 나는 식당 1 (id = 1)을 선택했을 때'meal.menu = 1'을 가진 모든 식사를 보여줄 쿼리가 필요합니다. 나는 지금 조금 분명해지기를 바래요, 아니면 모든 개념에서 틀렸습니까? –

3

하나 개 레스토랑이 많은 식사를 가지고 있다고 생각하면 하나의 식사가있다 할 단 하나의 레스토랑

다음 restauran을 시도해야합니다 TS 테이블

`id` 
`name` 
`menu` 
`image` 
`text` 
`address` 

식사 테이블

`meal_id` 
    `meal_name` 
    `meal_image` 
    `meal_weight` 
    `meal_price` 
    `meal_menu 
    `restaurant_id` 

아니면 하나 개의 레스토랑이 많은 식사를 가지고 있다고 생각하고 한 끼가 많은 레스토랑이있는 경우

다음 시도해야 레스토랑 테이블

`id` 
`name` 
`menu` 
`image` 
`text` 
`address` 

식사 테이블

`meal_id` 
    `meal_name` 
    `meal_image` 
    `meal_weight` 
    `meal_price` 
    `meal_menu 

및 restaurant_meal

`restaurant_id` 
    `meal_id` 

restaurant_meal 테이블 만 사용 하나 외래 키 참조 레스토랑 테이블과 식사 테이블 당신에게

그것을를 포함 ... 당신은 어떤 one.it을 사용할 수 있습니다 요구 사항에 따라 달라집니다.

+1

'한 식당에는 많은 식사가 있고 한 식사에는 오직 한 식당 만 있습니다.' –