2009-07-03 6 views
1

さまざまなユーザーデータをシリアル化されたバイナリとしてデータベースに格納することをお勧めしますか?それは良い、悪い、または本当に醜い考えですか?C#、SQL:データベースに任意のユーザーデータをシリアル化されたバイナリとして格納する

フォーム上の最後のスプリッタ距離、検索テキストボックスの最後の値、先行して選択されたチェックボックスインデックスなどがあります。それを忘れてしまった場合、覚えておくべき事柄は重要ではありません。

私は、例えば、userid、source、key、valueという4つの列を持つテーブルが1つだけ必要なので、私はそれなりのものです。そして、このテーブルに値を保存して読み込む素晴らしいラッパークラスを作成すれば、うまくいくでしょう。たとえば、新しい種類の設定が再生されるたびにデータベースを修正する必要はありません。

検索や発注などではうまくいきませんが、インデックス(user id + source + key)からキー値のペアに直接アクセスするだけなので、これは必要ありません。列は人間が読めるものではありませんが、実際には問題にはなりません。データは、大きな問題なしにクリアできるデータです。

このアイデアについてのご意見はありますか?それはひどいものですか?それはいいですか?似たようなことをしましたか?

答えて

3

あなたは検索していないので、誤ったユーザーデータの不透明なコンテナであり、重要な情報は含まれていません。そして正しいですが、新しい設定の設定をサポートするためにデータベースを変更する必要はありません。

0

私はちょうどASP.NET 2.0 Profile APIに関して読んだことを思い出しました。

私は、MSDN

から

を引用してみましょうASP.NETプロファイル機能は、個々のユーザーと情報を関連付け、永続的な形式で情報を格納します。プロファイルを使用すると、独自のデータベースを作成および保守することなく、ユーザー情報を管理できます。さらに、ASP.NETプロファイル機能により、アプリケーションのどこからでもアクセスできる厳密に型指定されたAPIを使用して、ユーザー情報を利用できるようになります。

プロファイルを使用して任意のタイプのオブジェクトを保存できます。プロファイル機能は、一般的なストレージ機能を提供します。これにより、ほぼすべての種類のデータを定義および維持しながら、データを型保証された方法で利用できるようにします。

よろしく、

ハディのTEO

+0

通常のC#アプリケーションに類似したものはありますか? – Svish

+0

@スヴィッシュ、残念ながら、これはASP.NET Web Appsにのみ適用されます。ごめんなさい。 –

3

私たちのオブジェクトは非常にクライアント/インストールごとにカスタマイズされているので、私は、このすべての時間を使用します。このようにして、&のプロパティを削除してデータベースを更新することなく追加できます。

1行に約200〜300のプロパティが必要です。私はこのアプローチが私に良い柔軟性を与えることを見出しました。

私のバイナリ構造には常にバージョン番号が含まれています。だから私はそれから何のデータを取得できるのか知っている。

一部のサブオブジェクトには、タイプ名も含まれているため、継承ツリーからオブジェクトを保存できます。 (私はあなたが私が何を意味するかを理解してほしい)。

+0

どのようにバージョンデータを使用しますか?私の場合は、デフォルト値に戻って、不一致が発生した場合は古い値を上書きすると思います。 – Svish

+0

バージョン名とタイプ名は+1です。それがなければ、古いデータを安全に非直列化するのが少し難しくなります。 –

+0

@Svish、私は同じことをします。データが存在しないときは、デフォルト値をとります。 – GvS

1

バイナリシリアル化ではなく、XMLシリアル化の方がいいでしょう。前者の場合と同様に、クラスが進化するにつれて、下位互換性に特別な注意を払う必要はありません。

0

ちょうど議論に逆張り声で追加したい:

シリアライズされたオブジェクトに置くことによって、あなたはデータ(明らかに)に可視性を失うが、あなたはまた、プラットフォームに依存します。リレーショナル表で物事を維持することで、選択したクライアントがデータを読み取ることができるようになりました。将来変更する場合(または別のものを追加する場合)、同じデータを再利用する能力は失われます。クライアントとデータを分けてください。

関連する問題