Database-Design

在數據庫中輸入數據的最佳方式是按日期展開

  • December 17, 2019

我有一個 Excel 文件,為了簡單起見,它有 3 列:ActivityID、ActivityName 和 TotalHours。

TotalHours 列基本上是分配給該特定 ActivityID 的所有小時數,該文件可以有大約 1500 個這些 ActivityID 相當於 1500 行。

現在的問題是文件中有其他列按週日期分解 TotalHours。這些小時分為不同的周期間,但將它們加起來等於 TotalHours。

這是作為文件一部分的行。

我不想最終在我的數據庫中動態創建表列,因為我最終可能會得到 100 多個欄位。一種解決方案是,我可以按原樣讀取 Excel 並即時進行計算,但這需要對文件進行嚴格模板化,這意味著數據需要保持一致並位於指定的單元格中,以便我讀取它們。這是我試圖避免的事情。

你知道我可以解決這個問題嗎?

謝謝

我是否理解您幾乎有一個工作訂單,並且該工作訂單可以在任何一天工作幾個小時,並且您想儲存某人每天工作多少小時?因此,如果我在 3 日工作 2 小時,在 10 日工作 5 小時,那麼它會在總列中儲存 12 小時嗎?

如果是這種情況,我會以更基於事件的方法來處理它。有一個活動表(ActivityID、ActivityName …)。然後有一個表用於活動的工作條目(ActivityID、PersonWorking、DateWorked、PersonWorked…)。小時數將僅輸入到工作表中,並具有匯總每個活動並顯示工作天數和總數的視圖。需要注意的是,數據庫系統通常可以處理列出 4-5 個欄位的大量行,這比嘗試在列標題中僅包含 10 年的日期並將所有內容分散開來要容易一些。

根據我的經驗,1)根據同一記錄行中的數據儲存計算值,以及 2)將日期數據儲存為欄位名稱幾乎不是一個好主意。除非您有一組非常具體的適用於所有項目/活動的日期,否則不要將它們用作欄位標題。

使用 OPENROWSET 讀取 Excel 文件。這將返回一個結果集,其中 Excel 文件每行一行,每個 Excel 列一列,包括右側所有額外的“細分”列。但是,它不會在您的應用程序數據庫中實現(即永久儲存)該結果集。

編寫導入過程以僅引用您實際需要的列。我猜這些的名稱隨著時間的推移足夠一致,這將是穩定的。程式碼看起來像

insert MyTable (ActivityID, ActivityName, TotalHours)
select ActivityID, ActivityName, TotalHours
from OPENROWSET(<various parameters go here>);

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