博客项目 MySQL 数据库设计问题


Bloggish Project MySQL Database Design Issues

我不是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 个字段:

  1. id_post
  2. id_category

然后,您可以使用帖子及其相关类别填充此表:

id_post  | id_category
7        | 2
7        | 3
4        | 2
...