資料庫設計 橫表縱表的理解

2021-07-04 12:30:55 字數 1409 閱讀 7915

橫表就是普通的建表方式,如乙個表結構為:主鍵、欄位1、欄位2、欄位3。。。 如果變成縱表後,則表結構為: 主鍵、字段**、字段值。而字段**則為字段1、欄位2、欄位3。

具體為電信行業的例子。以使用者帳單表為例一般出賬時使用者有很多費用客戶,其資料一般儲存為:時間,客戶id,費用科目,費用。這種儲存結構一般稱為縱表,其特點是行數多,欄位少。縱表在使用時由於行數多,統計使用者數或對使用者進行分檔時還需要進行group by 操作,效能低,且操作不便,為提高效能,通常根據需要將縱表進行彙總,形成橫表,比如:時間、客戶id,基本通話費、漫遊通話費,國內長途費、國際長途費....。通常形成乙個客戶一行的表,這種表統計使用者數或做分檔統計時比較方便。另外,資料探勘時用到的寬表一般也要求是橫表結構。縱表對從資料庫到記憶體的對映效率是有影響的,但細一點說也要一分為二:縱表的初始對映要慢一些;縱表的變更的對映可能要快一些,如果只是改變了單個欄位時,畢竟橫表字段比縱表要多很多。我想這個還是在討論如何優化資料庫資料結構的問題,而我的意見是:如果有可能,還是不要用資料庫的好,呵呵

橫表和縱表

第一張圖就是橫表,一行表示了乙個實體記錄,這就是我們傳統的設計表的形式 

第二張圖就是縱表,他的一行記錄,是用於表示某個學生的屬性名和屬性值對應關係,像這邊有兩個屬性(名字和性別),在縱表中就要用兩條記錄來表示乙個學生。 

橫表

優點:一行表示了乙個實體記錄,

清晰可見,一目了然。

缺點:如果現在要把這個表加乙個字段,那麼就必須重建表結構。

縱表

優點:如果現在要把這個表加乙個字段,只需要新增一些記錄。

缺點:資料描述不是很清晰,而且會造成資料庫資料很多。另如果需要分組統計,要先groupby,較繁瑣。

結論:應該把不容易改動表結構的設計成橫表,把容易經常改動不確定的表結構設計成縱表。

在實際開發中,經常需要互相轉換橫表和縱表的形式,這裡貼個從縱表資料轉成橫表顯示的形式。

縱表轉橫表

sql**

select student_no,  

max(decode(field_name,'student_name',field_value)) as student_name,  

max(decode(field_name,'student_***',field_value )) as student_***  

from cuc_student_y group by student_no;  

資料庫橫表 縱表

橫表表結構 主鍵 欄位1 欄位2 欄位3。縱表表結構 主鍵 字段 字段值 字段 為字段1 欄位2 欄位3.縱表 橫表優劣對比 1.縱表在使用時由於行數過多,統計使用者數或對使用者分檔時需要進行group by操作,效能低下,且操作不便,為提高效能,通常對縱表進行彙總,形成橫表。2.資料探勘時用到的寬...

資料庫之橫表轉縱表 縱表轉橫表

橫表變縱表或縱表變橫表 成績表如下 name course grade 張三 語文 95 張三 數學 90 張三 英語 89 李四 語文 92 李四 數學 88 李四 英語 97 變成姓名 語文 數學 英語 張三 95 90 89 李四 92 88 97 縱表轉橫表create table biao...

橫表與縱表的區別

橫表就是普通的建表方式,如乙個表結構為 主鍵 欄位1 欄位2 欄位3。如果變成縱表後,則表結構為 主鍵 字段 字段值。而字段 則為字段1 欄位2 欄位3。具體為電信行業的例子。以使用者帳單表為例一般出賬時使用者有很多費用客戶,其資料一般儲存為 時間,客戶id,費用科目,費用。這種儲存結構一般稱為縱表...