Database-Design

單獨的表或具有 1 個額外欄位的同一個表?

  • September 14, 2022

我有一個案例,我正在處理兩種類型的文件傳輸,上傳/下載。我想儲存使用者下載或上傳文件時執行的操作的歷史記錄或日誌。所以兩者都具有完全相同的屬性(操作日期、文件名/文件 ID、執行操作的使用者等)所以假設我需要儲存的這些資訊是欄位 1、欄位 2 和欄位 3。

有這樣的模式會更好:

field1, field2,field3, type

並將所有資訊保存在 1 個表中,或者只有 2 個不同的表:

table for type 1:field1, field2,field3

table for type 2:field1, field2,field3

沒有案例需要在應用程序 UI 端的列表中顯示所有歷史數據(上傳/下載)。它們總是單獨向使用者顯示,具體取決於他正在導航的頁面。

是否有真正的(技術)理由來選擇一個而不是另一個,比如效率、常見的最佳實踐等,還是只是品味/意見的問題?

提前致謝

我有2張桌子。如果需要,這使您可以輕鬆地單獨進化它們。

此外,您不必select ... where type=?在只有 2 個值的列上使用哪個效率不高。

選擇一個而不是另一個的原因實際上會歸結為您的案例中非常細化的東西,沒有一般的答案。諸如“歷史記錄或操作日誌”之類的事情讓我想到了一個交易歷史記錄表,它通常被設計為一個帶有Type欄位的單個表。

但是您繼續說“沒有案例需要我們在應用程序的 UI 端的列表中顯示所有歷史數據(上傳/下載)。它們始終單獨顯示給使用者”,這意味著您可以分開如果您願意,將它們放入兩個不同的表中。

但是,如果您認為您希望能夠輕鬆查看所有操作的線性歷史記錄(例如User1上傳FileA然後下載FileA3 次),即使是出於調試或報告目的,將所有數據儲存在單個表中會使這項任務變得更簡單,並且在技術上更有效。

一般來說,無論哪種方式,性能方面都可能沒有太大差異。如果您知道在可預見的未來這兩個對象的結構將保持一致,那麼您走哪個方向也無關緊要。並且如果您需要引入更改,即使它僅針對兩者之一,添加可為空的欄位或使用表來表示非常見欄位Types也可能沒什麼大不了的。...Extension

要考慮的另一件事是您的應用程序是否使用兩種不同的對像類型或單個對像類型來表示Uploadsvs Downloads?…為什麼應用程序以這種方式建構的答案可能有助於回答您希望如何建構數據庫。

引用自:https://dba.stackexchange.com/questions/316866