数据库冗余
數(shù)據(jù)冗余
1.關(guān)系數(shù)據(jù)庫的數(shù)據(jù)冗余形成的原因:表的重復(fù)、屬性的重復(fù)、元組的重復(fù)、屬性值的重復(fù)。有的數(shù)據(jù)冗余用于數(shù)據(jù)間建立聯(lián)系、數(shù)據(jù)安全或?yàn)榱藬?shù)據(jù)使用的便利,是必需的數(shù)據(jù)冗余,而其余的數(shù)據(jù)冗余為非必需的數(shù)據(jù)冗余應(yīng)盡量予以消除。按屬性值域集合基的特點(diǎn)將其分為有限類和無限類。無限類屬性值偶爾重復(fù)不是數(shù)據(jù)冗余,有限類屬性值的重復(fù)由一對多或多對多的關(guān)系所致,可相機(jī)處理之。
關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)冗余主要是指關(guān)系數(shù)據(jù)庫中同一信息數(shù)據(jù)的重復(fù)存貯。
數(shù)據(jù)冗余浪費(fèi)了寶貴的資源,應(yīng)盡量減少。但關(guān)系數(shù)據(jù)庫中為實(shí)現(xiàn)一些功能有些數(shù)據(jù)冗余是必需的。必需的數(shù)據(jù)冗余主要用于以下用途:
(1)數(shù)據(jù)間建立聯(lián)系,如兩表間通過共同屬性建立聯(lián)系;
(2)數(shù)據(jù)恢復(fù),如建立備份文件以備正式文件被破壞時(shí)恢復(fù);
(3)數(shù)據(jù)核查,如設(shè)立數(shù)據(jù)校驗(yàn)位可以檢查數(shù)據(jù)在存貯、傳輸?shù)冗^程中的改變;
(4)數(shù)據(jù)使用的便利,如為了查看數(shù)據(jù)的直觀,使用數(shù)據(jù)的方便、高效。
(5)減少數(shù)據(jù)通訊開銷,如分布式數(shù)據(jù)庫在不同場地重復(fù)。
關(guān)系數(shù)據(jù)庫由表及附屬文件組成,其表由屬性定義的結(jié)構(gòu)和元組(記錄)組成,其屬性值域有多種類型,故關(guān)系數(shù)據(jù)庫的數(shù)據(jù)冗余形成的原因有表的重復(fù)、屬性的重復(fù)、元組的重復(fù)、屬性值的重復(fù)4類。
2.1 表的重復(fù)
為了數(shù)據(jù)安全的需要制作備份表,當(dāng)主表被破壞時(shí)可用此恢復(fù)數(shù)據(jù)。分布式數(shù)據(jù)庫為減少數(shù)據(jù)通訊開銷也常重復(fù)放表,這種數(shù)據(jù)冗余在這里是必需數(shù)據(jù)冗余,不能刪除。若是因其他原因產(chǎn)生的非必要的重復(fù)表則應(yīng)予以刪除。
2.2 屬性重復(fù)
有不同表的屬性重復(fù)和同一表內(nèi)屬性重復(fù)2種情況:
(1) 不同表中屬性重復(fù)常用來建立表之間聯(lián)系,這只需要一個(gè)公共屬性,這是必需數(shù)據(jù)冗余,不能刪除;各表間的多于一個(gè)的屬性應(yīng)當(dāng)刪除。如有以下3個(gè)表:
T1(A,B,C);T2(A,B,D);T3(A,C,D,E)。
其中屬性A為三表所共有;屬性B為T1,T2 兩張表所共有,屬性C為T1,T3 兩張表所共有;屬性D為T2,T3 二表所共有。如取A為公共屬性則,T1,T2 兩張表中只能保留一個(gè)B屬性;T1,T3 兩張表中只能保留一個(gè)C屬性;T2,T3 兩張表中只能保留一個(gè)D屬性。
(2) 同一表內(nèi)有相同屬性內(nèi)容的多個(gè)屬性,若非數(shù)據(jù)安全檢查的需要,應(yīng)刪除之。
2.3 元組的重復(fù)
表內(nèi)不同記錄內(nèi)容有時(shí)會(huì)完全相同,若非必要,應(yīng)予以刪除。
2.4 屬性值的重復(fù)
按屬性值域集合基的特點(diǎn)可以將其分為有限類和無限類。
(1) 無限類屬性值的重復(fù)。無限類屬性值是指其屬性值域集合的基為無限大或者數(shù)據(jù)庫記錄數(shù)為同一數(shù)量級的屬性值,如實(shí)數(shù)、整數(shù)、日期、各種編號。
無限類屬性值偶爾也可能重復(fù),但這只是巧合,而并非數(shù)據(jù)冗余。
(2) 有限類屬性值的重復(fù)。有限類屬性值是指其屬性值域集合的基小于數(shù)據(jù)庫記錄數(shù)至少一個(gè)數(shù)量級的屬性值,如產(chǎn)品名,部門名,職稱名,課程名。
有限類屬性值的重復(fù)實(shí)際上是由一對多或多對多的關(guān)系引起的,有時(shí)可作為必需冗余數(shù)據(jù)不予以處理,這時(shí)不需程序就有較好的查看效果和工作效率。但當(dāng)重復(fù)量很大時(shí),也應(yīng)當(dāng)設(shè)法對所引起的數(shù)據(jù)冗余進(jìn)行壓縮,這通常要建立新表和相應(yīng)的程序。
2.5 不同成因的數(shù)據(jù)冗余用不同層次上的操作來消除。
(1)消除表的重復(fù)所引起的數(shù)據(jù)冗余為磁盤文件級的操作。(2)屬性的重復(fù)所引起的數(shù)據(jù)冗余的消除為對數(shù)據(jù)庫結(jié)構(gòu)修改的操作。(3)元組的重復(fù)所引起的數(shù)據(jù)冗余的消除由記錄級的操作完成。3. 數(shù)據(jù)冗余的缺點(diǎn):
a) 存儲(chǔ)空間的浪費(fèi)。
b) 數(shù)據(jù)交互和數(shù)據(jù)庫訪問執(zhí)行效率降低。
代碼的冗余 可以用存儲(chǔ)過程來解決
刪除冗余數(shù)據(jù):用一個(gè)PL/SQL 方案(一個(gè)自定義的存儲(chǔ)過程)或者一個(gè)SQL語句的解決方案(使用一個(gè)分析的函數(shù)RANK()和一個(gè)嵌套的子查詢)來消除冗余數(shù)據(jù)然后控制應(yīng)該保留的記錄,詳細(xì)見參考資料2
減少冗余數(shù)據(jù):使用范式設(shè)計(jì)。
常見類型數(shù)據(jù)庫設(shè)計(jì)技巧、模型,詳見參考資料3
附:
數(shù)據(jù)庫范式是數(shù)據(jù)庫設(shè)計(jì)中必不可少的知識,沒有對范式的理解,就無法設(shè)計(jì)出高效率、優(yōu)雅的數(shù)據(jù)庫,甚至設(shè)計(jì)出錯(cuò)誤的數(shù)據(jù)庫。
a) 第一范式(1NF):屬性不可分
b) 第二范式(2NF):符合1NF,并且,非主屬性完全依賴于碼。
c) 第三范式(3NF):符合2NF,并且,消除傳遞依賴
d) BC范式(BCNF):符合3NF,并且,主屬性不依賴于主屬性(如果關(guān)系模式屬于第一范式,且每個(gè)屬性都不傳遞依賴于鍵碼,則R屬于BC范式)。
總結(jié)
- 上一篇: 敏涵控股集团成为2022第十二届公益节候
- 下一篇: SQL的DATEDIFF计算天数