1

私は将来のウェブサイトに(単純な?)検索エンジンを作ろうとしています。質問についてアドバイスをお願いします。

ウェブサイトのコンテンツにはタグが接続されていますが、正しい方法で保存する方法がわかりません。簡単にするために、複数のタグが付いた1つのタイトル。私には2つの解決策がありますが、どちらが優れているか、または別の解決策を言ってください;)

  1. タイトルを1つのテーブルに保存し、タグを別のテーブルに保存します。各タグにはtitleIdがあります。ユーザーが何かを検索すると、データベースは2つのテーブルを検索し、結果を同時に返します。+保存するデータが少なくなります。-複数のテーブルを検索する

  2. タイトルを1つのテーブルに保存し、タグを別のテーブルに保存します。各タイトルには、タイトルと同じ名前のタグが付いていますが。そうすれば、データベースは1つのテーブルを検索するだけで済みます。

    • 1つのテーブルで検索するだけです。-保存するデータが増えました。

「パフォーマンスがすべて」と言いますが、どう思いますか?

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に行くべきだと思います。そうすれば、毎回1つのテーブルを検索することになり、おそらく処理が簡単になります。

于 2012-07-17T21:57:26.120 に答える