セクション 10 / 11

データディクショナリ

データディクショナリの階層構造、テーブル定義とインデックス、外部キーとサーチヘルプ、そしてバッファリングを解説します。

目次を開く

データディクショナリ(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を押したときに現れる選択画面がこれにあたります。データ要素に割り当てるか、テーブル項目に個別に割り当てます。

DDICの主なオブジェクト
オブジェクト用途
テーブルデータの格納
ビュー複数テーブルの結合、または項目の絞り込み
データ要素/ドメイン型の定義
構造テーブルではないレコード型の定義
テーブル型内部テーブルの型定義
サーチヘルプF4検索
ロックオブジェクト排他制御。ENQUEUE/DEQUEUE関数が生成される

📖 わからない用語は SAP用語辞典 で調べられます。

理解度チェック

このセクションの内容を確認しましょう。

確認問題 1

データディクショナリのトランザクションコードはどれか。

確認問題 2

データベース上に1対1で対応するテーブルが作成されるテーブルタイプはどれか。

確認問題 3

ドメイン(Domain)はフィールドのラベルやヘルプテキストなどの意味的な情報を定義する。

確認問題 4

データエレメントとドメインの関係として正しいものはどれか。

確認問題 5

検索ヘルプ(Search Help)はデータディクショナリで定義される。

確認問題 6

同時更新によるデータ不整合を防ぐためにデータディクショナリで定義するオブジェクトはどれか。