關於資料冗餘的一點思考

2021-06-29 16:50:55 字數 744 閱讀 3241

此處我暫且把對資料冗餘的思考限定於資料庫中的資料和**中的資料,資料備份不算作冗餘。

以前寫**從來不會考慮到資料冗餘,是我的第乙個頭兒年看了我的**後提醒了我,在此表示感謝,今天立文記錄下頭兒給我的忠告和自己的一些體會,以免他日陷入資料冗餘的深淵苦苦掙扎。

資料冗餘主要**有兩個。一是在多處儲存實際上是相同的資料,比如,表a儲存了書s的書名、**、作者、頁碼、版次等基本屬性,表b儲存的是書s在每個城市的銷量,本來表b中只要存乙個外來鍵指引s在表a中的位置即可,有些猿可能就為了方便,把書s的書名、**等在表b又存了一遍,覺得這樣在時候就不用讀表a了);二是有些資料其實是既有資料的計算結果,比如在乙個資料結構中儲存了開機時間和關機時間,同時又專門用乙個變數儲存機器使用時間;

資料冗餘乙個顯而易見的缺點就是浪費空間,無論是記憶體還是外存,乙個地方存了資料幹嘛還要在另乙個地方存?或才明明可以通過已有資料的簡單計算得到的為何還要另存乙份?

由於在多處儲存著實際上是相同的資料,我們必須時刻儲存各處資料的一致性,改了一處的資料還必須修改另一處相同的資料,一旦忘了維護某些資料的一致性,**就會產生非預期的結果,此時如果我們沒有注意到資料的一致性問題,那就等著的進入無止境的除錯吧。所以冗餘會帶給我們多餘的工作量,讓我們在維護資料一致性上耗費時間,而且還極容易陷入資料不一致的危險中。

不可否認有時候適當的資料冗餘可以給我們帶來很大的便捷性,比如某結果值需要計算大量的資料才能得到,而用來計算的原始資料又幾乎不會變更即計算結果幾乎不會變更,此時將結果值儲存下來,**在以後的執行過程中便能節省部分時間和空間。

關於makefile的一點思考

在gnu編譯工具軟體中,如果對單一的原始檔進行編譯,可執行指令如下 gcc o x x.c 此指令會將原始檔編譯為目標檔案。若是對執行緒類檔案進行編譯,則在末尾加上 lpthread指令。但若是對多檔案進行編譯,即若是編譯的目標檔案同時包含另一檔案中的函式。則在編譯的時候需將另一檔案加到編譯原始檔中...

關於指標的一點思考

指標是乙個變數,所不同的是,它存的是位址。因為資料型別決定著如何解釋這個位址 位元組數和操作 因此根據的資料型別的不同,指標又有不同的型別。某個物件 a 的位址範圍為 a,a size n 其中size n是a所佔的位元組數 比如乙個一維陣列int a 10 位址範圍為 a,a 10 sizeof ...

關於演算法的一點思考。。。

關於演算法的一點思考。在實踐過程中,我發現 有時候要解決乙個問題,可以設計幾個演算法分步完成任務,這樣處理起來比較簡單,但是情況並非總是如此,有時,我們需要將幾個步驟放在同乙個演算法內連帶處理,這樣才比較容易處理問題。我還發現,有時候,解決問題的演算法,是被發現出來的,並加以一步一步的檢驗才得以確定...