私はデータベース設計に不慣れで、プロジェクトのトリガーとビューの選択についてこの質問があります。以下に詳細を示します。
使用データベース:MySQL
Table 1:
Name: - no limit on number of values
Level: - four values are possible - 1,2,3,4
Status: - four values are possible - a,b,c,d
各名前は、レベルとステータスのすべての組み合わせを保持できます (必須ではありませんが、可能です)。
例:
名前:「キング」は、レベル1のステータスa、レベル1のステータスb、……、レベル2のステータスa、レベル2のステータスb……、レベル3のステータスa、レベル3、ステータスb……を保持することができます。 ..
ここで、データベースにクエリを実行して、ネットワーク経由で動作する GUI (Java Swing) を介してユーザーに表示するための計算を行う必要があります。必要な計算は...
各名前の各レベルの各ステータスの数。例えば:
キングのレベル1の「ステータスa」の数。キングのレベル1の「ステータスb」の数。キングのレベル1の「ステータスc」の数。キングのレベル1の「ステータスd」の数。キングのレベル 2 の「ステータス a」の数。すぐ....
名前--- レベル--- ステータス
キング--- 1 --- a
キング--- 1 --- a
キング--- 1 --- a
キング--- 1 --- b
キング--- 1 --- b
キング--- 1 --- 日
レベル 2 も同様で、別の名前も同様です。名前「King」のレベル 1 のカウントをしたい
このデータを取得するために個別のクエリを実行すると、20 個の名前がある場合、320 個のクエリを実行する必要があります。私はしたくない。ここには2つの解決策があります...
解決策 1. トリガーを作成しました。
表 2 を作成しました。
Name,Level,a_count,b_count,c_count,d_count
King 1 3 2 0 0
xyz 1 ... ..... .... ...
元の表 1 が更新されると、それに応じてトリガーがカウントに追加されます。今、私はこの table2 から直接読み取ります。
解決策 2: このデータを表示するビューを作成しました。
名前 -- レベル -- ステータス -- カウント
キング 1 a 3
キング1b2
キング2 ...
後で。
このソリューションを使用すると、常にネットワーク経由ですべてのクエリを送信する必要がなくなります。ビューを一度だけ呼び出すことができます(とにかくすべてのクエリを実行しますが、プログラムから実行する必要はありません)
両方を実装できますが、どちらのソリューションがより効率的かを知りたいです。(フロントエンドを使用して) 各ユーザーの親テーブルに約 2000 行があり、ユーザーは任意の数にすることができます。提案してください。
ありがとう、ラージュ