資料庫資料處理故事多

2022-04-08 09:52:51 字數 1564 閱讀 3258

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

這兩天別人總在問我,你們基礎出了什麼問題,為什麼總在導資料。資料沒問題,為了做足準備,我們需要將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$ 也是秒秒鐘的事。

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

資料庫資料處理故事多

每年評教都會遇到資料匯入的一系列問題。從中收穫頗豐。這兩天別人總在問我,你們基礎出了什麼問題,為什麼總在導資料。資料沒問題,為了做足準備,我們需要將8期版的最全的資料整理到10期資料庫中。背景介紹 問題在於從8期版基礎系統到10期版基礎系統在資料庫設計方面有了很大的變化,例如10期學生表中存放著班級...

資料庫資料優化故事多

基礎呼叫評教系統介面,在執行程式時 我們看到iis的程序居高不下。於是想了幾個方法進行資料庫的而優化嘗試。第一 加索引。索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。索引對於資料庫來說 就像目錄和整本書的關係一樣。有了資料庫索引,我們就可以先查詢目錄,然...

ORACEL資料庫資料處理 增

給大家介紹乙個簡單oracel資料庫資料處理 增 資料操縱語言 dml data manipulation language 資料操縱語言 可以在下列條件下執行 向表中插入資料 修改現存資料 刪除現存資料 事務是由完成若干項工作的dml語句組成的 insert into插入資料 為每一列新增乙個新值...