スキーマを大幅に変更する必要があるか、まったく変更する必要があるかどうかはわかりません。スキーマでは、何かを行うためにアプリケーションを使用する必要があります。ここですべてのロジックを実装することはできません。その一部/ほとんどはアプリケーションに含まれます。
私が理解しているように、あなたの仕様によると、実際のボランティア活動はすべて個人によって行われており、その中には会社に関連付けられている人もいれば、そうでない人もいます。あなたのスキーマはすでにこれをキャプチャしています。
それだけで十分だと思います。あなたが言う時:
完了した作業の時間を検証しながら、2 つの方法で実行できます。1 会社は、V1 V2 V3 が 2 時間、3 時間、2 時間完了したことを一元的に宣言し、NGO からの検証のために提出するか、各従業員がこれを手動で処理して提出できるようにすることができます。
これはすでに説明されています。各個人が自分の作業記録を入力するか、アプリケーションが会社に入力を許可します。次に、誰が入力したかに関係なく、NGO がこれらの記録を同じ方法で検証します。
私は NGO と単一のボランティア関係を作成しました。同じテーブルを使用する方法について混乱していますが、会社のような新しいエンティティが NGO とボランティアの間に入り、時間の検証と活動管理を管理できます。
すべてがカバーされていることを確認するために、実際の例を見て両方の使用例を説明しましょう。
実施例
個人、会社なし
個人がサインアップし、volunteers
テーブルに行を作成します。彼らはアクティビティにサインアップし、ngo_activity_applications
テーブルに行を作成します。
NGO はそれらを承認し、表に行を作成し、ngo_activity_members
表の行を削除するか、仕様ngo_activity_applications
を変更します。status
不明です。
個人が何らかの作業を行い、時間をアプリに記録して、ngo_activity_time_validations
テーブルに行を作成します。
NGO は何らかの形で行われた作業を検証し、それをアプリに伝えます。これにより、おそらくテーブル内の行のステータスが変更され、ngo_activity_time_validations
テーブル内に 1 つの集計行または一致する行が作成されvolunteer_validated_times
ます。仕様が不明ですが、どこcost_per_hour
から来たのですか?
会社
会社がサインアップし、3 人のボランティアが含まれる CSV ファイルをアップロードします。これにより、テーブルに行が 1 つ作成され、companies
さらにテーブルに 3 つの行が作成volunteers
され、company_volunteers
リンク テーブルに 3 つの行が作成されます。
Company Volunteer 1 が活動に個別にサインアップし、すべてが上記のように進行します。
会社は別の活動にサインアップし、3 人全員がその活動に参加することを志願しました。これにより、ngo_activity_applications
テーブルに 3 つの行が作成されます。
NGO は 3 つすべてを承認し、テーブルに 3 つの新しい行を作成し、ngo_activity_members
テーブルの行を削除するか、仕様ngo_activity_applications
を変更します。status
不明です。
ボランティアはいくつかの作業を行い、会社は会社のボランティア 1 と 2 に代わってアプリに時間を記録し、会社のボランティア 3 は自分の時間を記録します。
会社のボランティア 1 および 2
会社は、アプリケーションを使用して時間を記録し、テーブルに 2 つの行を作成しngo_activity_time_validations
ます。
Company Volunteer 3
Company Volunteer 3 は、アプリケーションを使用して自分の時間を記録し、ngo_activity_time_validations
テーブルに行を作成します。
NGO は何らかの形で行われた作業を検証し、それをアプリに伝えます。これにより、おそらくテーブル内の行のステータスが変更され、ngo_activity_time_validations
テーブル内に 1 つの集計行または一致する行が作成されvolunteer_validated_times
ます。仕様が不明ですが、どこcost_per_hour
から来たのですか?
概要
volunteer_validated_times
テーブルにクエリJOIN
を実行することで、個人がログに記録した検証済み時間を確認できvolunteers
ます。同じクエリを実行するだけでなく、テーブルに結合することで、会社がログに記録した検証済み時間を確認することもできcompany_volunteers
ます。
可能な変更と質問:
個人が入力したレコードと、会社が個人に代わって入力したレコードを区別できるようcompany_entered
に、テーブルにフラグを追加することができます。ngp_activity_time_validations
アプリケーションに関連するログを記録する場合は、このテーブルにエントリを作成した人物の ID を追加することもできます。
テーブルに行を作成するときにデフォルトとして使用するためhourly_rate
に、テーブルに列を追加したい場合があります。volunteers
cost_per_hour
volunteer_validated_times