對於我正在開發的公司正在進行的項目,我們需要爲用戶執行的各種任務(對系統中的表進行的更改)進行審計(存儲日誌)。目前,只有三種不同類型的任務。但這可能會在未來增長。SQL - 審計日誌表設計 - 您更喜歡哪一個?
我對這個建議是下面的架構表的和關係(例如):
Table AuditLog
------------------------------
Id | PK
Description
Created
而且每一項任務:
Table ExampleTaskAuditLog
------------------------------
ExampleTaskId | FK PK
AuditLogId | FK PK
和:
Table AnotherExampleTaskAuditLog
------------------------------
AnotherExampleTaskId | FK PK
AuditLogId | FK PK
基本上,我們需要審計的每一種任務,我們都會有一個新的表格來維持這種關係。
什麼其他開發商建議,爲以下:
Table AuditLog
------------------------------
Id (PK)
Description
Created
ExampleTaskId | NULLABLE
AnotherExampleTaskId | NULLABLE
Type | (an integer id which indicates whether this is a "example task" or a "another example task").
基本上,如果我們要創建一個日誌「ExampleTask」,我們將在ExampleTaskId字段集合到示例任務的身份和鍵入相應的ExampleTask-enum值。
他建議上表,因爲他在爭論誠信(我認爲很好!)和表現。主要是因爲有FK約束,並且需要加入一張表才能獲得相關日誌(是的,這是一個RMDBS-MSSQL)。另外,由於每個日誌都有兩個表,所以還需要兩個插入(完整性查找等)。當然,這是正確的。但我看不到問題。特別是因爲性能最低,所以性能不佳。另外,要存儲的日誌在第一年最有可能不會超過5-10K。幾年之後,表格可能包含大約30-40K行,
您對上述有什麼看法?另外,您更喜歡上述哪一種解決方案,爲什麼?
「ExampleTaskAuditLog」 `和`AnotherExampleTaskAuditLog`表來存儲一個多對多的關係? – Justin 2011-02-18 14:51:37