4

我注意到 asp_membership 使用 uniqueidentifier,对我来说,这似乎是在浪费空间,因为我想不出一个特殊的理由不将其替换为身份。

但是,SQL Server 不允许我将其更改为 int。它说“连接的数据库服务器不支持从 uniqueidentifier 转换为 int”。在谷歌搜索之后,似乎我必须打破所有关系等,然后手动删除该列并将其重新添加为 int。你们知道更好的方法吗?

我不认为我会处理多个数据库,所以我似乎不需要 uniqueidentifier。你同意吗?

请注意:我正在启动一个新的 Web 应用程序。你还认为解决这个问题会那么难吗?

另外,请注意,我的任何主键都不会成为我的 URL 的一部分。

4

3 回答 3

12

我的建议是不要管它。你是对的,你需要做很多工作(如你所描述的)才能摆脱它。为什么?为什么要搞乱一些刚刚起作用的东西?为了节省数据库空间?如今,与存储一样便宜,以及硬盘驱动器或存储阵列的平均大小,您所谈论的空间节省量完全是微不足道的。

这个想法没有投资回报。

于 2009-09-12T05:12:09.960 回答
1

您不能将 UNIQUEIDENTIFIER 列转换为 INT - 在这种情况下您需要做的是

  • 将您的新 ID 列添加为 INT IDENTITY - 这将创建并用值填充该列
  • 删除不再需要的旧 GUID 列

当然,由于“UserID”是主键,因此会被很多地方引用,所以在删除 UserId 列之前,您必须做很多工作。

虽然我赞赏您的想法和实现 UNIQUEIDENTIFIER 对于 SQL Server 表中的主键和集群键来说是一个非常糟糕的选择,但我认为在这种特殊情况下,我可能会保持“原样” - 尝试转换会导致整个 ASP.NET 表中的许多涟漪变化 - 可能只是不值得付出努力。

马克

于 2009-09-12T08:50:32.070 回答
0

Uniqueidentifier 和 int 是非常不同的数据类型。您不能只将 guid 更改为 int。您需要删除所有关系,将数值分配给父表,将数值列添加到所有子表,使用连接来设置子表中的所有值。删除所有 guid 列,使 int 列成为主键。设置所有关系。

更不用说更改每个与数据库对话并期望该值是 guid 的应用程序,以便它可以使用整数值。

您正在寻找大量工作而收获很少。

是的,您会得到一些性能改进,因为 guid 不是连续的,而且数字是连续的。但这真的不足以成为实际进行更改的理由,除非您从中看到一些主要的性能问题。

至少你会看到数周的工作和测试。在现实中几个月,以确保您抓住每一个可能的小变化。

于 2009-09-12T05:52:31.593 回答