[英]Java web application & database design
我已經開發了一個帶有Oracle后端的Java工作流Web應用程序。 該工作流程要求用戶填寫一系列清單。
我使用每個檢查表2個表開始了該項目-一個表用於存儲問題,另一個表用於存儲答案。
但是管理層一直在要求更多清單,因此我更改了數據庫方法(如下)。 我想知道這種方法是否很好,或者我正在為以后的麻煩做准備。 我正在重構整個應用程序,因為它沒有遵循MVC方法。 現在是糾正任何數據庫設計問題的時候了。
這是我的新方法:
表格:
CHECKLIST_CLASS
存儲CHECKLIST_CLASS
類型,即質量審核清單,過程審核清單
CHECKLIST_INSTANCE
正在使用的用戶清單。 存儲checklist_class_id,work_flow_id的FK
CHECKLIST_ANSWER
存儲check_list_instance_id,question_id的FK,多選答案
CHECKLIST_QUESTION
存儲question_id,checklist_class_id的FK
我喜歡這種方法,因為我可以動態添加新的檢查列表,而無需添加其他數據庫表。
但它使查詢變得有點復雜,無法確定工作流程中每個清單的狀態。
SELECT TO_CHAR(CALCDATEREQUIRED, 'MM/DD/YYYY') as CALCDATEREQUIRED,
TO_CHAR(CALCAPPROVEIPRDATE, 'MM/DD/YYYY') as CALCAPPROVEIPRDATE,
(SELECT SECTION_I_STATE FROM TPQOT_CALC_MODEL WHERE CHECKLIST_INSTANCE_ID =
SELECT MAX(TPQOT_CHECKLIST_INSTANCE.CHECKLIST_INSTANCE_ID) FROM TPQOT_CHECKLIST_INSTANCE
WHERE TPQOT_CHECKLIST_INSTANCE.CHECKLIST_CLASS_ID='1257877690209' AND
TPQOT_CHECKLIST_INSTANCE.CALC_ID=CALCID AND
TPQOT_CHECKLIST_INSTANCE.CALC_REV=CALCREV) ) AS SECTION_I_STATE,
(SELECT CHECKLIST_STATE AS FINALIZE_CHECKLIST_STATUS FROM TPQOT_CHECKLIST_INSTANCE WHERE CHECKLIST_INSTANCE_ID =
(SELECT MAX(TPQOT_CHECKLIST_INSTANCE.CHECKLIST_INSTANCE_ID) FROM TPQOT_CHECKLIST_INSTANCE
WHERE TPQOT_CHECKLIST_INSTANCE.CHECKLIST_CLASS_ID='1257877690209' AND
TPQOT_CHECKLIST_INSTANCE.CALC_ID=CALCID AND
TPQOT_CHECKLIST_INSTANCE.CALC_REV=CALCREV) ) AS DI4630901_STATE,
(SELECT CHECKLIST_STATE AS FINALIZE_CHECKLIST_STATUS FROM TPQOT_CHECKLIST_INSTANCE WHERE CHECKLIST_INSTANCE_ID =
(SELECT MAX(TPQOT_CHECKLIST_INSTANCE.CHECKLIST_INSTANCE_ID) FROM TPQOT_CHECKLIST_INSTANCE
WHERE TPQOT_CHECKLIST_INSTANCE.CHECKLIST_CLASS_ID='1257877670188' AND
TPQOT_CHECKLIST_INSTANCE.CALC_ID=CALCID AND
TPQOT_CHECKLIST_INSTANCE.CALC_REV=CALCREV) ) AS OPC_STATE,
(SELECT phonebook.lname FROM phonebook WHERE phonebook.badge = xtbl463Calc.CalcOriginator) AS OrigName,
(SELECT phonebook.lname FROM phonebook WHERE phonebook.badge = xtbl463Calc.CalcChecker) AS CheckName,
(SELECT phonebook.lname FROM phonebook WHERE phonebook.badge = xtbl463Calc.CalcReviewer) AS ReviewName,
(SELECT phonebook.lname FROM phonebook WHERE phonebook.badge = xtbl463Calc.CalcApprover) AS ApproveName
FROM xtbl463Calc ORDER BY CALCID;
該查詢的結果集進入哈希表的數組列表,並發送到我的視圖。 我應該繼續使用這種四表方法嗎? 我需要重構查詢嗎? 我認為,一旦我編寫了代表各種清單的所有javabean模型,就可以清理工作。 我只想感覺自己在進行重構工作時走上了正確的道路。
我看不出表結構有多大錯,如果我正確理解了您的描述,它就會存儲應該存儲的結構。
另一方面,查詢看起來確實太復雜了。
在查詢中,有很多查詢是不正確的。 我可以看到三個選項在這里打開:
對於選項2和3,一個子選項是考慮使用視圖。
最后,存在將結果放入哈希表列表中的問題。 我顯然不知道您在什么時間范圍內工作,但是如果您有時間的話,我強烈建議您創建POJO來存儲結果,而不是將它們放在哈希圖中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.