use*_*095 5 sql sql-server sql-server-2005 sql-server-2008
我们目前正在考虑设置我们的字符串列,nvarchar(max)
而不是指定一个特定的长度,以防止在数据库中没有足够空间存储字符串的任何问题.我只是想知道这是不是一件好事,或者它是否会引起任何问题,因为它可以做到那时为什么要指定长度nvarchar(10)
而不是nvarchar(max)
.我们也使用varbinary(max)
了很多,因为我们不知道我们需要多少二进制数据所以我不知道这是多少效果或者说我们的插入没有我想的那么快.这是一个示例表:
CREATE TABLE [dbo].[SAMPLETABLE] (
[ID] [uniqueidentifier] NOT NULL,
[FIELD1] [int] NOT NULL,
[FIELD2] [nvarchar] (2000) NULL,
[FIELD3] [nvarchar] (max) NULL,
[FIELD4] [uniqueidentifier] NULL,
[FIELD5] [int] NULL,
[FIELD6] [nvarchar] (2000) NULL,
[FIELD7] [varbinary] (max) NULL,
[FIELD8] [varbinary] (max) NULL,
[FIELD9] [varbinary] (max) NULL,
[FIELD10] [uniqueidentifier] NULL,
[FIELD11] [nvarchar] (2000) NULL,
[FIELD12] [varbinary] (max) NULL,
[FIELD13] [varbinary] (max) NULL,
[FIELD14] [bit] NULL,
[FIELD15] [uniqueidentifier] NULL,
[FIELD16] [varbinary] (max) NULL,
[FIELD17] [bit] NULL,
[FIELD18] [tinyint] NULL,
[FIELD19] [datetime] NULL,
[FIELD20] [nvarchar] (2000) NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
给定一个表的设计一样,并改变nvarchar(2000)
以nvarchar(max)
将让事情更糟(或更好)?sqlserver不喜欢这样的设计吗?
Dam*_*ver 11
如果你对J. Random Developer感到高兴,6个月后,将莎士比亚的作品插入每一栏,那就好了.
对我来说,数据建模的很大一部分是认真思考我希望在每列中允许哪些数据,以及我希望禁止哪些数据.然后我应用适当的CHECK
约束来实现这些限制(最好的SQL Server允许).对"免费"进行合理长度检查似乎总是一种奖励.
你也没有做太多的"未来验证" - 我相信,在以后将(n)varchar列的长度更改为更大的值,纯粹是元数据操作.所以我会说适当的列大小适合你今天要处理的数据(好的,明年左右).如果以后需要扩展它们,则需要几秒钟.
我们希望您不要使用该列进行搜索或具有唯一值...
索引不能超过900字节宽所以你可能永远不会创建索引.这是一个缺点:因为它给出了
它可以解决计算列,但为什么不存储你需要的?