摘 要:防雷檢測原始記錄數(shù)據(jù)表格復雜,進行信息化處理時表間的聯(lián)系尤其重要,本文采用數(shù)據(jù)結構中的雙鏈式處理,使表之間有機關聯(lián)起來,從而使刪除與插入高效方便。
關鍵詞:數(shù)據(jù)庫表;記錄;鏈式關聯(lián)
中圖分類號:TP311
最近我們在開發(fā)一防雷業(yè)務管理系統(tǒng)時,采用一種在數(shù)據(jù)庫表中運用鏈式結構的數(shù)據(jù)存儲處理,在數(shù)據(jù)庫處理中達到了方便高效的效果,在這里簡單介紹一下。
1 需求分析
用戶為氣象局防雷中心,數(shù)據(jù)為防雷裝置安全檢測的原始記錄,一共有四張A4紙的表格,通過分析第一張表格是唯一的,其它三張表格在記錄時都可以重復產生若干張,他們共同構成一個防雷檢測的原始記錄。邏輯結構如下:
上述四種表格轉化數(shù)據(jù)庫的四張表,分別為表一表二表三表四,表一結構如下:
錄時,只要事先確定總頁數(shù),每加一頁加一個頁號還是很方便,但是在刪除和修改時帶來頁號與總頁數(shù)變化時要對表二表三表四中“總頁數(shù)”、“頁號”都進行檢測修改操作。如果頁數(shù)越多越復雜。
2 鍵式結構的數(shù)據(jù)庫表間的處理方式
大家知道在數(shù)據(jù)結構中鍵式結構最大的優(yōu)點就是提高了刪除插入的速度,為了實現(xiàn)鏈式結構的數(shù)據(jù)庫表間的處理,我們將“表一”添下一頁字段:nextpage,表二表三表四分別加上“上一頁”和“下一頁”兩個字段,即:uppage和nextpage。在頁面處理中分對應添加兩個按鈕或超鏈接“上一下”和“下一頁”,四個數(shù)據(jù)庫表的名稱分別為:fltable1、fltable2、fltable3、fltable4,每一個都有一關鍵字段id(自動型)。每一表格對應網頁頁面文件為:表名后加上.aspx,如:fltable2.aspx表示第二張表格頁面文件。
2.1 添加原始記錄的鏈式處理
執(zhí)行添加功能,開始出現(xiàn)表格一的頁面,表格一頁面只有“下一頁”按鈕,它初始狀態(tài)是打開表格二頁面,在表二頁面中有“上一頁”與“下一頁”按鈕,表格二的頁面的“下一頁”初始狀態(tài)是打開表格三頁面,同理表格三頁面有“上一頁”與“下一頁”按鈕,它的“下一頁”是打開表格四頁面,表格四頁面有“上一頁”與“下一頁”按鈕,它的下一頁是打開表格二頁面,這樣組成一循環(huán)鏈式打開,當執(zhí)行保存功能時就記下“上一頁”與“下一頁”。每一頁面在保存后即往內置對象session[“pageup”]存于本頁面表的名稱與所保存的記錄的id,如:session[“pageup”]=“fltable2”+rd[“id”],同時修改上一頁表格的“下一頁”nextpage字段與本頁表格的“上一頁”uppage字段的值。代碼如下:
protected void btnSave_Click(object sender, EventArgs e)//保存uppage和nextpage
{ string strpageup= session[\"pageup\"].ToString();
string curtablerecord = \"\";//當前頁面表對應數(shù)據(jù)庫表及記錄id組成,格式形同strpageup
updateablelink(strpageup,curtablerecord);//修改本表uppage指針
updatetablelink(curtablerecord, strpageup); //修改上一表的nextpage指針
Session[\"pageup\"] = curtablerecord;
}
public void updatetablelink(string strpageup,string curtablerecord)//修改本表uppage指針或上一表的nextpage指針
{ SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings[\"Connection\"]);
con.Open();
string tablename = curtablerecord.Substring(0, 8);
int recordid = int.Parse(curtablerecord.Substring(9));
string sql = \"update \" + tablename + \"set uppage='\" + strpageup + \"' where id=\" + recordid;
SqlCommand com = new SqlCommand(sql, con);
com.ExecuteNonQuery();
}
2.2 刪除時記錄間的鏈式處理
protected void btnDelete_Click(object sender, EventArgs e)//保存uppage和nextpage
{ .........
string struppage= rd[“uppage”].ToString();
string strnextpageup= rd[“nextpage”].ToString();
updateablelink(struppage, strnextpageup); //修改本頁面表格uppage指針
updatetablelink(strnextpageup, struppage); //修改上一頁表格的nextpage指針
Session[\"pageup\"] = strnextpageup;
Delrecord();//刪除數(shù)據(jù)庫中對應的表的當前頁面記錄
}
實際刪除時注意,若要將一次檢字全部刪掉,應將其它表先刪,最后才能刪表一,否則會造成一些表二、表三、表四保留無用的垃圾數(shù)據(jù)。
2.3 瀏覽時也很方便
protected void btnNextpage_Click(object sender, EventArgs e)//瀏覽下一頁
{ string strnextpageup= rd[“nextpage”].ToString();
string tablename = strnextpageup.Substring(0, 8);
int recordid = int.Parse(strnextpageup.Substring(9));
string strcallpage= tablename+”.aspx?id=”+ recordid;
Response.Redirect(strcallpage); //調用下一頁顯示頁面
}
總之通過這樣改造,對數(shù)據(jù)庫表的刪除帶來很好的效果,若同時在表二表三表四中保留檢字號,總頁數(shù),頁號將它們結合起來在查找時速度會更快。
參考文獻:
[1]嚴蔚敏.數(shù)據(jù)結構[M].北京:清華大學出版社,2011(11).
[2]毛弟弟.關系數(shù)據(jù)庫中多表間關聯(lián)規(guī)則算法研究[D].哈爾濱理工大學,2009(03).
作者簡介:高上雄(1969.09-),男,湖北蘄春人,碩士研究生,講師、網絡工程師,研究方向:計算機數(shù)據(jù)庫、網絡編程;高君宇(1986.06-),男,內蒙古涼城人,本科,工程師,研究方向:雷電防御。
作者單位:內蒙古烏蘭察布職業(yè)學院,內蒙古烏蘭察布 012000;烏蘭察布市卓資縣氣象局,內蒙古烏蘭察布 012300