我在 MSSQL 資料庫中有一個很長很窄的表,看起來有點像:
| 日期 | 資料項名稱 | 資料項值 |
|---|---|---|
| 2021-01-01 | 售出單位 | 20 |
| 2021-01-01 | # 顧客 | 2948 |
| 2021-01-01 | ARP | 19 |
| 2021-01-02 | 售出單位 | 146 |
| 2021-01-02 | # 顧客 | 157 |
| 2021-01-02 | ARP | 32 |
我正在嘗試獲取以下表格:
| 日期 | 售出單位 | # 顧客 | ARP |
|---|---|---|---|
| 2021-01-01 | 20 | 2948 | 19 |
| 2021-01-02 | 146 | 157 | 32 |
我的問題是:是否有充分的理由在 SQL 中透視表(創建視圖或物化表)與提取原始資料并在我的應用程式中進行透視?
uj5u.com熱心網友回復:
您正在處理一個鍵/值表。幸運的是,似乎至少該值始終是數字,因此該dataItemValue列可以是數字,而類似Units Sold = 'many'或# Customers = 'I don''t know'這樣的值是不可能的。但是鍵/值表總是令人討厭。
在 SQL 中透視的優點
- 要傳輸的資料更少。一行的
date, Units Sold, # Customers, ARP資料比三行的資料少date, dataItemName, dataItemValue。 - 如果你創建一個視圖,你就讓它看起來像是在處理一個普通的表。您的查詢變得更具可讀性并且更不容易出錯。
在您的應用程式中旋轉的優點
- 如果您添加一個鍵,請說 dataItemName = 'highest price' 您的所有查詢(希望您的應用程式也是如此)將保持不變,這畢竟是鍵/值設計的全部內容。
理想情況下,您使用鍵/值表,因為鍵與您的應用程式無關。比如說,你有產品,有的有領型,有的有最高溫度,有的有最高速度。您的產品建立應用程式將允許您的員工輸入資料,您的銷售應用程式或 Webste 將顯示資料。這兩個應用程式都不需要知道衣領型別或最高溫度意味著什么。在這種情況下,您將選擇(未知)原始資料,您的應用程式將執行旋轉(如果需要)。
但是,在您的情況下,鍵/值表似乎并不合適。您想處理某些屬性,就好像它們是表中的真實列一樣,您的應用程式應該知道什么Units Sold和# Customers意味著什么。在這種情況下,您最好使用帶有這些列的普通表。如果您被迫使用鍵/值表,請充分利用它。在 SQL 中透視,最好是在視圖中,這樣您就不會注意到不適當的表設計決策。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/372105.html
標籤:sql sql-server sql性能
上一篇:多條插入陳述句-增加變數
