【问题标题】:Is there a reason that the primary key is nchar while other fields are nvarchar?主键是 nchar 而其他字段是 nvarchar 是否有原因?
【发布时间】:2010-09-13 22:31:15
【问题描述】:

我正在研究 MSDN 中的一个示例,该示例使用小型数据库来演示数据驱动测试,这是简单的架构:

CREATE TABLE dbo.LogonInfoTest
   (
   UserId nchar(256) NOT NULL PRIMARY KEY CLUSTERED,
   Password nvarchar(256) NULL,
   IsValid bit NOT NULL
   )  ON [PRIMARY]
GO

我的问题是:选择 nchar 作为 UserId 的数据类型和 nvarchar 作为 Password 的数据类型的根本原因是什么?

【问题讨论】:

    标签: sql sql-server-2005 database-schema


    【解决方案1】:

    没有理由。主键应该是 NVARCHAR(256),因为我很难相信 UserId 将 总是 恰好 256 个字符。现在这个模式可能会浪费(大量)磁盘空间。请注意,使用 SQL Server 2008 row-compression 存储时,固定长度列无论如何都会作为可变长度列存储在磁盘上(删除尾随空格),但在启用行压缩的情况下。

    【讨论】:

    • 谢谢!如果没有人说不同的话,我会把它标记为答案
    • 实际上,拥有一个 256 个字符的双字节主键(= 512 字节!)似乎是一场灾难……想象一下聚集索引和所有非聚集索引有多么宽泛和臃肿在那张桌子上最终会成为!
    • 有趣,但如果我设身处地为作者着想,我仍然无法摆脱他一定认为他有理由的感觉;只是感觉是故意的。哦,好吧,我想这细节太小了,无法详述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2021-03-05
    • 2011-07-23
    • 1970-01-01
    • 2016-08-25
    相关资源
    最近更新 更多