ここでのフィールド編成の質問に似ています:ユーザーのステータスの変化を考慮してデータベースをより適切に編成する方法; そしてそこに私の答え:
すべてのリクエストに、必須 ( ) やオプションなどを含む同じフィールド、フィールド タイプ、および情報がある場合は、すべてのリクエストを 1 つのテーブルに入れることをお勧めします。1 つのフィールドを に指定し、効率と SQL の利便性のために int を指定するか、ENUM タイプを指定します。例:NOT NULL
requests
request_type
overseas study = 1
course = 2
leave = 3
同様に、approvals
テーブルにもそれを行います...プロセスが各タイプで同じ場合は、それらをまとめて保存します。リクエスト ID ( requests.id
) を格納します。複数の承認コメントと承認+却下が可能なので、 と に格納approvals.action
しapprovals.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 JOIN
sで見つけることができます
ところで、それは「海外」留学であり、「海外」留学ではありません - 飛行機でのコースではありません;-)