【发布时间】: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