資料庫資料處理故事多,資料庫資料處理故事

來源:互聯網
上載者:User

資料庫資料處理故事多,資料庫資料處理故事

每年評教都會遇到資料匯入的一系列問題。從中收穫頗豐。

這兩天別人總在問我,你們基礎出了什麼問題,為什麼總在導資料。資料沒問題,為了做足準備,我們需要將8期版的最全的資料整理到10期資料庫中。


背景介紹:問題在於從8期版基礎系統到10期版基礎系統在資料庫設計方面有了很大的變化,例如10期學生表中存放著班級外鍵,而8期表中是用第三張表來維護關係的。10期的‘上課班’ 中需要課程和老師的關係,而再8期表中需要多個表才能將其關聯起來。 20來張表,各種外部索引鍵關聯,最多的一個表存50多萬條資料,怎麼做,怎麼做快 是擺在我們面前一個迫切需要解決的問題。


故事一:

   由於8期表間都是通過第三張表聯絡起來的。而像1:n的關係10期表基本都是外鍵之間關聯的。

例如,我想在10期表新增學生資訊(包括學號,姓名,班級外鍵等)。我需要先從8期學生表中匯出學生資訊(不含班級外鍵)再從班級和學生的第三張表中匯出學生和班級的關係,然後一一對比將兩個表整合到一張表上去。

這樣做是我們最初最天然的想法,當然效率低而且人工核對出錯率極高。於是我們改用PlanB。在資料庫中建立學生和第三張表的視圖,然後將視圖匯出到excel。

故事二:

   建立視圖的時候,我們又遇到另一個問題。將兩個表聯合起來,發現學生總共為22052行,而視圖總數為22191 行。如果資料沒問題的話,這是不應該出現的。因為按道理來說,學生和班級兩個表的n:1關係, 而且表資料無冗餘。應該無論做連結還是右連結資料都是一樣的。


於是我們用了一個查詢語句 select ClassID from BasicClassEntities  where    ClassID not   in(select ClassID from BasicStudentEntities)先原諒我用了這樣一條效率低的查詢語句。我們查出來有正好139個班級裡面沒有學生。後來再研究發現原來這裡面有100多虛設項目列政班( 是為考試留的),也真的有三個班是由於人為失誤沒有加上關聯。利用表和表之間的關係查詢,是真的可以檢查錯誤的,此處就不一一列舉了。


故事三:

    我想到了之前的一道面試題。於是自己建表實踐了一下。如題是:A表有5條資料,B表有8條資料。如果兩個表有3條公用資料,那麼分別用交叉串連,左右串連能得到多少條資料。

實驗一:

student 表裡的資料。                        teacher表裡的資料


                                      

通過學生表和教師表分別進行右左串連,。


實驗二: 在此基礎上,將3條公用資料 改為不是一一對應,現在是有兩個ID一樣都和學生同一ID一致。

                  

顯示結果如下。

                   

                                         看!顯示內容如下

                    


故事四:

    第一次將整理好的資料excel 複製到資料庫中的時候,我們採取的方法是將excel欄位和資料庫欄位設定成一致的然後之間 ctrl+c 再ctrl +v 。結果2萬多學生需要10多分鐘才能匯入進去。於是我們利用資料庫內建的匯入excel功能,發現即便是50萬資料也能瞬間搞定。只是匯入後會新產生這樣一個表。

                       


然後從表資料到另一個表上 使用語句  insert into  BasicStudentEntities  select * from    BasicStudentEntities$ 也是秒秒鐘的事。


好玩的故事很多,下節繼續~





 





相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.