SQL Server を使用しています。
一部の列がクエリで使用されていない列が多数あるテーブルがあります。
私の質問は、それらを blob または XML 列として 1 つの列に保存しないのはなぜですか?
やらない理由やデメリットはありますか?
SQL Server を使用しています。
一部の列がクエリで使用されていない列が多数あるテーブルがあります。
私の質問は、それらを blob または XML 列として 1 つの列に保存しないのはなぜですか?
やらない理由やデメリットはありますか?
私は常に、データ ストレージの世界ではすべてがトレードオフであるとお客様に伝えています。RDBMS は、耐久性、分離、一貫性、原子性 (一般に ACID と呼ばれます) などを提供します。ただし、これには、かなり複雑で厳格なスキーマのセットアップとメンテナンスの要件、さらにはデータによってはパフォーマンスが犠牲になります。
自分自身 (または利害関係者) に尋ねる必要があるのは、そのデータが何のために必要なのか、どのような状況でアクセスする必要があるのか、そのような場合にデータを待機できる時間はどれくらいかということです。次に、次のようなすべてのソリューションの長所と短所を書き留める必要があります。
列を分ける
文字列ブロブ
XML
現在、これは完全なリストではありません。言及されたポイントのいくつかは、あるプロジェクトにとっては利点であるかもしれませんが、別のプロジェクトにとっては欠点かもしれません. すべてのメリットとデメリットを理解したら、自分の状況に適した方法を見つけやすくなります。
このデータの唯一の使用例がアプリケーション サーバーが全体を取得する場合、それは明らかに「複数の値」ではなく 1 つの値です。確かに、クライアント アプリは文字列をいくつかの部分に解析する必要がありますが、データベースは気にしません。
したがって、これを単一の列として格納することは非常に正当です。
ただし、コメントで次のように述べています。
「ほとんどの情報は、データベースと通信するアプリケーション サーバーによって使用されます。情報を保存して情報を取得する必要がありますが、ほとんどの列で結果をフィルタリングする必要はありません。」
「ほとんど」は「すべて」と同じではありません。データベースが列の内容についてある程度のインテリジェンスを実行する必要がある場合は、問題があり、実際には別の列 (必要に応じてキーと値のペア) または XML として格納する必要があります。