【问题标题】:When not to use GUID primary? [closed]什么时候不使用 GUID 主? [关闭]
【发布时间】:2012-06-13 03:25:24
【问题描述】:

我需要记录令牌错误响应只有两种类型的错误。

“请求错误”和“系统错误”

既然这些错误不会改变,为什么要使用 GUID 作为主键,为什么我不能将它们存储为“RequestError”和“SystemError”?

(我的同事说我们应该将其存储为唯一标识符,因为其他所有内容都存储为唯一标识符嗯,如果我们稍后将这些错误更改为其他内容很容易!嗯,但它们不会改变?)

【问题讨论】:

  • 真的不清楚你在问什么。首先,这些是真的无用的错误消息,所以我并不完全清楚持久化它们的价值。其次,GUID 通常不会产生非常好的主键(或者,更具体地说,它们不会产生非常好的聚集索引)。第三,这些数据真正需要的关系/规范化程度如何?如果将来某天某个错误类型发生了变化,那真的会改变所有历史错误消息吗?我不这么认为。
  • @David 我同意你的看法(并且永远不会选择 GUID 作为主键),但这是他们引入 NEWSEQUENTIALID()... 的原因之一
  • @AaronBertrand:确实,当我找到我喜欢的实现时,我会确定并使用它:) NEWSEQUENTIALID() 的一个问题是它是特定于机器的(甚至引导特定)。因此,只有在同一台机器上生成 GUID 时,它们才是顺序的(甚至可能没有重新启动)。然而,使用 GUID 的主要原因是它们在机器上是全局的。如果我的所有数据都必须保留在一个主机上,我不需要 GUID。
  • @David 我同意,只是指出它克服了什么。在您需要跨多台机器生成唯一 ID 但实际上不需要合并数据的情况下,它仍然可能是值得的。因为它们在另一台机器上的顺序不同,谁在乎呢?顺序性质是出于局部原因,而不是全局原因。我的偏好是标识范围或附加列,但是,有些人喜欢胖索引,就像有些人喜欢 ORM 而不是过程或 VB 而不是 C#。

标签: c# sql-server guid


【解决方案1】:

根据我对您的(标题)问题的解释,我建议阅读http://www.codinghorror.com/blog/2007/03/primary-keys-ids-versus-guids.html

这是一个简短的阅读,并列出了优点/缺点,我倾向于不同意 guid 不能构成非常好的主键(或者更多,所以我觉得它有点笼统)

我认为,如果您的记录是“RequestError”或“SystemError”,则 guid 可能超出要求,如果表要保存大量记录,则简单的 int 主键可能更有效。

还有一个指向http://databases.aspfaq.com/database/what-should-i-choose-for-my-primary-key.html 的链接,它有很多优点/缺点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2012-09-19
    • 1970-01-01
    • 2010-11-24
    • 2013-05-25
    • 2010-09-06
    相关资源
    最近更新 更多