2011-07-20 86 views
2

我有一些非结构化数据来描述每个设备的设置。对于例如对于设备1:SQL Server中的XML数据类型?

<ChartSetting xmlns="ChartSetting1"> 
    <ChartSizeX>132.6</ChartSizeX> 
    <ChartSizeY>132.6</ChartSizeY> 
    <ChartType>Native</ChartType> 
    <BarSizeX>90</BarSizeX> 
    <BarSizeY>6</BarSizeY> 
    <DistToBar>34.8</DistToBar> 
    <DistToFirstLineY>17.5</DistToFirstLineY> 
    <MarkerDistance>120</MarkerDistance> 
    <DistToFirstField>18.5</DistToFirstField> 
    <PatchSizeX>7.5</PatchSizeX> 
    <PatchSizeY>9</PatchSizeY> 
</ChartSetting> 

然而,对于设备2设置为不同的

<ChartSetting xmlns="ChartSetting2"> 
    <PatchGap>1</PatchGap> 
    <PatchSize>5</PatchSize> 
</ChartSetting> 

XML数据不用于查询的目的,它会被传递到.NET应用程序,最终将其发送到devicedriver (通过C++代码) 我们只有四种类型的设备。所以不同设置的可能性是有限的。

  1. 这种类型的数据可以存储为类型化的XML吗?如果存储了无效的设置,则以varchar存储将会产生恶梦。

    我知道XML模式集合可以有多个模式,但它可以确认只有一个模式。

  2. 有没有简单的方法来创建一个架构?

  3. 我应该使用无类型的XML吗?

+0

我建议只将它存储为普通数据类型'XML' - 没有模式。只要你不想查询它,就没有任何强制性的理由来建立模式。但拥有'XML'数据类型有助于 - 它比'varchar(MAX)'字段更有效地存储XML。 –

回答

0

1.I认为这是可能的,如果你的架构集合包含4种不同的模式,相关的列可以包含的XML满足集合中的模式之一。
2。我认为,最简单的方法是让SQL Server的创建模式为你(第一次创建表ChartSetting1ChartSetting2与所需的列 - 它不一定,你可以创建SELECT返回所有列,但使用的表是比较容易),然后

DECLARE @mySchema NVARCHAR(MAX); 
SET @mySchema = N''; 
SET @mySchema [email protected] + 
(
    SELECT * FROM ChartSetting1 
    FOR XML AUTO, ELEMENTS, XMLSCHEMA('ChartSetting1') 
); 

SET @mySchema [email protected] + 
(
    SELECT * FROM ChartSetting2 
    FOR XML AUTO, ELEMENTS, XMLSCHEMA('ChartSetting2') 
); 

CREATE XML SCHEMA COLLECTION [name] AS @mySchema; 

-- we don't need these tables , drop them 
DROP TABLE ChartSetting1,ChartSetting2 

3.这取决于。我想说,如果你需要限制XML数据超出模式验证,那么使用无类型的XML是有意义的。如果模式验证涵盖数据验证的所有方面,为什么不使用它?

-2

确实将XML存储在数据库中作为XML。 XML比数据更像是一种传输媒介。正如你所说的那样难以查询。您应该将数据存储为数据(varchar int ect),然后使用PATH MODE以您想要的格式将其返回给您

+1

不是非结构化数据的情况。 – GSerg

2

您可以为四种不同设备类型创建DTD,并使用这些DTD验证您的XML片段,但我建议你在SQL Server的外部进行处理。

如果您不打算查询XML,则没有任何理由将其存储为XML数据类型。

问题的答案:

  1. 类型化XML:你将不得不使用每列一个特定的类型(见http://msdn.microsoft.com/en-us/library/ms184277.aspx
  2. 创建 模式 - 退房(HTTP:// MSDN。 microsoft.com/en-us/library/ms176009.aspx),并尝试 如XMLSpy,如果它太复杂。你看着片段小 所以我想你可以用记事本进行管理/ ++
  3. 我会使用非类型化XML并验证它时,它被存储和/或检索
+0

>>如果您不打算查询XML,那么没有任何理由将其存储为XML数据类型? 有什么替代方案?以关系格式存储..?或者作为varchar并在客户端应用程序中进行解析。 – Cshah

0
  1. 我认为这是不可能创建符合XML的模式。
  2. 许多XML编辑器可以从XML,如创建XSD:Visual Studio的
  3. Typed XML vs. Untyped XML