MySQL关系和查询

时间:2014-11-22 19:51:35

标签: mysql sql

我有两张表restaurantsmeals。餐馆

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

用餐

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

我认为连接他们meal.restaurant.id。这是一个好方法还是更好地制作另一个(第三个)表并将它们连接到那里。

您能否向我询问当ID = 1的餐厅被选中时,该餐厅仅显示餐点。现在我想在meal_menu行中保留餐馆ID。

3 个答案:

答案 0 :(得分:2)

如果您认为一家餐馆有很多餐,一餐只有一家餐厅

然后你应该尝试餐馆餐桌

 `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表只包含外键引用餐厅表和餐桌

取决于你使用哪一个......你可以使用任何一个。它只是依赖于要求

答案 1 :(得分:1)

根据我对您的问题的理解,您应该将id restaurants字段作为主键,将meal_id字段meal字段作为引用该密钥的外键id字段。

答案 2 :(得分: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 演示