0

次の種類のリクエストテーブルがあります。

oversea_study_request
course_request
leave_request

これらのリクエスト機能では、承認担当者は複数のコメントを投稿し、リクエストを承認または却下することもできます。システムは、実行されたアクションの履歴を取得できる必要があります。

それを設計する最良の方法は何ですか?

  • 承認情報と備考を格納するための共通テーブルを作成する必要がありますか。
  • 代わりに、承認情報とコメントを各要求テーブルに格納する必要があります。

誰かが各アプローチの長所と短所についてアドバイスできますか?

4

1 に答える 1

4

ここでのフィールド編成の質問に似ています:ユーザーのステータスの変化を考慮してデータベースをより適切に編成する方法; そしてそこに私の答え

すべてのリクエストに、必須 ( ) やオプションなどを含む同じフィールド、フィールド タイプ、および情報がある場合は、すべてのリクエストを 1 つのテーブルに入れることをお勧めします。1 つのフィールドを に指定し、効率と SQL の利便性のために int を指定するか、ENUM タイプを指定します。例:NOT NULLrequestsrequest_type

overseas study = 1
course = 2
leave = 3

同様に、approvalsテーブルにもそれを行います...プロセスが各タイプで同じ場合は、それらをまとめて保存します。リクエスト ID ( requests.id) を格納します。複数の承認コメントと承認+却下が可能なので、 と に格納approvals.actionapprovals.action_dateます。「アクション」が「承認/却下」から独立している場合、つまり、承認/却下せずにコメントを投稿できる場合、またはコメントなしで承認/却下できる場合は、actionsと をcomments別々に保存し、request.id.

だからあなたは持っています:

Table1: requests
    id INT
    request_type INT (or ENUM)
    request_date DATETIME
    ...

Table2: approvals (or 'actions', to be general)
    id
    request_id    # (refers to requests.id above)
    action_type   # (approve or reject)
    action_date
    comment

コメントと承認が必ずしも一緒ではない場合:

Table2: actions
    id, request_id, action_type, action_date

Table3: comments
    id, request_id, comment, comment_date

そしてもちろん、user_id、username などのテーブル/フィールドを追加します。(id各テーブルの はそれ自身の主キーです)

SELECT各リクエスト + アクション + コメントは、aとLEFT JOINsで見つけることができます

ところで、それは「海外」留学であり、「海外」留学ではありません - 飛行機でのコースではありません;-)

于 2012-08-29T08:28:36.223 に答える