28

コンテキスト: SQL Server 2008、C#

整数の配列(0〜10要素)があります。データは頻繁には変更されませんが、頻繁に取得されます。

数値を格納する別のテーブルを作成することもできますが、何らかの理由でそれは最適ではないように感じます。

質問 #1:配列を別のテーブルに格納する必要がありますか? どちらかの理由でお願いします。

質問 #2: (Q#1 への回答に関係なく)、データベース フィールドに int[] を格納する「最良の」方法は何ですか? XML? ジェイソン?CSV?

編集: いくつかの背景: 格納されている数値は、関係に関与しない係数であり、常に配列として使用されます (つまり、値が取得されたり、単独で使用されることはありません)。

4

6 に答える 6

57

別表、正規化

XML や json ではなく、別々の行に別々の数字

何を考えても、それが最善の方法です。後で私に感謝することができます

于 2011-03-17T15:28:56.137 に答える
15

データベースにデータを格納する「最良の」方法は、データベースに対して実行される操作を最も助長し、メンテナンスを最も簡単にする方法です。正規化されたソリューションにつながるのは、この後の要件です。これは、関係を持つテーブルに整数を格納することを意味します。更新が簡単になるだけでなく、次の開発者が、どのような情報がどのように保存されているかを理解しやすくなります。

于 2011-03-17T15:30:43.947 に答える
7

これをJSON配列として保存しますが、すべてのアクセスが配列全体に対して行われるようになることを知ってください。特定の係数に対する個別の読み取り/書き込みはありません。

この例では、それらをjson配列として格納しています。あなたの場合のように、個々の配列番号の間に関係はありません-配列はユニットとしてのみ意味があり、ユニットとしてそれはテーブルの他の列と関係があります。ちなみに、他のすべては正規化されています。私はこれに例えます。10バイトのチャンクを格納する場合は、VARBINARY(10)の単一の列にパックして保存します。それを10バイトに分割せず、それぞれをVARBINARY(1)の列に格納してから、外部キーでそれらをつなぎ合わせます。私はあなたができることを意味します-しかしそれは意味がありません。

開発者としてのあなたは、intの配列が実際にどのように「モノリシック」であるかを理解する必要があります。

于 2012-11-21T01:49:59.850 に答える
3

別のテーブルは、これを行うための最も「正規化された」方法です。また、各整数を抽出するために列の値を解析する必要がないため、おそらく長期的には優れています。

必要に応じて、 XML 列を使用してデータを保存することもできます。

スパース列も別の選択肢かもしれません。

本当にシンプルに保ちたい場合は、値を区切ることができます:10;2;44;1

于 2011-03-17T15:26:16.770 に答える
1

あなたのアプリがデータ駆動型アプリケーションである可能性があることを示すSQLサーバーについて話していると思います。その場合、データベース内の配列を、各値のレコードを持つ個別のテーブルとして確実に保持します。検索用に正規化および最適化されます。配列にいくつかの値しかない場合でも、そのデータを、配列値と「結合」する必要がある他の取得データと組み合わせる必要がある場合があります。その場合、sql はインデックス、外部キーなどを使用して最適化されます (正規化)。

そうは言っても、値を変更する必要がない場合は、コードに 10 個の値をいつでもハード コードして、DB へのラウンド トリップを保存できます。アプリケーションがどのように機能するか、およびこの配列が何に使用されるかによって異なります。

于 2011-03-17T15:37:01.913 に答える
0

別の正規化されたテーブルが最適であることについて、他のすべての人に同意します。ただし、すべてを同じテーブルに入れたい場合は、配列を 1 つの列だけに配置しないでください。代わりに、10 個の列を作成し、各配列値を別の列に格納します。これにより、解析と更新の問題が解決されます。

于 2011-03-17T15:48:44.530 に答える