我有以下各種要求的表:如何設計數據庫請求/審批表?
oversea_study_request
course_request
leave_request
這些請求函數
,覈准人可以發佈多的言論,也批准或拒絕該請求。系統必須能夠捕捉所採取行動的歷史。
什麼是最好的設計方法?
- 我應該創建一個公用表來存儲批准信息和備註。
- 我是否應該在每個請求表中存儲批准信息和備註。
有人可以建議每種方法的利弊嗎?
我有以下各種要求的表:如何設計數據庫請求/審批表?
oversea_study_request
course_request
leave_request
這些請求函數
,覈准人可以發佈多的言論,也批准或拒絕該請求。系統必須能夠捕捉所採取行動的歷史。
什麼是最好的設計方法?
有人可以建議每種方法的利弊嗎?
類似字段組織的問題在這裏: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.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的,用戶名等表/字段。 (每個表中的id
是它自己的主鍵)
每個請求+動作+評論可以用SELECT
和LEFT JOIN
小號
順便說一句,這是「海外」的研究,而不是「海外」的研究發現 - 這不是飛機上的課程 ;-)
是否所有請求類型的備註和審批是統一的?另外,可以在請求本身被批准之前輸入備註嗎?他們可以在_after_後輸入嗎?哪些信息與每條評論相關聯 - 它們是否包含時間戳,並且當您說「歷史記錄」時是否引用這些時間戳?還有什麼可以告訴我們關於「歷史」的嗎?你需要有一個預定義的批准「步驟」列表(如在文檔管理或PDM系統中)?此外,您正在使用哪些DBMS,並打算利用[集羣](http://use-the-index-luke.com/sql/clustering/index-organized-clustered-index)? –
我接受了答案。任何人都可以建議嗎? – user1503699