name: datalog-schema-philosophy description: DataLog の 6 基本述語・3 層スキーマ戦略など、設計の不変原理を説明。監査ルール定義・IDB ルール設計・新規概念ノード追加・述語選択で判断が必要なときに参照する。運用レシピは datalog-debug-skill 側。

Datalog Schema Philosophy: Atomic Predicate logic

本ドキュメントは、本システムにおける Datalog スキーマ設計および知識表現の基本原則を定義します。

1. 原則:すべては述語論理である

エンティティ内部に属性を閉じ込めるのではなく、事実(Fact)の集合として世界を記述します。

  • 属性(直値)を極力廃止し、述語(関係)によってノード間を接続します。
  • 例外として、計算や比較に用いる数値および日付は属性として保持することを許容します。

2. 統合述語体系とSVO原則

世界を以下の 6 つの基本的なリレーションセットで記述します。主語(S)は常に時間的に新しく追加されたもの、またはより具体的なものを選択します。

A. 概念・実体関係 (Instance/Scope)

  • is_instance_of: 実体(具体)から概念(抽象)へのリンク。 (例: 取引実体 -(is_instance_of)-> 取引)
  • is_super_of: 逆関係。

B. 1:1 属性関係 (Attribute)

  • is_attribute_of: 属性値(既存)から所有実体(新規)へのリンク。 (例: 支出 -(is_attribute_of)-> 取引実体)
  • has_attribute: 逆関係。

C. 1:N 構成関係 (Composition)

  • is_belong_to: 子(新規)から親(既存)へのリンク。 (例: 明細実体 -(is_belong_to)-> 取引実体)
  • has_many: 逆関係。

3. アトミックなベーススキーマと規則による翻案

  • ベーススキーマ: 上記の 6 つの述語のみを用いて、事実に忠実な最小限のグラフを構築します。
  • 規則 (Rules / Interpretation Rules): アトミックな事実を組み合わせ、ドメイン知識に基づく会計用語に翻案します。
    • 例: X -(is_instance_of)-> 取引 且つ 支出 -(is_attribute_of)-> X のとき、規則によって X -(is_payment_nature_of)-> 取引 という会計ドメイン述語を導出します。

4. 属性からドメイン述語への翻訳レイヤー (Strict Layering)

  • Layer 1: Atomic Attributes: 実体ノードからは、単一のアトミックな述語(例: type)を用いて、その性質や状態を表す概念ノードへフラットにリンクします。
  • Layer 2: Interpretation Rules: 規則によって、上記の属性リンクをドメイン知識に基づいた「翻案」を行います。
  • Layer 3: Domain Predicates: クエリ側では翻案された述語(例: payment_is_a)を使用します。

「取引 -> 支払い」のような単一のツリー構造をデータ側で保証(暗黙のカテゴライズ)するのではなく、属性の組み合わせから規則によって動的にドメイン用語を導出します。

5. 制約の外部化 (Validate Queries)

スキーマによる静的な制約(型、単一性など)以外のビジネスロジックに伴う制約は、ハードコードせず Validate Query(監査ルール)として記述します。

  • 例: 「ある属性値が 1100 以下であること」「特定の関係はどれか一つのみ存在すること」などはクエリによって動的に検証します。

5. 実装への反映

  • schema.ts: ユニーク識別子と、基本的な ref 型の関係のみを定義。
  • accounting.ts: API レスポンスを上記のアトミックな事実に展開。
  • Interpretation Rules: データをドメイン用語に翻訳する Datalog Rule 群。

6. 実行時スキーマ情報の取得

  • 哲学・述語 6 種・Layer 戦略はこのドキュメント (不変) を参照。
  • 現在の DataLog 状態 (インスタンス数、登録済み query / idb、未知概念) は datalog_schema MCP ツールで取得する。より深掘りが必要な場合は 返却される recommendedQueries を参考に datalog_query を呼ぶ。
  • 登録済み監査クエリは datalog-store/query.<breaking>.json (共通) と datalog-store/query.<breaking>.local.json (個人) に JSON で保存されており、datalog_query_* ツールで編集可能。
  • IDB (Interpretation Rules) は datalog-store/idb.<breaking>.json / datalog-store/idb.<breaking>.local.json に JSON で保存されており、datalog_idb_* ツールで編集可能。
  • 運用レシピは datalog-debug-skill スキル (references/ + recipes/) を参照。