Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Bloggish项目MySQL数据库设计问题_Php_Mysql_Database - Fatal编程技术网

Php Bloggish项目MySQL数据库设计问题

Php Bloggish项目MySQL数据库设计问题,php,mysql,database,Php,Mysql,Database,我不是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

我不是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的列,因为肯定有更好的方法。但是,我不知道。解决此问题的最佳方法是什么?

您需要一个N:N关系,这意味着第三个表

表post_类别,包含两个字段:

  • 身份证邮寄
  • 身份证类别
  • 然后,您可以用帖子及其相关类别填写此表:

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

    如果我理解正确,您需要两个表之间的多对多关系。要实现这一点,必须使用一个中间表,如下所示

    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)
    );