我不是MySQL最伟大的。这是我的第一个在很大程度上使用它的项目。这个想法是,我正在设计一个系统,可以接受博客类型的文章,并将标签与它相关联(在我的代码中,我将标签称为类别)。这是MySQL:
CREATE TABLE tb_categories
(
category_id int(4) unsigned NOT NULL auto_increment,
category_name varchar(50) NOT NULL,
is_service tinyint(1) NOT NULL,
PRIMARY KEY (category_id),
UNIQUE (category_name),
);
CREATE TABLE tb_blog_entries
(
blog_entry_id bigint(10) unsigned NOT NULL auto_increment,
blog_entry_title varchar(255) NOT NULL,
blog_entry_subtitle varchar(255) NOT NULL,
date_created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
blog_entry_content TEXT NOT NULL,
author varchar(255) NOT NULL,
publish_anonymously tinyint(1) NOT NULL,
PRIMARY KEY (blog_entry_id)
);
我的问题是,我需要将所选的一个或多个类别映射到每篇博客文章。我不想在包含所有类别ID的博客条目表中添加类似csv的列,因为肯定会有更好的方法。但是,我不知道。解决此问题的最佳方法是什么?
如果我理解正确,您希望两个表之间存在多对多关系。要实现这一点,你必须使用一个中间表,像这样。
CREATE TABLE tb_blog_entries_categories
(
blog_entry_id bigint(10) unsigned NOT NULL,
category_id int(4) unsigned NOT NULL,
PRIMARY KEY(blog_entry_id,category_id),
FOREIGN KEY (blog_entry_id) REFERENCES tb_blog_entries(blog_entry_id),
FOREIGN KEY (category_id) REFERENCES tb_categories(category_id)
);
你需要一个 N:N 关系,这意味着第三个表。
表 post_categories,包含 2 个字段:
- id_post
- id_category
然后,您可以使用帖子及其相关类别填充此表:
id_post | id_category
7 | 2
7 | 3
4 | 2
...