2010-12-27 16 views
7

私は約200の設定をユーザに設定しています。これには、通知設定やオブジェクトに対するユーザアクティビティの設定の追跡が含まれます。問題はそれをDBに格納する方法です。各設定を行または列にする必要がありますか? colunmの場合、テーブルは200列になります。行の場合は約3列だが、ユーザーあたり200行x 1000万のユーザーでも不十分です。テーブルにユーザー設定を保存する方法

他にどのようにこれらの設定を保存できますか?注:これらの設定は、テキスト入力と他のテーブルへのFKルックアップの組み合わせです。

ありがとうございました。

+0

一部のフィールドで検索する必要がない場合は、シリアル化して1つのテキストフィールドにすべて保存することができます。私にとっては、1フィールドあたりの列の作成はOKです。検索/選択を向上させるために、user_profile、user_inteface_settings、user _...(個別に使用できるテーブル)のような複数のテーブルに分割することができます。 - 設定を含む汎用テーブルを作成する:(uid、field、value)のような行ごとに1つは、多くのオプションフィールドがあり、200 * 1000000 = 2 000 000 000行のテーブルになる可能性がある場合に便利です。 –

+1

Mdillion - あなたに思い出させるには、あなたを最も助けた答えを「受け入れる」べきです。 –

+0

私の問題はまだ解決されていません。非常に多くの設定があり、ここで言及した両方の方法が適切に動作していません。だから私はいくつかの他の選択肢を模索しています。私が何かを見つけると、私は最も近い答えを受け入れます。 – Mdillion

答えて

3

追跡する200の設定は、柔軟なデータベーススキーマを示唆しています。

  1. ユーザー:ユーザー名やパスワードなどのユーザーは、おそらく常に持つことになります性質のため、ユーザーごとに行を持つテーブルのような私は、ハイブリッドアプローチをお勧めしたいです。このテーブルは外部キーも保持することができますが、これはヒューリスティックであり、関係が0から1または0から多多であるかどうかによっても異なります。後者は別のテーブルが必要です。
  2. 特徴:userIdを、名前と値の列を持つ2つのオプション
    1. 効果的に機能あたりの行を有するテーブル、ハッシュテーブル、。これは外国の関係にとっても役立つかもしれませんが、この設定ではデータの整合性を強制することはできません。
    2. XMLですが、データを照会できる機能を備えたデータベース、または照会する必要がなく、アプリケーションサーバー上でしか動作しないデータのみが含まれます。

私は大きな答えはあなたがあなたの元の質問から1つの解に到達しようとして、代わりにデータを合わせて、両方を使用する必要がされていないと思います。

+0

表が10百万行と言って、ユーザーが設定ページを読み込むための200の設定を見つける必要がある場合は、時間を読み込みますか?ユーザーにページの瞬間が表示されるのか、ユーザーページを検索して読み込むのに1分ほどかかるのでしょうか? – Mdillion

+0

正しいインデックスでは、読み込み時間は良いはずです。つまり、アクセス権のチェックが必要になるたびに、データベースの再試行を繰り返すのではなく、ユーザーのセッションの一環としてログイン時に情報を一度ロードすることをお勧めします。 – orangepips

2

私は、格納されたprocsの作成、手作業でのデータの表示、または後でもっと多くの設定への拡張が難しいため、200列は間違いなく良い考えではないと思います。

これらの200個の設定すべてに対してXMLを試してみると、ユーザーあたり1行しか持てません。ユーザー名と対応する設定xml。しかし、これもまたクエリ機能を制限しますが、DBは現在XMLをサポートしています。 XML DBを具体的にチェックアウトすることができます。

+0

FKをXMLに入れることはできますか? – Mdillion

+0

詳細はわかりませんが、できます。これを読んでください:http://www.stylusstudio.com/xsllist/200205/post70200.html http://msdn.microsoft.com/en-us/library/ms345117(v=sql.90).aspx –

4

データをシリアル化することは、ほとんどの場合、悪い考えであることが判明します。なぜなら、そうすることでdbmsが壊れてしまうからです。効率的なdbmsを作成するために行われた人類の年々は、シリアル化された一連のビットで無駄になります。設定テーブルに設定あたり

1列:あなたは、各設定に対してフックアップするアプリケーション・ロジックを使用している場合

は、私はあなたがどちらかとして、それを実装するべきだと思います。 これにより、制約チェック、参照整合性、値の正しいデータ型、オプティマイザに多くの情報を提供しながら、dbmsの機能を活用しやすくなります。欠点は、行のサイズが大きくなることです。

又は

1セットあたりのテーブル(または関連設定のグループ)。 これは上記の利点のすべてを持っていますが、ほとんどまたはすべての設定を一度に取得する必要がある場合は、パフォーマンスペナルティのために行を整理します。設定がオプションの場合、実際のデータがまばらな場合、この選択肢は大幅に小さくなります。

また、多くの列はしばしば「匂い」であり、データを正しく正規化していないことを示していますが、そのようにする必要はありません。あなただけがあなたのデータを知っています。

+0

多くの列は、「ユーザーの活動ごとのプライバシーレベル」が原因です。各ユーザアクティビティは、ユーザ定義のプライバシーレベル、デフォルトのシステム定義のプライバシーレベルを有する。システムの設定には問題はありませんが、200個のアクティビティがそれぞれ独自の設定である場合、ユーザーの設定が間に合わなくなります。 – Mdillion

関連する問題