2011-07-20 84 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