2012-08-23 60 views
0

我有以下各種要求的表:如何設計數據庫請求/審批表?

oversea_study_request 
course_request 
leave_request 
這些請求函數

,覈准人可以發佈多的言論,也批准或拒絕該請求。系統必須能夠捕捉所採取行動的歷史。

什麼是最好的設計方法?

  • 我應該創建一個公用表來存儲批准信息和備註。
  • 我是否應該在每個請求表中存儲批准信息和備註。

有人可以建議每種方法的利弊嗎?

+0

是否所有請求類型的備註和審批是統一的?另外,可以在請求本身被批准之前輸入備註嗎?他們可以在_after_後輸入嗎?哪些信息與每條評論相關聯 - 它們是否包含時間戳,並且當您說「歷史記錄」時是否引用這些時間戳?還有什麼可以告訴我們關於「歷史」的嗎?你需要有一個預定義的批准「步驟」列表(如在文檔管理或PDM系統中)?此外,您正在使用哪些DBMS,並打算利用[集羣](http://use-the-index-luke.com/sql/clustering/index-organized-clustered-index)? –

+0

我接受了答案。任何人都可以建議嗎? – user1503699

回答

3

類似字段組織的問題在這裏:How to better organise database to account for changing status in users;和my answer there

如果所有的請求有相同的字段,字段類型和信息,包括強制性的(NOT NULL)和可選的,等等,那麼這是更好地把所有的請求到一個requests。指定一個字段爲request_type,其中int爲效率和SQL便利性,或者爲ENUM type。例如:

overseas study = 1 
course = 2 
leave = 3 

同樣,這樣做對於approvals表還...如果該過程是針對每種類型相同,則存儲那些在一起。存儲請求ID(requests.id)。由於您有多個批准意見和批准+拒絕可能,請將它們存儲在approvals.actionapprovals.action_date中。如果「行爲」與「批准/拒絕」無關 - 也就是說,如果您可以在不批准/拒絕的情況下發布評論,或者如果您可以批准/拒絕而不發表評論 - 則分別存儲actionscomments,幷包括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的,用戶名等表/字段。 (每個表中的id是它自己的主鍵)

每個請求+動作+評論可以用SELECTLEFT JOIN小號

順便說一句,這是「海外」的研究,而不是「海外」的研究發現 - 這不是飛機上的課程 ;-)