.net 将数据作为XML持久化到SQL Server数据库中?

.net 将数据作为XML持久化到SQL Server数据库中?,.net,sql-server,xml,.net,Sql Server,Xml,我正在为垂直市场开发WPF应用程序。在今天关于如何构建数据结构以支持选择十几个复选框和单选按钮的讨论中,我考虑了将对象序列化为XML并将其存储在SQL Server中,然后在需要显示数据时对其进行反序列化的可能性 我的问题是关于在SQLServer2008中存储XML。我的同事认为这种方法是个坏主意,并提出了使用通用列表表存储名称-值对数据的可能性 在SQLServer2008中存储XML数据的优缺点是什么?我是不是疯了,还是有什么想法?我看到的问题是XML是一种存储介质,SQL Server也

我正在为垂直市场开发WPF应用程序。在今天关于如何构建数据结构以支持选择十几个复选框和单选按钮的讨论中,我考虑了将对象序列化为XML并将其存储在SQL Server中,然后在需要显示数据时对其进行反序列化的可能性

我的问题是关于在SQLServer2008中存储XML。我的同事认为这种方法是个坏主意,并提出了使用通用列表表存储名称-值对数据的可能性


在SQLServer2008中存储XML数据的优缺点是什么?我是不是疯了,还是有什么想法?

我看到的问题是XML是一种存储介质,SQL Server也是。因此,您将数据存储在一个介质中,然后将其存储在另一个存储介质中

你能不能跳过中间人,创建一个表格?要么:

  • 您的同事建议的键值对或
  • 一个包含十几列的表,表单上的每个选项对应一列

后者允许轻松地将数据从sql server绑定到表单。

我看到的问题是XML是一种存储介质,sql server也是。因此,您将数据存储在一个介质中,然后将其存储在另一个存储介质中

你能不能跳过中间人,创建一个表格?要么:

  • 您的同事建议的键值对或
  • 一个包含十几列的表,表单上的每个选项对应一列
后者允许轻松地将数据从sql server绑定到表单。

空间使用 与NVARCHAR(N)存储相比,XML存储占用的空间更少。原因之一是,XML数据类型将元素/属性名称转换为内部标识符,并存储ID而不是元素名称。这样可以节省大量存储空间

例如,请看下面的示例:

DECLARE @x NVARCHAR(MAX)
SELECT @x = '
  <Employees>
    <EmployeeFirstNameLastNameandMiddleName>Jacob v Sebastian</EmmployeeFirstNameLastNameandMiddleName>
    <EmployeeFirstNameLastNameandMiddleName>Someone x somewhere</EmployeeFirstNameLastNameandMiddleName>
  </Employees>'
结果:

Length
------
498
Length
------
218
…与:

DECLARE @x1 AS XML
SELECT @x1 = CAST(@x AS XML)
SELECT DATALENGTH(@x1) AS Length
结果:

Length
------
498
Length
------
218
请注意,NVARCHAR版本占用498字节,XML版本仅占用218字节

演出 一般来说,XML可能会提供更好的性能。但是,它取决于数据的使用情况。如果需要查询XML值并从节点/属性提取信息,XML将为您提供最佳性能。如果使用NVARCHAR,则需要在运行时将值转换为XML,这将增加查询处理器的开销

第二,更小的尺寸意味着读写时所需的IO更少。这可以直接转化为性能提升

如果存储数据只是为了存储,而XML文档中没有执行任何查询操作,那么最好将数据存储为VARBINARY。这可能会提供更好的性能,因为SQL Server在存储和读取数据时不需要执行与XML相关的验证和格式化

NVARCHAR对VARBINARY 如果不想将数据存储为XML,那么下一个最佳选择是VARBINARY(MAX)。在NVARCHAR中存储这些值可能会导致编码相关问题

从邮局取走的


我必须承认,为了动态地布局表单,通过xml进行管理(您可以将xml存储在数据库中),而不是在数据库中使用键/值对,这将大大减少管理的难度。

空间使用 与NVARCHAR(N)存储相比,XML存储占用的空间更少。原因之一是,XML数据类型将元素/属性名称转换为内部标识符,并存储ID而不是元素名称。这样可以节省大量存储空间

例如,请看下面的示例:

DECLARE @x NVARCHAR(MAX)
SELECT @x = '
  <Employees>
    <EmployeeFirstNameLastNameandMiddleName>Jacob v Sebastian</EmmployeeFirstNameLastNameandMiddleName>
    <EmployeeFirstNameLastNameandMiddleName>Someone x somewhere</EmployeeFirstNameLastNameandMiddleName>
  </Employees>'
结果:

Length
------
498
Length
------
218
…与:

DECLARE @x1 AS XML
SELECT @x1 = CAST(@x AS XML)
SELECT DATALENGTH(@x1) AS Length
结果:

Length
------
498
Length
------
218
请注意,NVARCHAR版本占用498字节,XML版本仅占用218字节

演出 一般来说,XML可能会提供更好的性能。但是,它取决于数据的使用情况。如果需要查询XML值并从节点/属性提取信息,XML将为您提供最佳性能。如果使用NVARCHAR,则需要在运行时将值转换为XML,这将增加查询处理器的开销

第二,更小的尺寸意味着读写时所需的IO更少。这可以直接转化为性能提升

如果存储数据只是为了存储,而XML文档中没有执行任何查询操作,那么最好将数据存储为VARBINARY。这可能会提供更好的性能,因为SQL Server在存储和读取数据时不需要执行与XML相关的验证和格式化

NVARCHAR对VARBINARY 如果不想将数据存储为XML,那么下一个最佳选择是VARBINARY(MAX)。在NVARCHAR中存储这些值可能会导致编码相关问题

从邮局取走的



我必须承认,为了动态布局表单,通过xml进行管理(您可以将xml存储在数据库中),而不是在数据库中使用键/值对,这将大大减轻管理的痛苦。

感谢您深思熟虑的回答。性能提升可能是采用此解决方案的驱动因素。感谢您深思熟虑的回答。性能提升可能是采用此解决方案的驱动因素。XML不是存储介质。从表面上看,持久化XML就是存储它。XML是一种描述数据的方法。XML不是存储介质。从表面上看,持久化XML就是存储它。XML是一种描述数据的方法。