具有16位Guids的路线看起来很疯狂?

时间:2010-11-02 16:32:42

标签: c# asp.net asp.net-mvc database-design asp.net-mvc-2

我刚刚从我的DBA查看了我的数据库架构,并使用16位唯一标识符作为主键。我的问题是如何在MVC的路由中使用它。

http://www.app.com/project/21212/product/212121

这样的东西

这是一个中型企业应用程序,为什么你还需要我们的表的GUID?

我知道我们可以创建友好的ID字段,但我知道MVC Routing不建议在路由中使用数据库ID。

所以我想我的问题是:

为什么我们的主键需要16位Guid?

我怎么能在路线中使用它。该路由不应包含和数据库ID。

3 个答案:

答案 0 :(得分:1)

让我们以此页面为例。我想我们都同意StackOverflow是一个成功的MVC应用程序......

https://stackoverflow.com/questions/4079861/routes-with-16-bit-guids-seem-crazy
那是什么“4079861”?数据库ID?

请注意,数据库ID实际上是唯一重要的部分,因为这些链接也会到达同一位置:

https://stackoverflow.com/questions/4079861/

https://stackoverflow.com/questions/4079861/Foo

所以,简短的回答是:是的,你的路线可能会有一个很难看的Guid。如果您遇到问题,请与您的DBA联系。

答案 1 :(得分:1)

在问题的数据库部分

决定使用哪种DB密钥应完全独立于MVC路由。 DBA可能会选择使用他们认为适合您的应用程序的任何值,而不必担心您将如何制定您的路线。我无法判断它们是否对您的域名有意义。

在问题的路线/网址部分

根据您尝试的操作,向路径添加GUID可能不是路由/ URL的最佳选择。 “ASP.NET MVC in Action”(第95页)的作者提供了一些关于URL应该如何的良好指导:

  • 简单干净
  • 非法侵入的
  • 允许网址参数发生冲突
  • 尽可能避免公开数据库ID
  • 考虑添加不必要的信息

如果您有GUID作为数据库ID,请查看是否可以使用其他值来制定到每个资源/记录的路由。例如,产品的名称加上数据库ID的最后4位数,或者您可以根据您尝试访问的信息提出的另一个唯一且用户友好(参见指南)值。

答案 2 :(得分:0)

您应该问问自己:是否有另一种方法来唯一标识我的 [插入名称]

@Mark给出了StackOverflow示例。好的部分是它是一个数字,即使它很长。数字比GUID更好。

您的选择可能是:

  • 在数据库中为GUID映射创建一个简单的数字,为路由目的创建冗余唯一标识符
  • 实际上将GUID显示为路由的一部分
  • 找到一些其他方法可以唯一标识您的记录(即日期+名称组合,博客使用的) - 尽管在这里您必须确保不允许重复输入路由标识符。

您最终使用的内容完全取决于您的情况和要求。