掃碼下載APP
及時接收最新考試資訊及
備考信息
【摘 要】本文剖析了在編制和應用財務軟件過程中數據表里出現冗余數據的原因及其引發的后果;在SQL Server 2000環境下,通過使用帶參數的存儲過程實現了對任意表中的冗余數據的刪除操作;提出了構建隱含關鍵字避免數據冗余的方法,保證了實體完整性。
【關鍵詞】冗余數據;SQL Server 2000;存儲過程;關鍵字
1 引 言
企業中對財務軟件的應用是企業信息化水平的重要標志,但在編制或應用財務軟件的過程中,如對系統升級、數據表合并或跨年度數據整理時,都經常會產生重復數據的問題。而這部分冗余數據,從數據庫設計角度看,不符合實體完整性規則;從財務管理的應用角度看,會導致錯誤的出現。
針對這種情況,在SQL Server 2000環境下,可以通過使用帶參數的存儲過程非常容易地實現對任意表中冗余記錄的處理,并且在數據表設計中采用構建隱含關鍵字的方法避免冗余數據的產生。
2 冗余數據出現的原因及操作中的問題
2. 1冗余數據出現的原因分析
目前,財務軟件中廣泛使用的數據庫是關系型數據庫,其數據模型為關系模型。關系模型源于數學,它把所有的信息(數據)都存放在二維表中;每一個表又包含若干行與列,表被稱為關系。關系的嚴格定義如下:
域是一組具有相同數據類型的值的集合;給定一組域Dl,D2,…,Dn,則Dl,D2,…,Dn的笛卡兒積為:Dl ×D2 ×…×Dn={(d1,d2,…,dn)|di∈Dj , j=1,2, …,n} (其中每一個元素(d1,d2,…,dn)被稱為一個元組,元素中的每一個值di被稱為一個分量);那么,Dl × D2 ×…× Dn的子集被稱為在域Dl,D2,…,Dn上的關系,用R(Dl,D2,…,Dn)來表示。這里R表示關系的名字。
關系應具有的一個重要性質是關系中不允許重復的元組(即重復的記錄),在關系中,保證數據的正確性和一致性是通過關系模型的完整性規則來約束關系的。完整性規則包括3類:實體完整性、參照完整性和用戶定義的完整性。而實體完整性約束了在一個基本關系中各實體(即記錄)是可區分的,具有唯一的標識。這是本文討論的重點。
實體完整性要求每個基本關系中有且僅有一個不能為空值的主碼(即關鍵字),每一個實體的主碼值必須唯一。
從關系數據庫的設計角度看,如果遵循實體完整性規則設計相應的關系,那么在數據表中是不會出現冗余數據的。數據表中出現冗余數據無外乎兩種情況:
情況一:在數據表設計時并沒有按照實體完整性規則建立數據表
在這種情況下,建立數據表時并沒有為該表指定相應的關鍵字,如果多次為該數據表添加相同的記錄后,就會出現冗余數據。
例:Create table jbbxx (kmbh char(10)qcje decimal(18,2),bqje decimal(18,2),rq datetime,czybh char(2))&建立數據表jbbxx
Insert into jbbxx values('10120101',30 000.56,
1 000.3,'07-03-02','01')&多次執行記錄添加語句
情況二:在處理數據中,原表中的關鍵字約束的特性缺失
例:Create table jbbxx (kmbh char(12) not null primary key,qcje decimal(18,2),bqje decimal(18,2),rq datetime,czybh char(2))&建立帶有關鍵字的原表jbbxx
Select * into jbbxx_bak from jbbxx where left(kmbh,4)='1012'&由原表生成新表jbbxx_bak
查看原表(見圖1)和新表(見圖2)的數據表結構,發現在由原表生成新表的過程中,原表所定義的kmbh關鍵字約束在形成新表后缺失了。
2. 2操作冗余數據出現的問題
經過上面的討論,可知數據表中是會出現冗余數據的,并且一旦出現冗余數據,是無法通過交互方式進行修改、刪除等操作的(見圖3)。
究其原因,是因為交互狀態下針對的是一條記錄,而由于相同記錄的存在,使數據庫管理系統無法對當前記錄進行定位。
3 處理冗余數據的實現方法
3. 1實現思路
對數據表中的冗余數據的處理,可以采用游標的方法遍歷數據表中記錄進行解決,但這種方法有些煩瑣,本文介紹一種簡單高效的方法使該問題得到很好的解決。該方法的關鍵是運用了SQL語言中Select查詢語句的Distinct關鍵字,該關鍵字的使用能夠在查詢結果集中除去重復的行(即冗余數據),根據此思路可以形成一個沒有冗余數據的結果表,步驟如下:
第一步:將有冗余數據存在的表中利用Distinct篩出不重復的記錄放置到新表中;
第二步:將原表中記錄刪除;
第三步:將新表中的記錄插入原表。
3. 2實現過程
本文用存儲過程實現處理過程,存儲過程是一組事先編譯好的Transact-SQL代碼,是一個獨立的數據庫對象,可以作為一個單元被用戶的應用程序調用。
采用存儲過程具有的優點是:(1)執行速度快。由于存儲過程是已經編譯好的代碼,所以執行的時候不必再次進行編譯,從而提高了程序的運行效率。(2)模塊化編程。作為一個可重復使用的模塊化單元,存儲過程使得開發人員可以將復雜的功能封裝起來,提供給用戶簡單的調用接口,不僅減少開發人員的工作量,也降低了應用的復雜度。
本文中,通過設計帶參數的存儲過程可以增強通用性,將數據表名設計為參數,可實現對任意表的冗余數據處理;另外,在刪除記錄時,因truncate語句比delete語句使用的系統和事務日志資源少,因此采用該語句提高效率。
Create procedure Clear_redundancy (@dbname nvarchar(25))
As
Declare @str nvarchar(255)
if Exists(select * from sysobjects where name=N'aa' And Xtype='U')
drop table aa
Set @str='select distinct * into aa from'+@dbname
EXEC sp_executesql @str &將無重復數據放入新表aa
Set @str=' truncate table '+@dbname
EXEC sp_executesql @str &采用truncate快速刪除記錄
Set @str='insert into'+@dbname+'select * fromaa'
EXEC sp_executesql @str&將aa中的記錄插回到原表
Return
4 避免冗余數據產生的方法
雖然采用本文提供的方法可以清除冗余數據,但更有效的做法是避免冗余數據的出現,從而從根本上解決因數據冗余造成的在操作記錄時的出錯現象。
通過前面的分析,可以得知,數據冗余的產生或是由于設計數據表時未能通過關鍵字實現實體完整性的約束,或是指定了關鍵字,但在表的合并或相關操作中缺失了這一特性,因此,本文提出一種在設計表時定義隱含關鍵字方法,使這一問題很好地得到解決。
在SQL Server 2000中提供了在設計表時,通過標識列屬性identity可以為該列提供一個唯一的、遞增的值。該機制需要同時指定種子和增量,若不指定默認值(1,1),則此值在進行數據插入和修改時都無須用戶指定該值,而由數據庫系統管理和維護。因此,該列具有關鍵字的特性,即值唯一;而且在數據表的操作中又可保持列的identity屬性。
Create table jbbxx (key_code int identity(1,1),kmbh char(10),qcje decimal(18,2),bqje decimal(18,2),rq datetime,czybh char(2))
其中,表jbbxx中的key_code列被定義為標識列,在添加記錄時,其值單調增加,保持唯一性,從而保證了實體的完整性,因此,不會在操作(如修改、刪除)中出現錯誤。
5 結 論
在實際工作中,數據冗余的存在會引起操作錯誤的出現,所以是每個數據庫管理員需要解決的問題。本文從問題的產生原因進行分析,給出了一種簡單高效的解決方法,并通過定義隱含關鍵字方法避免了該問題的出現,可以作為在實際數據庫維護工作中的有效方法。
主要參考文獻:
[1] 薩師煊,王珊. 數據庫系統概論[M]. 第3版. 北京:高等教育出版社,2000:45-55.
[2] 許菱,秦曉海,孔令新. 巧用存儲過程進行數據處理[J]. 中國管理信息化,2006,(7):62-64.
[3] 尹萍. SQL Server數據庫性能優化[J]. 計算機應用與軟件,2005,(3):51-53.
[4] 王振輝,吳廣茂. SQL查詢語句優化研究[J]. 計算機應用, 2005,(12):207-208.
[5] 金天榮. SQL Server的查詢優化方法的設計和實現[J]. 微計算機信息,2006,(18):239-241.
Copyright © 2000 - m.electedteal.com All Rights Reserved. 北京正保會計科技有限公司 版權所有
京B2-20200959 京ICP備20012371號-7 出版物經營許可證 京公網安備 11010802044457號
套餐D大額券
¥
去使用 主站蜘蛛池模板: 欧洲三级在线 | 亚洲第一黄色网 | 欧产日产国产精品视频 | 久久国产一区 | 午夜av成人 | 久久九九免费视频 | 久久久精品久久 | 爱爱小网站 | 国产一区99| 国产精品爱久久久久久久 | 久久99精品久久久久久 | 国产精品一区二区三区在线 | 亚洲色图网址 | 91麻豆精品一区二区三区 | 中文字幕亚洲一区 | 日韩精品一区在线观看 | 免费成人高清 | 又爽又大又黄a级毛片在线视频 | 秋霞午夜日韩免费毛片 | 国内精品一区二区 | 日韩精品免费在线观看 | 精品欧美视频 | 国产在线成人 | 国产精品一区二区三区在线免费观看 | 久久九九视频 | 欧美一区二区在线播放 | 久久国产电影 | 精品福利在线观看 | 国产色网站 | 国产精品久久久久久久久久久不卡 | 国产伦精品一区二区三区视频黑人 | 宅男天堂 | 911影院在线观看网站 | 精品视频在线免费 | 亚洲老板91色精品久久 | 在线1区| 亚洲精品视频免费观看 | 黄色三级电影网站 | 18久久久久久 | 国产精品久久久久一区二区 | av免费播放 |