7

我正在尝试为我的网站生成一些url 'slugs'。它基于一段用户生成的文本。

现在,我已经制作了自己的 slug 方法,所以我不需要为此编写一些代码。

我想知道确定这个 slug 是否唯一然后插入它的最佳位置在哪里,因为 slug 字段是唯一键索引。

最初,我在任何插入(针对表)上都有一个触发器,所以当输入数据时,然后确定 slug。我有一个函数检查包含用户文本(不是 slug)的记录数,然后生成 slug 并将记录计数 + 1 添加到新 slug 的末尾。

例如。

在表中找到 5 条具有相同用户生成内容的记录。用于此的 slug 现在是在末尾添加 6 的 slug-text。

缺陷:如果用户更改了他们的文本,slug 不会改变。

无论如何,我想知道其他人是否曾经解决过这个问题并找到任何解决方法?

4

4 回答 4

17

我有点喜欢stackoverflow的做法。也就是将ID 和 slug都放入 url。现在蛞蝓不再是唯一的。我相信 hulu.com 也是这样做的。我认为这是解决问题的实用方法。

于 2009-01-12T04:39:23.627 回答
3

大多数网站不会更改 slug,因为如果用户编辑她的标题,它不应该破坏任何指向已经创建的帖子的链接。

于 2009-01-12T03:45:07.790 回答
0

对于您已经拥有的数据库解决方案,如果它运行良好,您还可以使用更新触发器在内容更改时更新 slug,但您应该寻找性能损失。

对于替代解决方案,您可以使用地图 [在启动时加载,包含现有的 slug],其中包含作为 slug 的键和作为值的现有计数。每次生成 slug 时,确定现有值并将高于它的值附加到表中,然后更新地图。

于 2009-01-12T03:51:26.827 回答
0

您可以为每个帖子使用 slug 的集合(带有帖子链接的单独表格),并确定一个实际上是最新的。您的帖子应存储当前帖子的 id,例如将其用于 SEO 作为规范。它还将受益于更改 slug 以进行更好的 SEO 优化。如果您不想使用 SEO - 您可以做任何您想做的事情(只需存储一个 slug),它会很好。有很多策略可以达到它的独特性。要通过索引在 DB 中执行相同的 slug 快速搜索,请使用“my_slug%”并从结果中构建唯一的(例如添加帖子的 id)。如果结果为空 - 继续保存。

但是,如果您使用 slug 集合 - 不要忘记让这些 url 可以从互联网访问

于 2020-11-17T07:53:16.983 回答