使用数据库主键作为URL标识符有哪些优缺点?例如,http:// localhost/post/view/13 - 13是我的帖子表的主键.
像reddit这样的网站使用的是我认为的唯一ID,它不是主键,但仍然有助于识别链接:
http://www.reddit.com/r/funny/comments/7ynin/the_mystery_of_irelands_worst_driver/
只要/ 7ynin /是相同的,您就可以将URL的最后部分更改为您想要的任何内容.
Digg似乎使用了一个链接标题的标题来标识一个链接:
http://digg.com/space/Liquid_Water_Recently_Seen_on_Mars
如果我没记错的话,默认的WordPress安装使用index.php?p =#作为他们的ID,直到启用了花哨的网址.
我可以看到为什么SEO的缘故,你想要有最多信息的网址,但我只是想看看使用主键是安全风险还是只是坏形式.
您总是希望为用户提供一个很好的URL - 而不是一些讨厌的自动生成的ID.但我不认为你应该说"友好网址"是主键.您仍然应该使用"经典"自动递增的数字PK,并且第二列是唯一的"友好网址".为什么?
所有注释表,评级表,与您的内容表有关系的任何表都可以使用数字主键.这意味着更小的索引和更低的内存使用.
有人会想要更改友好的网址.如果您有一个数字主键,则不必更新任何相关表(或让DB通过级联更新来完成).
将来,您可以将URL位抽象到另一个表中.然后,所述表可以存储"遗留"URL映射,其将重定向发布到主"真实"URL映射.然后,当用户想要更改友好URL时,您不必破坏所有入站旧URL.如果您的主键是"友好URL",则无法执行此操作.
我仍然倾向于在我所有的AJAX goo中使用数字主键(例如,post_new_comment()javascript函数将采用主键,而不是一些友好的URL).我唯一一次使用友好的URL是在任何面向用户的URL结构中.
至于安全性?如果您的内容受访问控制,则无论是主键还是友好URL,您都必须检查访问权限.
如果您允许通过主键访问内容的方式,人们可能会尝试插入随机ID.如果您的要求不仅限制了对内容的访问权限,而且拒绝说内容存在,那么这就是您的错误的措辞问题.它与登录失败相同 - 你不说"找不到用户名"你说"用户名或密码不好".插入随机值以查找内容对于您采取的任何方法都会成为一个问题,只需使用数字键就可以尝试更少的值.
底线:友情网址?见鬼,是的.用它们作为主键?一定不行.