1

這是一個理論問題,我最近因爲一個請求而出現了請求。我擁有主操作數據存儲的支持,它維護一組數據表(包含主數據)以及一組查找表(其中包含參考代碼列表及其描述)。最近來自下游應用程序的推動將邏輯上將兩種結構(數據和查找值)統一在表示層中,以便他們更容易地發現整個數據中是否存在更新。 雖然這個請求是可以理解的,但我的第一個想法是它應該在接口級而不是在源頭上實現。邏輯上將兩個表(last_update_date)組合在ODS級別與數據的非規範化幾乎相似,並且似乎與保持查找和數據分離的想法相反。 這就是說,我想不出爲什麼它不應該在消耗臭氧層物質水平上完成,除了它看起來不是正確的事實嗎?有人有任何想法,爲什麼這種方法應該或應該不被遵守?爲什麼要在數據庫中使用查找表

爲了簡單起見,我在此列舉一個例子。

Data table 
ID Name Emp_typ_cd Last_update_date 
1  X  E1   2014-08-01 
2  Y  E2   2014-08-01 

Code table 
Emp_typ_cd  Emp_typ_desc Last_Update_date 
E1    Employee_1  2014-08-23 
E2    Employee_2  2013-09-01 

下游請求是把數據表示爲

Data view 
ID Name Emp_typ_cd Last_update_date 
1  X  E1   2014-08-23 
2  Y  E2   2014-08-01 

Data view 
ID Name Emp_typ_cd Emp_typ_desc Last_update_date 
1  X  E1   Employee_1  2014-08-23 
2  Y  E2   Employee_2  2014-08-01 

回答

1

你是正確的,那是因爲有人想看到特定的數據士氣受挫數據庫辦法。如您所知,副作用是您複製數據,降低靈活性,增加表格大小,將不同的對象存儲在一起等等。您也應該正確地解決他們的問題應該在某處或其他地方解決。如果他們以改變數據庫的方式改變數據庫,他們就不會得到他們想要的東西。如果他們想讓他們「更容易地發現整體數據中是否有更新」,但是他們重複了大量數據,他們只是自行解決錯誤。在您的示例中,Emp_typ_cd更新值必須爲使用該emp類型代碼的所有員工更新。一個好的更新語句可以做到這一點,但仍然不是更新查找表中的單個行,而是更新每個具有emp類型的員工。

我們一直使用查找表。我們可以爲查找表添加一個新值,使用fk將僱員添加到數據庫中,並且添加到該表上的任何報表現在都具有ID,值,排序順序等。假設我們添加'退伍軍人'到lu_Work_Experience。我們添加一名僱員與老將fk_Id,現在任何現有的查詢加入lu_Work_Experience有這個價值。他們按照字母順序或按照我們預先定義的順序對工作經歷進行分類

雖然有一個平坦的數據結構的正當理由,那就是速度。如果你正在運行一個非常大的報告,現在連接(和良好的索引)會更快。如果企業知道它會多次運行一個非常大的報告並且擔心最終用戶的等待時間,那麼爲該報告構建單個表是一個不錯的主意。我們一直在爲計算好的措施做到這一點。如果我們知道某個分析報告會產生大量聚合並加入,我們會將數據預先聚合到數據存儲中。這就是說,我們在SQL中不經常這樣做,因爲我們使用多維數據集進行分析。

那麼爲什麼要在數據庫中使用查找表?數據的邏輯分離。員工有員工代碼,但沒有員工代碼更新時間的日期。減少重複的數據。最小化設計複雜性。避免爲特定報告構建表格,然後必須針對不同報告構建不同的表格,即使它具有相似的數據。

無論如何,我的論點的其餘部分將由數據庫規範化維基百科頁面的事實組成,因此我將跳過它。

相關問題