當前位置:首頁 » 操作系統 » 冗餘資料庫

冗餘資料庫

發布時間: 2022-05-23 09:59:07

❶ 什麼是資料庫中的數據冗餘如何消除數據冗餘

數據冗餘指數據之間的重復,也可以說是同一數據存儲在不同數據文件中的現象。可以說增加數據的獨立性和減少數據冗餘為企業范圍信息資源管理和大規模信息系統獲得成功的前提條件。

數據冗餘會妨礙資料庫中數據的完整性(integrality),也會造成存貯空間的浪費。盡可能地降低數據冗餘度,是資料庫設計的主要目標之一。關系模式的規范化理淪(以下稱NF理論)的主要思想之一就是最小冗餘原則,即規范化的關系模式在某種意義上應該冗餘度最小。

但是,NF理論沒有標準的概念可用,按等價原則,在有或沒有泛關系假設(universal relation assumption)等不同前提下,冗餘的定義可能有好幾種。



數據的應用中為了某種目的採取數據冗餘方式。

1、重復存儲或傳輸數據以防止數據的丟失。

2、對數據進行冗餘性的編碼來防止數據的丟失、錯誤,並提供對錯誤數據進行反變換得到原始數據的功能。

3、為簡化流程所造成額數據冗餘。

4、為加快處理過程而將同一數據在不同地點存放。

5、為方便處理而使同一信息在不同地點有不同的表現形式。

6、大量數據的索引,一般在資料庫中經常使用。

7、方法類的信息冗餘。

8、為了完備性而配備的冗餘數據。

9、規則性的冗餘。根據法律、制度、規則等約束進行的。

10、為達到其他目的所進行的冗餘。

❷ 什麼是資料庫冗餘,如何避免資料庫冗餘

您好:
數據冗餘或者信息冗餘是生產、生活所必然存在的行為,沒有好與不好的總體傾向。
一般設計資料庫是都在達到3範式或更高,否則數據的冗餘程度非常高。

通常在設計的時候,需要考慮擴展性,閱讀性,響應時間和語句復雜程度等。
需要有一定的冗餘來達到維護需要,這往往是經驗豐富的開發人員和DBA來考慮的。

❸ 資料庫冗餘怎麼辦

它將冗餘數據選擇到一個游標中,並根據(LastName,FirstName)來分組(在我們這個方案中),然後打開游標然後循環地取出每一行,然後用與先前的取出的鍵值進行比較,如果這是第一次取出這個值,或者這個值不是冗餘鍵,那麼跳過這個記錄然後取下一個,不然的話,這就是這個組中的冗餘記錄,所以刪掉它.

讓我們運行一下這個存儲過程

BEGIN

DeleteDuplicates;

END;

/

SELECT LastName, FirstName, COUNT(*)

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 1;

最後一個查詢語句沒有返回值,所以冗餘數據沒有了從表中取冗餘數據的過程完全是由定義在csr_Duplicates 這個游標中的SQL語句來實現的,PL/SQl只是用來實現刪除冗餘數,那麼能不能完全用SQL語句來實現呢?

二.SQL解決方案,使用RANK()刪除冗餘數據Oracle8i分析函數RANK()來枚舉每一個組中的元素,在我們的方案中, 我們應用這個方案,我們使用這個函數動態的把冗餘數據連續的排列起來加上編號,組由Partintion by 這個語句來分開,然後用Order by 進行分組SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) SeqNumber

FROM Customers

ORDER BY LastName, FirstName;

SQL

Listing 7. Output of single SQL statement that uses RANK()

顯示的是根據記錄的條數的個數來顯示尤其對於冗餘數據

ID LASTNAME FIRSTNAME SEQNUMBER

----- --------------- ---------- ----------

1018 Blake Becky 1

1013 Blue Don 1

1000 Bradley Tom 1

1002 Chang Jim 1

1008 Griffith David 1

1020 Hill Larry 1

1004 King Chuck 1

1005 Krieger Jeff 1

1012 Krieger Jeff 2

1017 Krieger Jeff 3

1003 Loney Julie 1

1007 Lord Don 1

1015 Mason Paul 1

1006 Monroe John 1

1009 Simon Michael 1

1010 Simon Michael 2

1001 Stone Tony 1

1011 Stone Tony 2

1014 Stone Tony 3

1016 Stone Tony 4

1019 Stone Tony 5

我們可以看一到,SeqNumber這一列中的數值,冗餘數據是根據ID號由小到大進行的排序,所有的冗餘數據的SqlNumber都大於一,所有的非冗餘數據都等於一,所以我們取自己所需,刪除那麼沒用的SELECT ID, LastName, FirstName

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM Customers)

WHERE SeqNumber > 1;

SQL

Listing 8. 冗餘鍵的鍵值

有七行必須被刪除

ID LASTNAME FIRSTNAME

----- --------------- ----------

1012 Krieger Jeff

1017 Krieger Jeff

1010 Simon Michael

1011 Stone Tony

