檔案的邏輯結構:無結構檔案(流式檔案)和有結構檔案(記錄式檔案)
按邏輯結構,檔案有無結構檔案和有結構檔案兩種型別:無結構檔案和有結構檔案。
無結構檔案(流式檔案)
無結構檔案是最簡單的檔案組織形式。無結構檔案將資料按順序組織成記錄並積累儲存,它是有序相關資訊項的集合,以位元組(Byte)為單位。由於無結構檔案沒有結構,因而對記錄的訪問只能通過窮舉搜尋的方式,故這種檔案形式對大多數應用不適用。但字元流的無結構檔案管理簡單,使用者可以方便地對其進行操作。所以,那些對基本資訊單位操作不多的檔案較適於釆用字元流的無結構方式,如源程式檔案、目的碼檔案等。有結構檔案(記錄式檔案)
有結構檔案按記錄的組織形式可以分為:1) 順序檔案。
檔案中的記錄一個接一個地順序排列,記錄可以是定長的或變長的,可以順序儲存或以連結串列形式儲存,在訪問時需要順序搜尋檔案。順序檔案有以下兩種結構:第一種是串結構,記錄之間的順序與關鍵字無關。通常的辦法是由時間決定,即按存入時間的先後排列,最先存入的記錄作為第1個記錄,其次存入的為第2個記錄,依此類推。
第二種是順序結構,指檔案中的所有記錄按關鍵字順序排列。
在對記錄進行批量操作時,即每次要讀或寫一大批記錄,對順序檔案的效率是所有邏輯檔案中最高的;此外,也只有順序檔案才能儲存在磁帶上,並能有效地工作,但順序檔案對查詢、修改、增加或刪除單個記錄的操作比較困難。
2) 索引檔案。
然而,對於可變長記錄的檔案,要查詢第i個記錄時,必須順序地查詢前i-1個記錄,從而獲得相應記錄的長度L,然後才能按下式計算出第i個記錄的首址:
注意:假定每個記錄前用一個位元組指明該記錄的長度。
圖4-1 索引檔案示意圖
變長記錄檔案只能順序查詢,系統開銷較大。為此可以建立一張索引表以加快檢索速度,索引表本身是定長記錄的順序檔案。在記錄很多或是訪問要求高的檔案中,需要引入索引以提供有效的訪問。實際中,通過索引可以成百上千倍地提高訪問速度。
3) 索引順序檔案。
索引順序檔案是順序和索引兩種組織形式的結合。索引順序檔案將順序檔案中的所有記錄分為若干個組,為順序檔案建立一張索引表,在索引表中為每組中的第一個記錄建立一個索引項,其中含有該記錄的關鍵字值和指向該記錄的指標。如圖4-2所示,主檔名包含姓名和其他資料項。姓名為關鍵字,索引表中為每組的第一個記錄(不是每個記錄)的關鍵字值,用指計指向主檔案中該記錄的起始位置。索引表只包含關鍵字和指計兩個資料項,所有姓名關鍵字遞增排列。主檔案中記錄分組排列,同一個組中關鍵字可以無序,但組與組之間關鍵字必須有序。查詢一個記錄時,通過索引表找到其所在的組,然後在該組中使用順序查詢就能很快地找到記錄。
圖4-2 索引順序檔案示意圖
對於含有N個記錄的順序檔案,查詢某關鍵字值的記錄時平均需要查詢N/2次。在索引順序檔案中,假設N個記錄分為N1/2組,索引表中有N1/2個表項,每組有N1/2個記錄,在查詢某關鍵字值的記錄時,先順序查詢索引表,需要查詢N1/2/2次,然後再在主檔案中對應的組中順序查詢,也需要查詢N1/2/2次,這樣總共查詢N1/2/2+N1/2/2=N1/2次。顯然,索引順序檔案提高了查詢效率,如果記錄數很多,可以釆用兩級或多級索引。
索引檔案和索引順序檔案都提高了存取的速度,但因為配置索引表而增加了儲存空間。
4) 直接檔案或雜湊檔案(Hash File)
給定記錄的鍵值或通過Hash函式轉換的鍵值直接決定記錄的實體地址。這種對映結構不同於順序檔案或索引檔案,沒有順序的特性。雜湊檔案有很高的存取速度,但是會引起衝突,即不同關鍵字的雜湊函式值相同。