6

在处理诸如获取带有特定标签或类别或类似内容的记录之类的情况时,我目前正在尝试找到最佳方法(在可用性和性能方面)。

一个好方法(我想做的方式)是使用标签/类别 slug 获取记录,所以 URL 看起来像:

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

通过 slug 获取记录,这看起来比:

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

通过 ID 获取并在后面添加 slug,因此它对搜索引擎更加友好。这在性能方面更好,因为通过整数 ID 获取数据会比字符串快。(cmiiw)

现在,使用 db 架构,如:

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

我做对了吗?为了避免性能问题,我需要知道哪些陷阱或最佳实践?(例如,标签不应超过 10,000 条记录,或标签 slug 不应超过 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 回答