[英]Database Design for Audit: Many Rows for Answers vs Many Columns
我正在SQL Server 2008數據庫中設計一個表結構,該表結構將保存審核結果。 審核當前有65個問題,可能的答案為0-4或不適用。 下面介紹了我為保存此數據(仍在測試中)而創建的表結構。 提交后,將在AuditDetail表中為每個問題創建一條記錄。 如果選擇的答案是0、1或2,則用戶必須輸入詳細信息,說明其原因,原因,解決方法和責任人(這將在AuditIssue表中創建記錄)。 每個問題由兩個不同的類別描述,分別稱為QuestionCategory和ItemCategory。
我關心的問題是,在當前的表設計中,對於每次提交的審核,65行都添加到AuditDetail表中。 該審核每月至少需要完成70次(許多部門都在使用)。 因此,此表結構將每月向AuditDetail表中添加大約4550行。 我擔心這可能會對將來的性能產生負面影響,並希望避免在將其移入生產環境后不得不重新設計表結構。
我唯一能想到的其他解決方案是,將AuditDetail表替換為一個表,該表的每個問題都有一列,並將每次審核的分數存儲在65行以上的1行中。
我覺得我當前的設計遵循規范化規則,但是我認為不會為每個問題創建一列。 我幾乎可以肯定,這些問題會在將來(可能很多次)發生變化,包括添加/刪除問題以及更改現有問題。
我在尋找此問題的答案時將我引到以下兩個來源:
多行或多列
將答案存儲在列中
我了解每次問題更改時添加/刪除列都是不理想的。 我的問題是,每月創建4550行會嚴重影響查詢的性能嗎? 我不知道我的情況是否與“在列中存儲答案”中描述的情況相同,因為似乎他們的表中只會有100行。 如果查詢的性能將大大降低,是否有我沒有想到的更好的表結構?
我的查詢將主要用於生成圖表,顯示每月完成的審計總數,未解決的問題與未解決的問題,過期的問題,產生問題的前10個問題以及每月或每日的審計得分(答案/每個問題的總可能得分類別或答案/總的可能得分)。 這些圖表中的每一個都需要按部門,月份,區域等進行分類。
坦白:我傾向於最終使用相關子查詢來生成其中一些圖表,我知道這些圖表已經降低了查詢性能。 我嘗試解決這些問題,但是由於我不是SQL管理員,所以最終陷入了困境。
我用於測試的當前表結構如下:
**AuditMain:**
--AuditId <-- PK
--DeptNumber <-- FK to Dept Table
--AuditorId <-- FK to Auditor Table
--StartDate
--Area_Id <-- FK to Area Table
**AuditDetail**
--DetailId <-- PK
--QuestionId <-- FK to Question Table
--Answer
--NotApplicable (boolean to determine if they chose N/A, needed to calcualte audit score)
--AuditId <-- FK to AuditMain
**AuditIssue**
--IssueId <-- PK
--IssueDescription
--Countermeasure
--PersonResponsible
--Status
--DueDate
--EndDate
--DetailId <--FK to AuditDetail
**AuditQuestion**
--QuestionId <-- PK
--QuestionNumber (corresponds to the question number on the audit input form)
--QuestionDescription
--QuestionCategoryId <-- FK to QuestionCategory
--ItemCategoryId <-- FK to ItemCategory
**QuestionCategory**
--QuestionCategoryId <-- PK
--CategoryDescription
--CategoryName
**ItemCategory**
--ItemCategoryId <--PK
--ItemCategoryDescription
感謝您閱讀過多的解釋。 我想提供太多而不是太多的信息,但是如果需要更多信息,請告訴我。 我感謝所有建議!
除非您的生產環境嚴重不足,否則它應該能夠在一個表中容納半百萬行而不會嚴重降低性能。 檢索性能將極大地受到用於查詢的字段以及在其上建立索引的字段的影響。 這可以使浪費時間和等待分鍾數有所不同。
這里沒有太多細節可講,但是有許多關於數據庫設計的優秀教程。 這些最佳教程將教您如何不僅為性能而設計,而且為將來的靈活性而設計,這同樣重要。
乍一看,您的表結構看起來非常不錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.