データディクショナリ(DDIC)は、SAPシステム内のデータ定義を一元管理する仕組みです。テーブル、ビュー、データ型、検索ヘルプなどが、すべてここで定義されます。SE11でアクセスします。
3階層のデータ型定義
DDICのデータ型は、3つの階層で構成されています。この分離が、SAPシステム全体の一貫性を支えています。
| 階層 | 定義する内容 | 例 |
|---|---|---|
| ドメイン | 技術的な属性:型、桁数、値範囲、変換ルーチン | MATNR18(CHAR 18、変換ルーチンMATN1) |
| データ要素 | 意味的な属性:項目ラベル、ドキュメント、検索ヘルプ | MATNR(ラベル「品目」) |
| テーブル項目 | 実際のテーブルの列 | MARA-MATNR |
同じドメインを複数のデータ要素が参照できます。たとえば「金額」というドメインを、「請求金額」「支払金額」といった異なる意味のデータ要素が共有します。技術的な仕様は同じでも、画面に表示されるラベルが異なる、という関係です。
テーブルの定義
| 要素 | 内容 |
|---|---|
| 項目 | 列の定義。データ要素を参照する |
| 主キー | レコードを一意に識別する項目の組み合わせ |
| 配送クラス | データの性質(マスタ、トランザクション、カスタマイジング) |
| データブラウザ/テーブルビュー保守 | 表示・保守の許可設定 |
| 技術設定 | データクラス、サイズカテゴリ、バッファリング |
| インデックス | 検索を高速化するための索引 |
インデックス
インデックスは、検索を高速化するための索引です。主キーには自動的に主インデックスが作られますが、主キー以外の項目で頻繁に検索する場合は、二次インデックスを作成します。
インデックスの効果は、WHERE句の項目がインデックスの先頭から連続して使われるかどうかで決まります。
" インデックス: (WERKS, MATNR, LGORT)
" 効く:先頭から使っている
WHERE werks = '1000'
" 効く:先頭から連続
WHERE werks = '1000' AND matnr = 'MAT-001'
" 効きにくい:先頭が指定されていない
WHERE matnr = 'MAT-001'
" 効きにくい:途中が飛んでいる
WHERE werks = '1000' AND lgort = '0001'テーブルバッファリング
バッファリングは、テーブルの内容をアプリケーションサーバのメモリに保持し、データベースアクセスを減らす仕組みです。
| 種類 | 内容 | 向いているテーブル |
|---|---|---|
| 完全バッファリング | テーブル全体をメモリに保持 | 小さいカスタマイジングテーブル |
| 汎用領域バッファリング | 主キーの先頭N項目が一致する範囲を保持 | クライアント別・プラント別の設定 |
| 単一レコードバッファリング | アクセスしたレコードだけを保持 | 大きいテーブルの一部を頻繁に読む場合 |
| バッファリングなし | DBに毎回アクセス | トランザクションデータ |
外部キーとサーチヘルプ
外部キーは、テーブル間の参照関係を定義します。入力値のチェックに使われ、存在しないコードの入力を防ぎます。
サーチヘルプ(検索ヘルプ)は、入力欄で候補一覧を表示する機能です。F4を押したときに現れる選択画面がこれにあたります。データ要素に割り当てるか、テーブル項目に個別に割り当てます。
| オブジェクト | 用途 |
|---|---|
| テーブル | データの格納 |
| ビュー | 複数テーブルの結合、または項目の絞り込み |
| データ要素/ドメイン | 型の定義 |
| 構造 | テーブルではないレコード型の定義 |
| テーブル型 | 内部テーブルの型定義 |
| サーチヘルプ | F4検索 |
| ロックオブジェクト | 排他制御。ENQUEUE/DEQUEUE関数が生成される |