首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

AS/400 (IBM i) 邏輯文件 (LF) 設計指南:視圖、索引、選擇/投影的統一建模

     編輯:MySQL 資料庫相關知識

邏輯文件本質:物理文件的虛擬視圖 + 索引

在 IBM i (原 AS/400) 中,邏輯文件 (Logical File, LF) 相當於關係數據庫的 View + Index 合體:

  • 定義記錄格式 (投影列、重命名、派生欄位)。
  • 定義鍵序列 (索引順序、排序規則、唯一性)。
  • 定義選擇/省略 (行級過濾條件)。
  • 不存儲數據,僅維護鍵指針指向物理文件 (PF) 成員數據。

DDS (Data Description Specifications) 定義語法

1. 基礎結構


A          R LFREC                  PFILE(PFNAME)   * 記錄格式名,引用物理文件
A            FIELD1                                       * 包含字段 (投影)
A            FIELD2
A          K FIELD1                                        * 鍵字段 (索引順序)
  • R:記錄格式名 (通常與 PF 同名或加後綴)。
  • PFILE:指定基礎物理文件 (可多個,實現聯接邏輯文件)。
  • K:鍵字段,構建索引順序,支持 DESC、ABSVAL、ZONE、FCFO/FIFO/LIFO 等排序屬性。

2. 選擇/省略 (行過濾)


A          R LFREC           PFILE(PFNAME)
A            FIELD1
A            FIELD2
A          K FIELD1
A          S FIELD2          COMP(GT 100)    * 選擇 FIELD2 > 100 的行
A          O FIELD3          COMP(EQ 'DEL')  * 省略 FIELD3 = 'DEL' 的行
  • S (Select):僅包含滿足條件的行。
  • O (Omit):排除滿足條件的行。
  • 條件運算符:EQ/NE/LT/LE/GT/GE、RANGE、LIST、VALUES。
  • 可組合多條件:S FIELD1 COMP(GT 10) COMP(LT 100) 等價 BETWEEN。

3. 聯接邏輯文件 (JLF)


A          R JLFREC           PFILE(PF1 PF2)   * 多物理文件
A            PF1.FIELD1
A            PF2.FIELD2
A            PF2.FIELD3
A          K PF1.FIELD1
A          J JOIN(1 2)                           * 聯接規範
A            JFLD(PF1.KEY / PF2.FKEY)            * 聯接字段
A            JREF(1)                             * 主文件 (左表)
A            JTYPE(INNER)                        * INNER/LEFT/RIGHT/EXCEPTION

4. 衍生欄位 / 表達式


A          R LFREC           PFILE(PFNAME)
A            FIELD1
A            FULLNAME       30A  COLHDG('Full Name')
A            FULLNAME       CONCAT(FIELD1 ' ' FIELD2)  * 表達式定義
A          K FULLNAME

LF 與 SQL View/Index 對照表

概念DDS LFSQL
投影列列出字段名SELECT col1, col2 ...
行過濾S/O ... COMP(...)WHERE ...
排序/索引K field ...CREATE INDEX ... ON ... (col) / ORDER BY
聯接JOIN ... JFLD ... JTYPEJOIN ... ON ...
衍生欄位CONCAT/SUBST/表達式col1 || ' ' || col2 AS new_col
唯一性約束UNIQUE 關鍵字UNIQUE INDEX / PRIMARY KEY

性能與維護最佳實踐

  • 鍵字段順序:高選擇性、等值過濾字段在前,範圍/排序字段在後。
  • 避免過度 LF:每個 PF 成員最多建議 < 20 個 LF,過多導致維護開銷大、插入刪除慢。
  • 共享訪問路徑 (ODP):程序中 OPEN 同一 LF 多次可共享開放數據路徑,減少開銷。
  • 重組 (RGZPFM):定期重組 PF 成員,壓縮刪除空間,LF 索引自動重建,恢復順序讀取性能。
  • 編碼一致性:LF 與 PF CCSID 必須兼容,否則數據轉換開銷大。

現代化開發:SQL DDL 替代 DDS


-- 等價 SQL 對象
CREATE VIEW LF_VIEW AS
SELECT FIELD1, FIELD2, FIELD1 || ' ' || FIELD2 AS FULLNAME
FROM PF_TABLE
WHERE FIELD2 > 100 AND FIELD3 <> 'DEL';

CREATE INDEX LF_IDX ON PF_TABLE (FIELD1);  -- 鍵序列
-- 選擇/省略在 SQL 中由 View WHERE 實現,索引由優化器決定是否使用

趨勢:新開發優先用 SQL DDL (View/Index/Trigger),DDS LF 維護存量應用。IBM i 7.3+ 完整支持 SQL 標準,優化器對 View+Index 組合優化極佳。


邏輯文件是 IBM i 獨特的「視圖+索引」融合抽象,將數據訪問路徑 (選擇、投影、排序、聯接) 封裝為系統級對象,被查詢優化器、高級語言 (RPG/COBOL/CL) 直接識別。掌握 DDS 語法與 SQL 映射關系,能在存量現代化改造中平滑過渡,保護既有投資。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved