【问题标题】:Routes with 16-bit Guids seem Crazy?带有 16 位 Guid 的路由看起来很疯狂?
【发布时间】:2011-05-04 01:14:59
【问题描述】:

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

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

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

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

所以我想我的问题是:

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

我如何在路线中使用它。路由不应包含数据库 ID。

【问题讨论】:

  • 您发布的链接是 404。
  • 他确实说过“有点像”XSaint32,这是一个例子......
  • 为什么路由不应该包含数据库ID? (即 SO 在上面使用“4079861”)此外,不可能以 16 位存储 GUID。 (它们是 128 位的)
  • Guid 为 128 位。 16 位是非常小的整数。
  • 我的意思是字节!!!! 16 字节(128 位)数字

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


【解决方案1】:

关于问题的数据库部分

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

关于问题的路由/URL部分

根据您要执行的操作,将 GUID 添加到路由可能不是路由/URL 的最佳主意。 “ASP.NET MVC in Action”(第 95 页)的作者给出了一些关于 URL 应该如何的很好的指导:

  • 简单干净
  • 可破解
  • 允许 URL 参数冲突
  • 尽可能避免暴露数据库 ID
  • 考虑添加不必要的信息

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

【讨论】:

  • 我认为这里的问题更容易破解。不像 MVC In Action 状态那样很好的 hack 能力,但是不好的 hack 能力,例如可能使用 URL 访问你不应该访问的东西。
  • 在这种情况下,向 URL 添加一条额外的信息可能是个好主意。但是,请记住,仅依靠 URL 来保证安全性是不够的。即使您使用 GUID,如果 URL 不应该公开,您也必须使用其他安全方法。
【解决方案2】:

让我们以这个页面为例。我想我们都同意 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。

【讨论】:

    【解决方案3】:

    你应该问自己:还有其他方法可以唯一地识别我的 [插入姓名]

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

    您的选择可能是:

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

    你最终使用什么将完全取决于你的情况和要求。

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多