Files
updsv7-rag/標準版/汎用マスタ/entity/DJND4001_DJND4002_汎用マスタ通用字典知识点.md
guanxiangwei 060b7bf1fa init
2026-08-27 11:27:47 +09:00

6.1 KiB

DJND4001 / DJND4002 汎用マスタ(通用字典)知识点

数据源:updsv7_opho_ci @ 192.168.1.72:5432 (opho profile の Postgres MCP) 表コメントは PG pg_class.obj_description より

1. 位置付け — 汎用マスタとは何か

DJND4001 と DJND4002 はどちらも 汎用マスタ(generic / common code master)、すなわち「共通辞書」。 業務テーブルにある cde_* 系カラムの値は、すべてこの 2 テーブルを参照している。

  • DJND4001 = コードDB (コード値の本体:コード値ごとの表示名・有効期間)
  • DJND4002 = コード一覧DB (cde_sybt ごとの辞書定義:項目名・入力制御・桁数・表示順)
項目 DJND4001 (コードDB) DJND4002 (コード一覧DB)
行数 277,926 427
列数 43 111
一意制約 (cde_sybt, cde_val, dstart) (cde_sybt)

2. 4 フィールドで必ず絞り込む(必須)

中文导览:查代码必须同时带 (ccompkb, dstart, dend, cde_sybt) 这四个字段,缺任何一个都会串到别的字典。

DJND4001 / DJND4002 を問わず、コードを特定するには 次の 4 フィールドを同時に指定 すること:

(ccompkb, dstart, dend, cde_sybt)
  • ccompkb (2) — 会社区分
  • dstart (date, NOT NULL in 4001) — 有効開始日
  • dend (date, NOT NULL in 4001) — 有効終了日
  • cde_sybt (3) — コード種別(辞書 ID)

どれか 1 つでも欠けると、別の辞書に流れる(串数据)。

ある日付時点で有効なコード値を引く書き方:

WHERE ccompkb = :ccompkb
  AND cde_sybt = :cde_sybt
  AND cde_val  = :cde_val
  AND dstart <= :date
  AND dend   >= :date

5. inp シリーズの値ルール(4002 全 inp に共通)

中文导览:inp 系列(全部统一)取值规则:'000' 表示直接文本输入,其它值表示引用别的 cde_sybt。

DJND4002 の すべての inp 系カラム — inp0..inp12、および inp_name / inp_dname / inp_sname / inp_rname / inp_kname01/02/03 — は同じルール:

値 意味
'000' 入力文字列(直接テキスト入力)
その他 他 汎用マスタ を参照(当該 cde_sybt の値を引く)

つまり:

  • inp0 = '000' → nme0 はテキストボックス
  • inp0 = '597' → nme0 はプルダウン、値は cde_sybt='597' (俸給月額) の 4001 から取る

4002 の 1 行で、4001 の項目が「テキスト」なのか「どの辞書を引きに行くのか」が分かる構造になっている。

6. 4001 ↔ 4002 の対応関係

4002 (cde_sybt ごとに 1 行)  ────  定義  ────►  4001 ((cde_sybt, cde_val) ごとに 1 行)
   cde_nme                                       name / dname / sname / rname / kname01..03
   nme0..nme12  (項目名)                          dta1..dta12 (実データ)
   use0..use12  (入力制御:必須/任意)              — (対応なし、UI 層のバリデーション)
   inp0..inp12  ('000' テキスト / 他 cde_sybt)    — (形式定義のみ、実値は dta* 側)
   ord0..ord12  (桁数)                            — (対応なし、UI 層の制約)
   ctrl_cde1..5 (連携参照の定義)                  ctrl_cde1..5 (連携参照の実際の値)
   disp_hyoji / disp_jun                         — (UI 表示制御のみ)

中文导览:use 是输入校验(必填/可选),inp 是输入形式(文本 vs 字典引用) — 不要混淆。

7. よく使うクエリテンプレート

7.1 ある cde_sybt の、ある日付時点で有効な全コード値

SELECT cde_val, name, dname, kname01
FROM djnd4001
WHERE ccompkb = '01'
  AND cde_sybt = :cde_sybt
  AND :date BETWEEN dstart AND dend
ORDER BY ord0, cde_val;   -- 注:4001 自体に ord 列は無し、並び順は 4002 定義に依る

7.2 ある cde_sybt の項目定義(4002)

SELECT cde_nme, cde_exp, cde_num_nme,
       nme0, use0, inp0, ord0,
       nme1, use1, inp1, ord1,
       -- ...
       disp_hyoji, disp_jun
FROM djnd4002
WHERE ccompkb = '01'
  AND cde_sybt = :cde_sybt
  AND :date BETWEEN dstart AND dend;

7.3 ある項目がどの辞書を参照しているか

-- "cde_sybt=597 の nme5(俸給月額)が参照している辞書は?"
SELECT inp5 FROM djnd4002
WHERE ccompkb = '01' AND cde_sybt = '597';
-- inp5='000' → 直接入力;それ以外 → 参照先の cde_sybt

7.4 cde_sybt ごとの行数分布

SELECT cde_sybt, COUNT(*) AS cnt
FROM djnd4001
WHERE ccompkb = '01'
GROUP BY cde_sybt
ORDER BY cnt DESC;
-- 718 / 716 / 714 各 6607 行
-- 710 / 595 / 706 / 708 / 712 / 704 / 597 各 6542 行
-- 「同じ cde_sybt で行数が揃っている」ものは年度/版ごとに履歴を持っている典型例
-- → dstart / dend で世代を切り替えている

8. 注意点

  • 現在の MCP 接続先は updsv7_opho_ci(CI 環境)。本ノートのデータ・インデックスはすべてこの DB 基準。
  • 4001 の dstart / dend は NOT NULL。主表には必ず期間が入る。アプリ側で dstart が空に見えるケースは、ビューや作業テーブルを経由しているケースがほとんどで、生の 4001 を直接引いているのではない。
  • 4001 の 277k 行のうち、cde_sybt=718 / 716 / 714 各 6607 行のように「同 cde_sybt で同数」になる分布 — これは典型的には「年度/版ごとに同じ構造の履歴を積み、dstart / dend で世代を分ける」設計のしるし。
  • use0..use12(必須桁入力 / 必須入力 / 任意入力)は 入力値の検証。一方、inp0..inp12('000' / 他 cde_sybt)は 入力形式(テキストか辞書参照か)で、別物。混同しないこと。
  • ctrl_cde1..5(4002 側)と ctrl_cde1..5(4001 側)はそれぞれ「連携参照の定義」と「連携参照の実際の値」を担う両端。