0

JSF 2.0 と MySQL を使用して新しい Web サイトを作成しています。以下は私が持っているものです。

ここの各表では、説明のために 1 ~ 2 つのフィールドのみを考慮しています。実際には、要件に応じて多くのフィールドがあります。

n 人の応募者がいます。

ApplicantDataTable
+++++++++++++++++++
 appId     PK
 appName
+++++++++++++++++++

各応募者には多くのプロジェクトがあります。

ProjectDataTable
+++++++++++++++++++
 proId     PK
 proName
 appId     FK
+++++++++++++++++++

各プロジェクトには多くの段階があり、各段階でデータを入力する必要があります。

stage1datatable
+++++++++++++++++++
 stg001id   PK 
 proId      FK
 stg001name
+++++++++++++++++++

stage2datatable
+++++++++++++++++++
 stg002id   PK 
 proId      FK
 stg002name
+++++++++++++++++++

応募者画面には、応募者のリストが表示されます。これをクリックすると、その応募者のプロジェクトのリストが表示されます。それをクリックすると、ステージ 1 の画面が表示され、ステージ 1 の画面の下部にステージ 2、3、4 などへのリンクが表示されます。

すべての段階で ProjectId と appId を取得する必要があることがわかりました。そのため、projectId と appId を持つ Bean をセッション スコープに保持する必要があるかどうかわかりません。Java で Bean をどのように構築すればよいか教えてもらえますか?

どんな提案も素晴らしいでしょう。

4

1 に答える 1

1

理想的には、セッション スコープはユース ケースで機能します。つまり、両方の ID をセッション スコープに保存しますが、実際にはやり過ぎかもしれません。両方の ID が処理される (したがって、スコープに復元できる) 場合は、それらをflash スコープに保持することができます。各宛先ページでこれらの ID にアクセスできます。次のリクエストで ID が必要な場合は、同じスコープに再保存するだけです。こうすれば無駄がなくなります。メソッドを使用してputNow()、リクエストが完了した後に変数が使用可能であることを保証します。

あなたの質問とは関係ありませんが、あなたのデータ モデルにいくつかの懸念があることに気付きました。

  1. appName2 つのテーブルで変数を複製するのはなぜですか? 不必要な非正規化のように見えます

  2. プロジェクトの段階ごとにテーブルを作成すると、近い将来、問題が発生します。プロジェクト ステージが 2 つまたは 3 つを超えないことが絶対に確実でない限り、すべてのプロジェクト ステージを 1 つのテーブルに統合しproject_stage_id、そのテーブルにフィールドとして を追加することを強くお勧めします。一意のキー制約とトリガーの組み合わせを使用して、重複が発生しないようにし、プロジェクト ステージ ID がプロジェクトごとに連続していることを確認します (必要な場合)。

于 2012-11-28T20:44:33.920 に答える