XMLデータ型を使用する場合


12

プロジェクトでデータベースを作成する責任があります。まれに値を持つフィールド(10,000レコードごとに1つ)があり、これをデータベースに格納する最適な方法を探しています。

私が見る限り、3つのオプションがあります:

  1. 余分な値ごとにテーブルに列を追加します
  2. 元のテーブルを参照し、値を保存する必要がある場所にのみレコードを持つリンクテーブルを追加します。
  3. 元のテーブルのXMLデータ型を使用し、すべての値をこれに保存します。

私が検討していない他のオプションはありますか?

私は各方法の長所と短所を解決しようとしています。私が知る限り、1が最も簡単で、2が最小のスペースで済みますが、3のリソースを見つけるのに苦労しています。


1
データベース内のxmlの不正使用に対する個人的な暴言を追加するには、タイトルの質問に直接回答し、大きな脂肪を言うでしょう:絶対に!質問の実際の本文については、既に非常に良い回答が得られているので、同僚に助けてもらいます:-)。PS:あなたは実際に私の最初の文を無視することができます。
マリアン

いくつの追加フィールドについて話しているのですか?そして、彼らは同じエンティティの一部であることが理にかなっていますか?
アンドリュービッカートン

回答:


12

必要なのは、スパース列フィルター選択されたインデックスであり、オプション1を使用するように聞こえます。これらは、まさにこのシナリオで完全にサポートされ、文書化された機能です。

SQL Serverデータベースエンジンは、列定義でSPARSEキーワードを使用して、その列の値の格納を最適化します。したがって、テーブル内の行の列値がNULLの場合、値はストレージを必要としません。

このシナリオでXMLソリューションが適切に機能することは想像できません。冗長なメタデータの大きなオーバーヘッドがあり、クエリが遅くなります。


1
スパース列は私が求めているものだと思います。特定のテーブルのほんの一握りの列に、非常に少量のデータが格納されると予想しています。
マシュースティープルズ

私がこれを読んでいるかどうかはわかりませんが、このリンクによれば、スパース列は基本的に私が3のために探していたもののデータベース実装です。blog.sqlauthority.com/2008/07/14/...
マシュー尖塔

それがそのように内部的に実装されている場合(そしてそれが誰かのブログであることはわかりません)、あなたはXMLを自分で処理したり解析したりする必要はありません-それは通常のテーブルとまったく同じように動作しますデータ型)上
ガイウス

5
  1. SQL Serverの可変長の場合、null許容列はスペースを取りません。NULLであるという事実は、NULLビットマップに格納されます。必要に応じてフィルターインデックスでインデックスを作成して、NULL列を無視できます。

  2. ポイント1を考慮すると、複雑さが増します。

  3. しないでください。あなたは:パースなど、検索するのは難しいだろう、この後のを後悔

サイズにも依存します:これは数十億行のchar(1000)でしょうか?または10万行のtinyint?後者がポイント2の追加された複雑さを考慮する場合:価値がない。


ヌルであるヌル可能列がスペースをとらないという参照がありますか。nullかどうかはnullビットマップに格納されていることを認識していましたが、固定長フィールドではデータはまだテーブルに格納されていると考えました。私は、これらの値のほとんどのために使うことになるデータ型はお金である(その8バイト)
マシュー尖塔

1
@Matthew Steeples:可変長にはスペースはもう必要ないと言った。また、参照用にsqlskills.com/BLOGS/PAUL/category/On-Disk-Structures.aspx#p41これらの8バイトの行はどのようになりますか?
gbn

現時点では50万行ですが、適切に稼働すれば、平日約100万の割合で(願わくば)拡大します。
マシュースティープルズ

3

SQL Server 2008には、スパース列を使用する追加オプションがあります。これは、言及した状況に合わせて特別に設計されています。

XML COLUMN_SETを使用して結合されたXMLオブジェクトとして表示したり、個別に参照したりできるため、スペースを大幅に節約できるという利点があります。

詳細については、次のブログ記事をご覧ください。http//www.sqlskills.com/BLOGS/PAUL/post/SQL-Server-2008-Sparse-columns-and-XML-COLUMN_SET.aspx


-4

4番目のオプション:テーブルを使用しないでください。テーブルは、この種のデータ(実際には、表形式に強制的に適合されていないあらゆる種類のデータ)に非常に適していません。XMLを使用してください。


3
-1は「テーブルを使用しない」がオプションであることは事実であるが、答えは明らかに、テーブル構造に対する暴言を述べており、実際に有用な回答を提出していないことである。
アンドリュービッカートン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.