6

私は現在、特定のタグやカテゴリなどでタグ付けされたレコードをフェッチするような状況に対処するときに、(使いやすさとパフォーマンスの観点から) 最善の方法を見つけようとしています。

良い方法 (私がやりたかった方法) は、タグ/カテゴリ スラッグを使用してレコードをフェッチすることで、URL は次のようになります。

http://stackoverflow.com/questions/tagged/language-agnostic

slug によるレコードのフェッチ。

http://stackoverflow.com/questions/tag/789/language-agnostic

ID で取得し、後ろにスラッグを追加することで、検索エンジンとの親和性を高めています。整数 ID によるデータの取得は文字列よりも高速であるため、これはパフォーマンスの面で優れています。(cmiiw)

さて、次のような db スキーマを使用します。

posts    post_to_tags    tags
-----    ------------    ----
id       id              id
title    post_id         name
content  tag_id          slug
...                      ...

私はそれを正しくやっていますか?パフォーマンスの問題を回避するために知っておくべき落とし穴やベスト プラクティスはありますか? (例: タグは 10,000 レコードを超えてはなりません、またはタグ スラッグは n 文字を超えてはなりません、またはその他)

前もって感謝します。

4

2 に答える 2

5

最初の URL スタイルと現在のデータベース デザインを使用すると、次のことができます。

select ...
from   posts p
join   posts_to_tags pt on pt.post_id = p.post_id
join   tags t on t.id = pt.tag_id
where  t.slug = [url slug value];

tags.slug がインデックス化されている限り、これは非常に効率的であり

select ...
from   posts p
join   posts_to_tags pt on pt.post_id = p.post_id
where  pt.tag_id = [url tag ID];
于 2009-01-27T12:24:02.363 に答える
0

最初のものの方が優れていますが、スラッグを変更することはできますか? その場合、リダイレクト テーブルが必要になります (たとえば、"some-article-about-dogs" は "article-about-dogs-and-cats" になります)。

于 2009-11-27T16:08:56.877 に答える