1014 Stone Tony

1016 Stone Tony

1019 Stone Tony

7 rows selected.這顯示有七行需要刪除,還是用上一個表我測試了一下這個代碼,它用了77秒種就刪除了所有的數據准備好了用Sql語句來刪除冗餘數據,版本一它執行了135秒

DELETE

FROM CUSTOMERS

WHERE ID IN

(SELECT ID

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM Customers)

WHERE SeqNumber > 1);

我們可以看到最後的兩行語句對表中的數據進行了排序,這不是有效的,所以我們來優化一下最後一個查詢語句,把Rank()函數應用到只含有冗餘數據的組,而不是所有的列下面這個語句是比較有效率的,雖然它不像上一個查詢那樣精簡SELECT ID, LastName, FirstName

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM

(SELECT ID, LastName, FirstName

FROM Customers

WHERE (LastName, FirstName) IN (SELECT LastName, FirstName

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 1)))

WHERE SeqNumber > 1;

選擇冗餘數據只用了26秒鍾,這樣就提高了67%的性能,這樣就提高了將這個作為子查詢的刪除查詢的效率,

DELETE

FROM Customers

WHERE ID IN

(SELECT ID

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM

(SELECT ID, LastName, FirstName

FROM Customers

WHERE (LastName, FirstName) IN (SELECT LastName, FirstName

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 1)))

WHERE SeqNumber > 1);

現在只用了47秒鍾的就完成的上面的任務,比起上一個136秒,這是一個很大的進步,相比之下,存儲過程用了56秒,這樣存儲過程有些慢了使用PL/SQL語句我們和我們以上的代碼,會得到更好的更精確的代碼,和提高你代碼的執行效率,雖然對於從資料庫中枚舉數據PL/SQL對於Sql兩者沒有什麼差別,但是對於數據的比較上,PL/SQL就比SQL要快很多,但是如果冗餘數據量比較小的話,我們盡量使用SQL而不使用PL/SQL如果你的數據表沒有主鍵的話,那麼你可以參考其它技術
Rank()其它的方法

使用Rank()函數你可以對選擇你所保留的數據,(或者是小ID的或者是大ID 的,就由RECDate這個列來決定這種情況下,你可以把REcdate加入到(Orderby )子句中,倒序或者正序

這是一種保留最大Id的一種解決方案

DELETE

FROM Customers

WHERE ID IN

(SELECT ID

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName, FirstName ORDER BY RecDate DESC, ID) AS SeqNumber

FROM

(SELECT ID, LastName, FirstName, RecDate

FROM Customers

WHERE (LastName, FirstName) IN (SELECT LastName, FirstName

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 1)))

WHERE SeqNumber > 1);

這種技術保證了你可以控制每一個表中的保留的組,假設你有一個資料庫,有一個促銷或者有一個折扣信息,比如一個團體可以使用這種促銷5次,或者個人可以使用這個折扣三次,為了指出要保留的組的個數,你可以在where 和having子句中進行設置,那麼你將刪除所有大於你

設置有數的冗餘組

DELETE

FROM Customers

WHERE ID IN

(SELECT ID

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM

(SELECT ID, LastName, FirstName

FROM Customers

WHERE (LastName, FirstName) IN (SELECT LastName, FirstName

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 3)))

WHERE SeqNumber > 3);

As you can see, using the RANK() function allows you to eliminate plicates in a

single SQL statement and gives you more capabilities by extending the power of

your

queries.

正如你所見使用Rank()可以消除冗餘數據而且能給你很大的可伸展性

❹ 什麼是資料庫冗餘

資料庫冗餘
指的多餘的相同數據
舉個例子

s
(學號,
班級,姓名
)
c(課程名,
課程號
)

cc(學號
課程號)

d(學號
班級
課程名)
學生選課關系
,s表定義學生信息
,c表定義課程信息
,cc表定義選課信息

d則屬於數據數據

因為表d可以用語句
select
學號
班級
課程名
from
s,cc
where
s.學號=cc.學號
來表示

❺ 什麼是數據冗餘資料庫系統與文件系統相比怎樣減少數據冗餘

數據冗餘是指數據之間的重復,也可以說是同一數據存儲在不同數據文件中的現象。

❻ 關系資料庫中冗餘數據對資料庫運行的影響與作用

作用:快速查詢。很多冗餘就是為了避免多表鏈查。
影響:
優點:快速查詢。缺點:數據同步可能出現問題,從而引起數據不同步。

❼ 資料庫中數據冗餘,數據插入異常,數據刪除異常, 修改異常,數據異常分別該怎麼解釋

樓主好,可以給您一個個解釋:

