mySQL数据库结构的两个示例,哪一个效率更高并保留了数据完整性?

时间:2018-12-10 17:43:37

标签: mysql database data-structures

我正在为一个小型博客创建一个mySQL数据库。该博客将包含不同类型的文章,例如“公共利益”,“ DIY”等。

我的问题是关于如何组织数据库结构的:我应该为文章创建一个表,为类型创建一个表,还是将两者连接的第三张表?还是我应该只创建前两个表并在articles表中添加一个字段,该字段指出类型表的ID号?

选项1:

CREATE TABLE articles(
    id int unsigned not null auto_increment primary key,
    title varchar(300) NULL,
    body TEXT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE articleType(
    id int unsigned not null auto_increment primary key,
    name char(200) NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `articleType` (`name`) VALUES
('public interest'),
('DIY')

CREATE TABLE articlesArticleType (
    ID int unsigned not null auto_increment primary key,
    typeID int not null,
    articleID int not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

选项2:

CREATE TABLE articles(
    id int unsigned not null auto_increment primary key,
    title varchar(300) NULL,
    body TEXT NULL,
    articleType int NOT NULL DEFAULT 1
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE articleType(
    id int unsigned not null auto_increment primary key,
    name char(200) NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `articleType` (`nombre`) VALUES
('public interest'),
('DIY')

在第二种情况下,我只需要两个表。哪种方法更有效并保留数据完整性?

1 个答案:

答案 0 :(得分:2)

首先,重要的是要确定2个表之间的关系基数-Articles and Types,因为它将影响表结构的选择。大致上有3个基数:

  1. One to One
  2. One to Many
  3. Many to Many

选项1将满足One to ManyMany to Many基数,而选项2将满足One to One基数。