SQL ServerでXMLデータ型を使用する必要があるのはいつですか?


15

Microsoft SQL ServerでXMLデータ型を使用する必要があるのはいつですか?

回答:


1

オブジェクトデータを格納するためにXMLにシリアル化するのと同じようなことをしました。これにより、複雑なオブジェクトのデータを保持するためにテーブル、列、およびリレーションシップを配置する負担がなくなります。結果のXMLが準拠するスキーマを使用することでプロセスを支援でき、問題のオブジェクトに関するメタ情報にデータベーステーブルを使用できます。私の場合、オブジェクトレイアウトに対応するためにデータベーススキーマを拡張することは大きなタスクです。


この答えは私の意見に最も近いものです。通常のテーブルベースのデータセットを返すか、結果の新しい形式を構築する必要がある場合は、XQueryを使用して基になるデータをクエリすることもできます。私の質問はもともと、XMLを使用することが実現可能かどうかを尋ねたもので、自分の意見があり、他の人の意見を聞きたいと述べており、あなたの答えはXMLの実際の実行可能な事例を説明しています。
-FarligOpptreden

11

個人的に、私はSQL ServerでXMLフィールドタイプを使用したことがなく、この機能を追加して以来、多くのデータベースプログラミングを行ってきました。データベースでXMLコンテンツをネイティブに使用するには、常にプログラム上およびパフォーマンス上のオーバーヘッドがあるように思えました。誰もが2000年代初期のある時点でXMLトレインに参加していたため、私はそれが仕掛けだと思った。「XMLは暑いので、SQL Serverに追加して、見過ごさないようにしましょう。」

私が見ることができる最高のビジネスケースは、受信したXMLベースのデータメッセージを記録することです。ここでは、構造やデータを覗きたいが、ビジネスまたは法律上の理由で元のメッセージの整合性を維持したい場合があります。XMLをテーブル構造に変換するにはオーバーヘッドが大きすぎる場合がありますが、SQL ServerでXML機能を使用すると、データの検査にかかるコストを削減して、データの使用を保証できます。

それを使用したい理由はおそらく他にもたくさんありますが、率直に言って、非常に具体的なビジネス上の理由がない限り、SQL ServerでXMLを独り占めする前に、幸福への別の道を検討すべきだと思います。より適切な場合は、varchar(max)またはテキストフィールドを使用します。

もちろん、私の意見:)


これは、a)この元の回答を投稿してから数年後、b)必ずしもXMLに関連するわけではないことを知っていますが、XMLについては、SQL ServerにJSONメソッドを含めることと同じように感じています。
CokoBWare

当時の私の意見は、データベースに不可解なスキーマを作成しない方法で非構造化データを保存することに向けられていたため、現代のNoSQL(およびハイブリッド)ストレージオプションの出現は、元の質問を冗長にしていると思います。
-FarligOpptreden

8

SQL ServerでXMLデータ型の使用を積極的に追求するいくつかのシナリオに遭遇しただけです。これは私の頭の一番上にあります。

  • 他のアプリケーションによって生成されたXML応答の保存/アーカイブ
    • たとえば、カスタムSilverlightアプリケーションとDynamics AX間の通信には、Application Integration Framework(AIF)を使用します。これらのアプリケーション間の通信のトラブルシューティングを支援するために、受信メッセージと送信メッセージの両方をデータベースに保存します
    • フィールドタイプは汎用文字列タイプ(つまりVARCHAR)ではなくXMLであるため、XQueryを使用して、特定の条件に一致するメッセージを具体的に照会できます。これは、単純な文字列LIKEマッチングでははるかに困難です
  • 合成された応答メッセージのキャッシュ/保持
    • 計算列を模倣するトリガーまたはアプリケーションコードでXMLフィールドを更新する
    • 呼び出し元のアプリケーションに対するXML応答を絶えず再生成する代わりに、すべての呼び出しではなく、行がアップロードされたときにのみオーバーヘッドが発生します
    • これは、ほとんどのアプリケーションに当てはまる傾向があるUPDATE / INSERTよりもSELECTの方がはるかに多い場合に最適です。
  • 単一のフィールドに複数の値を保存する
    • 私が見たプラクティスの1つは、XMLデータ型を使用して値のコレクションを単一のフィールドに格納することです
    • 利点の1つは、単純なキー/値ストア用に追加のテーブルセットを設計する必要がないことです。
    • これのマイナス面は、データが完全に正規化されていないため、クエリがわかりにくくなることです。
    • ただし、前述のように、そのXMLフィールドでXQueryを使用して、識別基準に一致する行を選択することにより、完全に正規化されていない場合の影響を部分的に無効化できます。

