存储唯一URL Slug的最佳方法是什么?

时间:2009-01-12 03:40:56

标签: database url slug

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

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

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

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

例如

在表中找到5条记录,其中包含相同的用户生成内容。 现在这个slug文本中有一个6加入到最后。

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

无论如何,我想知道其他人之前是否已经解决过这个问题,并找到了解决问题的方法吗?

4 个答案:

答案 0 :(得分:16)

我有点像stackoverflow这样做的方式。这是将两者 ID和slug放入url。现在slu is不再是独一无二的。我相信hulu.com也是这样做的。我认为这是解决问题的实用方法。

答案 1 :(得分:3)

大多数网站都没有更改slug,因为如果用户编辑她的标题,它不应该破坏已经发布的帖子的任何链接。

答案 2 :(得分:0)

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

对于替代解决方案,您可以使用包含密钥作为slug和现有计数作为值的映射[在启动时加载包含现有slug]。每次生成一个slug时,确定现有值并在表中追加高于它的值,然后更新映射。

答案 3 :(得分:0)

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

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