數據冗餘:數據冗餘是指一個屬性存放在多個表中,比如員工手機號,可能存在於銷售人員的表中,也會存在考勤表中。這其實會影響數據的完整性和一致性。換句話說,也就是當有一個表有錯誤的時候,可能會導致整個功能的查詢都有問題
數據插入異常:是指插入的數據違反了資料庫對象的規定,而導致插入不正確的異常結果。打個比方,有一個表中有三列,分別標識三個屬性,而你插入的時候寫了四個屬性,數據就會插入不進去,這就是個簡單的插入異常。還或者某個欄位要求的是非空,而你插入了一個空值,這也會導致插入錯誤。
數據刪除異常:指的是當你需要刪除的時候,數據不能被刪除而導致的刪除錯誤。比如當表中有外鍵限制的時候,刪除數據就會出錯。
修改異常:指的是當你更新數據的時候,數據不能被更新而導致的錯誤。比如你去更新一個自增列,資料庫就會提示更新失敗,這種就為修改異常
數據異常:數據異常則是指資料庫中存在了不合邏輯的數據,或者無緣無故多出來的毫無關聯的數據問題。舉個例子,假設資料庫有個產品表,裡面有價格,還有個訂單表,裡面存放了產品對應的銷售數量,還有一個訂單金額表,裡面存在訂單金額,按常理邏輯計算,價格*產品數量=訂單金額,但如果你發現了有數據不符合這個邏輯的,那麼就出現了數據異常。數據異常通常與系統bug,或者資料庫寫的功能性東西有關。有些時候邏輯覆蓋不嚴密,則會產生數據異常
以上就是樓主疑問的所有解釋,請採納

❽ 數據冗餘度高是資料庫最大的缺點,對還是錯

資料庫有一定的冗餘度,但是冗餘度並不一定高,範式就能解決一部分冗餘度的問題,雖然現在的資料庫還是有冗餘度的問題,但是冗餘度並不能說是高,而且冗餘度高也是有好處的,並不全是壞處。

❾ 什麼是數據冗餘

數據冗餘是指數據之間的重復,也可以說是同一數據存儲在不同數據文件中的現象。可以說增加數據的獨立性和減少數據冗餘是企業范圍信息資源管理和大規模信息系統獲得成功的前提條件。

是傳輸消息所用數據位的數目與消息中所包含的實際信息的數據位的數目的差值。數據壓縮是一種用來消除不需要的冗餘的方法,校驗和是在經過有限信道容量的雜訊信道中通信,為了進行錯誤校正而增加冗餘的方法。

❿ 資料庫中數據冗餘會產生什麼問題

數據冗餘的缺點:

1、存儲空間的浪費。

2、數據交互和資料庫訪問執行效率降低。

但適當的數據冗餘又能加快查詢。數據冗餘究竟是好是壞還是要根據自己所做的項目進行合理的取捨。

當同一數據塊存儲在兩個或多個單獨的位置時, 就會發生數據冗餘。假設創建了一個資料庫來存儲銷售記錄, 並在每個銷售的記錄中輸入客戶地址。但是,有多個銷售到同一客戶,因此同一地址被多次輸入。重復輸入的地址是冗餘數據。

(10)冗餘資料庫擴展閱讀

一定的冗餘可以提升性能

1、空間換時間

有一張字典表 city 其中有 id 和 cityName 兩個欄位,有一張業務表,其中有 id 、cityId、XXX、XXX…欄位。如果查詢業務表的話,就必須 join 一下 city 字典表,如果業務表很大很大,那麼就會查詢的很慢,這個時候我們就可以使用冗餘來解決這個問題。

直接將業務表中的 cityId 更換成 cityName,這樣我們在查詢業務表的時候就不需要去 join 那一張 city 的字典表了。這樣的方式顯然是不符合我們資料庫設計的範式的,但是這樣的冗餘或許很有必要。

2、查詢某一個狀態值數據

業務表中有一個欄位 status 用來存儲提交和未提交,假設這張表中未提交的數據相對於提交的數據是很少的,當用戶查詢所有未提交的數據的時候,就需要在全部的數據,然後篩選出未同意的數據。如果這張業務表非常的龐大,那麼這樣的查詢的效率就非常的慢。

這個時候我們就可以把這張業務表中的未同意的數據冗餘到一張新表中,這樣用戶查詢未提交的數據的時候就可以直接在這張未提交的表中查詢,查詢速度提交很多。

熱點內容
獲取了ip怎麼進他的伺服器 發布:2024-10-26 17:17:17 瀏覽:491
存儲的反應 發布:2024-10-26 17:08:39 瀏覽:442
sql三張表查詢 發布:2024-10-26 17:05:23 瀏覽:344
怎麼看電腦wifi密碼是多少 發布:2024-10-26 17:00:10 瀏覽:325
上傳gif不會動 發布:2024-10-26 16:59:55 瀏覽:13
volte手機如何解鎖密碼 發布:2024-10-26 16:54:04 瀏覽:105
如何將安卓手機刷為蜂巢系統 發布:2024-10-26 16:43:44 瀏覽:831
androidnetcfg 發布:2024-10-26 16:42:40 瀏覽:929
imageloaderandroid 發布:2024-10-26 16:41:14 瀏覽:778
21H的源碼 發布:2024-10-26 16:35:47 瀏覽:722