1

我即将为我们未来的网站制作一个(简单的?)搜索引擎,我想要一些关于问题的建议。

网站上的内容将有标签连接到它们,但我不知道如何以正确的方式存储它们。为简单起见,1 个标题带有多个标签。我有两个解决方案,我想从你那里得到更好的解决方案,或者说另一种解决方案;)

  1. 将标题存储在一个表中,将标签存储在另一个表中。然后每个标签都有一个titleId。当用户搜索某物时,数据库会在两个表中搜索并同时返回结果。+ 更少的数据存储。- 在多个表中搜索

  2. 将标题存储在一个表中,将标签存储在另一个表中。虽然每个标题都有一个与标题同名的标签。这样,数据库只需在一个表中进行搜索。

    • 只需要在一张表中搜索。- 更多数据要存储。

我说“性能就是一切”,但你怎么看?

4

1 回答 1

1

您想要做的是使用多对多关系。可行的方法是您将使用连接表。这是我的设置方式

create table page (
  id int(11) not null auto_increment,
  title varchar(128)
  ...
) engine = innodb;

create table tag (
  id int(11) not null auto_increment,
  tag_name varchar(128)
) engine = innodb;

create table page_tag (
 id int(11) not null auto_increment,
 tag_id int(11) not null,
 page_id int(11) not null,
 foreign key(tag_id) references tag(id),
 foreign key(page_id) references page(id),
 unique key(tag_id, page_id)
) engine=innodb;

确保对这些使用 innodb 表来强制引用完整性。如果您需要全文搜索,请添加一个基本上复制您的标记表的附加 myISAM 表。page_tag 中的唯一键可防止其中的重复条目,并使该表上的连接更快。

我还说你应该选择#2。这样你每次都在搜索一个表,这可能更容易处理。

于 2012-07-17T21:57:26.120 回答