2011-07-20 13 views
2

各デバイスの設定を記述する非構造化データがあります。例えば、SQL ServerのXMLデータ型ですか?

デバイス2の設定が

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

異なるXMLデータは、クエリの目的のために使用されていないされてのためにしかし、最終的にはデバイスドライバに送信している.NETアプリケーションに渡されます
<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> 

:デバイス1のために(C++コードで) 私たちは4種類のデバイスしか持っていません。したがって、異なる設定の可能性には限界があります。

  1. この種のデータは、一部のスキーマに準拠した型付きXMLとして保存できますか?無効な設定が保存されている場合、varcharとして保存することは悪夢になります。

    私はXMLスキーマコレクションに複数のスキーマを持たせることができますが、1つのスキーマしか確認できないことは知っています。

  2. スキーマを簡単に作成する方法はありますか?

  3. 代わりに型なしのXMLを使用する必要がありますか?

+0

単純なデータ型 'XML'(スキーマなし)として保存することをお勧めします。あなたがそれを照会したくない限り、実際にスキーマを設置する魅力的な理由はありません。しかし、 'XML'データ型を持つことは、' varchar(MAX) 'フィールドよりもXMLをより効率的に格納するのに役立ちます。 –

答えて

0

1.Iは、あなたのスキーマコレクションが4つの異なるスキーマが含まれている場合は、関連する列が満たすXMLを含むことができ、それが可能だと思いますコレクションのスキーマの1つ。
2。私は最も簡単な方法は、SQL Serverがあなたのためのスキーマを作成できるようにすることです信じて(必要な列でChartSetting2、最初のテーブルChartSetting1を作成する - それは必ずしもありません、あなたは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形式)、PATH MODEを使用して希望の形式で返信してください。

+1

非構造化データの場合は該当しません。 – GSerg

2

4種類のデバイスタイプの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
関連する問題