2009-03-05 1 views
3

ユーザー設定を含むアプリケーションのデータベースを設計しました。このデータベースには、いくつかのシステムユーザー設定がプリロードされています。これらはバージョンによって異なる場合があります。どのようにこれらの設定を更新する必要がありますか?私が思いついた'システムデータ'はデータベースにあるべきですか?

ソリューション:

  1. が設定テーブルにブール「システム」フィールドを適用し、すべてのシステム設定を交換するときに、データベースの変更のバージョン番号。
  2. システム設定をデータベースに置かず、システムのデータを照会するときにデータベースのデータとマージしないでください。

現在、私は最初のことをやっていますが、何とか2番目の方が適切です。 Microsoft Entity Frameworkを使用する際に、外部データとデータベースのデータをシームレスに結合するにはどうすればよいですか。

+0

「システムユーザー設定」とは何ですか?デフォルトのユーザー設定を意味しますか? –

+0

私はゲームのコレクションを書いています。これらのゲームの船には、各ゲームのいくつかのデフォルトのシステム設定が付属します。ユーザーは自分の設定を行い、代わりにこれらを使用することができます。 – Wouter

答えて

1

シンプルな組合(システムの設定にマッチする人を見たり、気にしない人を見るために内部結合と外部結合)を超えてデータを実行したい場合があります。ユーザデータと同じ構造のシステムデータ。

これにより、ユーザーの特定の価値がない場合に、システムデータのデフォルト値を入力するような動作も可能になります。

かなり長い時間を読む時間があれば、this blog postの設定と上書きの管理についていくつか興味深い点があります。

0

ユーザーのデフォルト値を最初に読み込み、ユーザーのカスタマイズした値を上にロードします。こうすることで、デフォルトを変更することはできますが、ユーザーが特定の設定を変更した場合、その設定を失うことはありません。

0

私は1)で達成したいとは思っていませんが、私は2)答えてもいいです。

生成されたエンティティクラスはすべて部分クラスであるため、独自のプロパティとメソッドでこれらを拡張できます。そのため、外部ソース(設定ファイルなど)からデータを取得するエンティティに追加のプロパティを追加できます。

これは、一度に必要なすべての情報を取得する方法がないため(たとえば、多数のエンティティを取得するなど)、最適なソリューションではない可能性があります。

0

これは本当にあなたの質問になっているのかどうかはわかりませんが、面白い小さなデータベース演習だと思いました。あなたは#1に提案するよう、「設定」と呼ばれるテーブルがあるとします。

+------------+--------------+-----------+---------------+ 
| setting_id | setting_name | is_system | setting_value | 
+------------+--------------+-----------+---------------+ 
|   3 | foo   |   1 | Blue   | 
|   4 | foo   |   0 | Red   | 
|   5 | bar   |   1 | Green   | 
|   6 | baz   |   1 | Yellow  | 
|   7 | baz   |   0 | Orange  | 
|   8 | quux   |   0 | Purple  | 
+------------+--------------+-----------+---------------+ 

主キーがsetting_idになり、ユニーク制約が(ブール値である)の列setting_nameis_systemに適用されます。(ユーザー設定のオーバーライドシステム設定を仮定して)現在アクティブな設定のすべてを検索するに

、次のクエリは、仕事をするクエリを実行する

SELECT setting_name, setting_value 
FROM setting s 
WHERE is_system = (
       SELECT MIN(is_system) 
       FROM setting si 
       WHERE s.setting_name = si.setting_name 
     ); 

は、この結果を生成します。

+--------------+---------------+ 
| setting_name | setting_value | 
+--------------+---------------+ 
| foo   | Red   | 
| bar   | Green   | 
| baz   | Orange  | 
| quux   | Purple  | 
+--------------+---------------+ 

したがって、ユーザー設定が存在する場合はフェッチされ、そうでない場合はシステムのデフォルトが代わりに使用されます。

このように、MIN()関数を使用することは、ブール値で操作するのに奇妙な方法ですが、十分に簡単です。

関連する問題