Mysql关系数据库类别

时间:2014-05-30 05:37:02

标签: php mysql

我有两个表我正在尝试输入用户可以搜索类别的例如披萨,数据库将找到该类别中的所有餐馆。我最初的想法是使表类别中的类别字段的id成为与餐馆表类别字段匹配的主键。然而,我遇到的问题是只限制一家餐馆。什么是我要问的最佳配置。

餐厅餐桌

+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| idRestaurant | int(11)     | NO   | PRI | NULL    |       |
| Name         | varchar(45) | YES  |     | NULL    |       |
| Password     | varchar(45) | YES  |     | NULL    |       |
| Email        | varchar(45) | YES  |     | NULL    |       |
| Number       | varchar(45) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+

分类表

+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| idCategories | int(11)     | NO   | PRI | NULL    |       |
| Category     | varchar(45) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+

6 个答案:

答案 0 :(得分:1)

您需要另一个表来存储餐馆和类别之间的关系。这个新表应该有两个字段:

Restuarant_id, category_id

这样,您可以为属于餐厅的每个类别存储一行。

答案 1 :(得分:1)

具有与另一个(restaurants.category_id)的主要字段对应的一个表(categories.id)的外来ID密钥是实现1:N关系的常用方式。在这种情况下,你会说"餐馆属于一个类别"或者那个"类别有很多餐馆" (您可以经常从Rails开发人员那里听到这些术语。)

如果您希望能够将多个类别分配给餐馆,将多个餐馆分配到某个类别,则它是N:N关系("拥有并属于许多"),您需要第三个表,通常称为连接表或关系表。在原始表格中,您只需拥有各自的主要ID;新表将有两个外键来配置具有类别(restaurant_categories.restaurant_idrestaurant_categories.category_id)的餐馆。

答案 2 :(得分:1)

您正在寻找一个联合表格restaurant_categories,这将保持餐厅与多个类别的关系

restaurant_categories

+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id           | int(11)     | NO   | PRI | NULL    |       |
| idCategories | int(11)     | NO   |     | NULL    |       |
| idRestaurant | int(11)     | NO   |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+

通过这种方式,您可以为餐馆分配多个类别,并且对于搜索,您可以在表格中使用简单连接

select distinct r.* from Restaurants  r
join restaurant_categories rc on(r.idRestaurant = rc.idRestaurant )
join Categories c on (c.idCategories =rc.idCategories )
where c.Category ='pizza'

答案 3 :(得分:1)

How to define relationships between tables in an Access database

阅读本文。希望这会有所帮助。

答案 4 :(得分:1)

为什么不在表'餐厅'中添加字段categoryId?

你可以这样做:

SELECT idRestaurant FROM RestaurantTable WHERE categoryId = 1 

通过这种结构,如果你想按类别进行研究,你可以这样做:

SELECT r.Name FROM categories as c 
LEFT JOIN restaurants as r ON r.categoryId = c.idCategories 
WHERE c.Category LIKE '%Pizza%' 

答案 5 :(得分:1)

添加第三个表格RestaurantsCategories

+--------------+-------------+------+------------------------                               
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+------------------------                              
| idRestCat    | int(11)     | NO   | PRI | NULL    |       |
| idRestaurant | int(11)     | NO   |     |         |       |
| idCategories | int(11)     | NO   |     |         |       |      
+--------------+-------------+------+-----+---------+-------+