如何建立一对多关系,以便一篇博客文章可以具有多个类别

时间:2019-05-08 11:03:29

标签: mysql database database-design

我正在构建类似WordPress的CMS。我希望能够为博客文章分配多个类别。

我的表如下所示:

Article:
-id
-title
-author
-user_id
-date
-resource link
-content
-status
-featured_image

Categories:
-id
-name

我知道如何设计它,以便博客帖子可以具有一个类别,但没有很多。

2 个答案:

答案 0 :(得分:0)

您可以这样设计数据库。 通过该架构,您可以分配多个类别并添加可以单独跟踪的多个图像。

Logical model of the SQL

CREATE TABLE BlogPost
(
    blogPostNr INT NOT NULL,
    author CHAR(40) NOT NULL,
    categoryNr INT NOT NULL,
    `date` DATETIME NOT NULL,
    status CHAR(5) NOT NULL,
    text VARCHAR(2000) NOT NULL,
    title CHAR(100) NOT NULL,
    userId SMALLINT NOT NULL,
    CONSTRAINT BlogPost_PK PRIMARY KEY(blogPostNr)
);

CREATE TABLE Image
(
    imageNr INT NOT NULL,
    description CHAR(200) NOT NULL,
    picture LONGBLOB NOT NULL,
    source CHAR(60) NOT NULL,
    CONSTRAINT Image_PK PRIMARY KEY(imageNr)
);

CREATE TABLE BlogPostHasImage
(
    blogPostNr INT NOT NULL,
    imageNr INT NOT NULL,
    CONSTRAINT BlogPostHasImage_PK PRIMARY KEY(blogPostNr, imageNr)
);

CREATE TABLE Category
(
    categoryNr INT NOT NULL,
    categoryName CHAR(20) NOT NULL,
    CONSTRAINT Category_PK PRIMARY KEY(categoryNr)
);

ALTER TABLE BlogPost ADD CONSTRAINT BlogPost_FK FOREIGN KEY (categoryNr) REFERENCES Category (categoryNr) ON DELETE RESTRICT ON UPDATE RESTRICT;

ALTER TABLE BlogPostHasImage ADD CONSTRAINT BlogPostHasImage_FK1 FOREIGN KEY (blogPostNr) REFERENCES BlogPost (blogPostNr) ON DELETE RESTRICT ON UPDATE RESTRICT;

ALTER TABLE BlogPostHasImage ADD CONSTRAINT BlogPostHasImage_FK2 FOREIGN KEY (imageNr) REFERENCES Image (imageNr) ON DELETE RESTRICT ON UPDATE RESTRICT;

答案 1 :(得分:0)

不是1:1,而是many:many,因为类别也可以与许多Articles关联。

有一个包含两列article_idcategory_id的“映射”表。请参见this,以获取有关将其编入索引的提示。