99%の確率で、スキーマを設計する際にXMLフィールドはまったく必要ありません。


4

SQLサーバーでXMLデータ型を見た数回は、基本的にデータベースの他のフィールドと同様にクエリされるフィールドとして使用されます。大量のデータがある場合、パフォーマンスに非常に悪い影響を与える可能性があります。XMLサーバーではなくSQLサーバーと呼ばれる理由があります。:-) XMLに反するクエリは、通常の選択クエリを実行するほど高速ではありません。

ただし、XMLデータ型で完全なXMLドキュメントを保存するが、検索可能なフィールド(キー)をXMLドキュメントとは別に保存するなど、あまり照会されないXMLの保存に使用されていることがわかりました。そうすることで、情報をより高速に照会し、完全なドキュメントを表示したいポイントに到達したときにXMLドキュメントを取得できます。私は実際に戻って、多くのアプリでこれを行わなければなりませんでした。そこでは、人々はXMLデータタイプを頻繁にクエリされるフィールドとして使用しようとしましたが、クエリが遅すぎるほどデータが大きくなりました。


4

主に、ASMX WebサービスまたはWCFサービスに関連するログ記録の目的でXMLタイプフィールドを使用しました。要求または応答メッセージを保存できます。

ほとんどの場合、XMLを参照目的でDBに保存します-通常のビジネスアクティビティではなく(コードから5秒ごとにクエリするのではありません)。そうした場合は、通常クエリを実行するか、ほとんどの時間を使用するフィールドを決定し、それらに個別の列を作成します。そうすれば、XMLをDBに保存するときに、これらのフィールドを抽出して、対応する列に保存できます。後でそれらを取得するときに、この目的で作成した列を使用するだけでXMLドキュメントを照会する必要はありません。


1

これらは、Sql ServerでXmlフィールドを許可するために必要な条件を検討する際に、気まぐれに思い浮かぶシナリオです。

  • リソースの制御のような酸が必要な交換用にエンコードされたバイナリデータ
  • 動的な情報を使用して全体として再構成されるドキュメントフラグメント
  • ユーザーが分離したいドキュメントまたはフラグメントを送信し、少なくとも一時的にファイルシステムを直接オフにします。

-2

データベースへの1回の呼び出しで構造化データを保存するために、クライアントサーバーアプリでXMLを広く使用しています。例として、詳細行を含む請求書を取り上げます。クライアントがビジネスオブジェクトをXMLにシリアル化し、1回の呼び出しでストアドプロシージャに渡すのは簡単です。プロシージャは、挿入または更新が必要かどうかを決定します。親請求書ID(ID列)を取得して詳細レコードに割り当てることができ、すべてサーバー側のトランザクション内で、クライアントが何度も往復する必要はありません。ヘッダーレコードを指定するために20個ほどのパラメーターは必要ありません。また、すべての請求書の行を呼び出す必要はありません。また、多くの場合、クライアントに触れることなく、スキーマを変更したり、ログ/監査を導入したりできます。


なぜダウン投票するのか戸惑っています。ダウンボッターは私を啓発したいですか?
リックブラッドリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.