我需要在多个类别中添加文章 例如,我有文章名称'测试文章'需要将其添加到类别1和类别2 需要知道如何在这个
的表之间建立关系注意:在过去我在文章数据库表名称'category'中添加行并添加类别ID,如1,2,3但这会在搜索和列表中产生问题请帮我解决这个问题
答案 0 :(得分:6)
您需要三张桌子:
articles
categories
categories_per_article
。此表通常称为Junction table or a Association table。示例数据:
ARTICLES
ID | Name | Description
1 | Fuzz | A fuzzy three
2 | Bizz | A five that means bizznezz
CATEGORIES
ID | Name
1 | Prime numbers
2 | Multiples of five
3 | Smaller than four
CATEGORIES_PER_ARTICLE
ID | ARTICLE_ID | CATEGORY_ID
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
你会看到第1条(Fuzz)有三个类别,第2条(Bizz)只有类别1.我们称之为many-to-many relationship(或者n到n,例如在ER或UML中) ),因为第1条有多个类别,而第1类由多篇文章使用。
您可以使用此架构执行所有可能的查询 - 随意在评论中询问特定示例(例如How do I get all articles which have categories 1 and 3 but not 2
)。
答案 1 :(得分:1)
文章与类别之间的联系是一种n对n的关系 一篇文章可以属于多个类别,一个类别可以附加到多篇文章。
因为SQL不直接支持n对n关系,所以需要一个链接表。
Table article_cats
------------------
cat_id integer,
article_id integer,
primary key (cat_id, article_id)
然后您可以链接文章:
SELECT a.name, GROUP_CONCAT(c.name) as cats
FROM articles a
LEFT JOIN article_cats ac ON (a.id = ac.article_id)
LEFT JOIN cats c ON (c.id = ac.cat_id)
GROUP BY a.id
答案 2 :(得分:0)
这里有多对多的关系:文章可以有多个类别,而类别显然可以包含多个文章。如果没有至少一个明确存储实体之间关联的表,则无法正确表示。