0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(下書き)データガバナンスのためのデータ定義(odooカスタムモジュール開発)

0
Last updated at Posted at 2026-07-12

プラットフォーム別物理モデルの設計

データモデリング × データ定義 → 物理モデル(プラットフォーム固有)

データモデリング(ビジネス層)

  • エンティティ
  • 属性(アトリビュート)
  • リレーション

エンティティ・データ定義

ISO 11179をベースにビジネス主導のビジネスルール管理に拡張する。

ISO 11179

  • オブジェクトクラス(Object Class)
    データ要素が属する「実体」。
    例:人、製品、タスク、顧客、注文、車両。
    Odoo での対応:
    → Odoo のモデル(テーブル)
    例:product.product, project.task, res.partner

  • データ要素概念(Data Element Concept)
    データ要素の「意味的な概念」。
    例:身長、住所、難易度、担当者、製品仕様。
    Odoo での対応:
    → x_attribute_type(属性タイプ:階層)
    → x_attribute_composite(複合属性)

  • データ要素(Data Element)
    オブジェクトクラスが持つ具体的な属性。
    名前・コード・型・値ドメイン・意味を持つ。
    Odoo での対応:
    → x_attribute(属性モデル)

  • 値ドメイン(Value Domain)
    データ要素が取りうる値の集合・制約。
    例:整数 0〜300、選択肢(易・普・難)、Many2one の絞り込み条件。
    Odoo での対応:
    → x_attribute_domain(属性ドメイン:フラット)

  • 概念ドメイン(Conceptual Domain)
    抽象的な値の意味集合。
    例:「難易度」という概念に対して「易・普・難」という意味集合。
    Odoo での対応:
    → x_attribute_type の上位カテゴリ(階層の親ノード)

  • 分類体系(Classification Scheme)
    データ要素や概念を分類する体系。
    Odoo での対応:
    → x_attribute_type(階層構造)

  • レジストリ(Metadata Registry)
    これらすべてを管理する仕組み。
    Odoo での対応:
    → ここで設計した 3 モデル+複合属性モデルの全体

image.png
図. IPA isoiec-11179-4.pdf, p.33

ビジネス主導

ISO 11179をベースにビジネス主導のビジネスルール管理に拡張する。

image.png

「属性ドメイン」とは

属性ドメインとは、
「その属性が取り得る値の集合(許容される値の範囲)」
のこと。

データモデルの“遺伝子(DNA)”の中核であり、データ品質・整合性・意味論の源泉になります。

👉 列挙型=“企業の公式な遺伝子”
👉 非列挙型=“現場の生活習慣としての遺伝子”

分類 遺伝子としての性質 ガバナンスの焦点
列挙型 意思決定の痕跡(歴史)そのもの 変更管理・バージョン管理・意味論の継承
非列挙型 運用のクセ・現場文化が蓄積 入力ルール・品質管理・暗黙知の形式知化

列挙型の属性ドメイン(Enumerated Domain)

定義
取り得る値が 有限のリストとして明示的に定義されているドメイン。

  • 性別:{Male, Female, Other}
  • ステータス:{Draft, Active, Suspended, Closed}
  • 都道府県コード:{01, 02, …, 47}
  • 商品カテゴリ:{食品, 衣料, 家電}

特徴

  • 値が固定
  • 意味論が明確
  • データ品質が高い
  • マスタ管理が必要
  • 変更すると歴史(遺伝子)に影響する

ガバナンス上のポイント

  • 変更の影響が大きい(系譜に刻まれる)
  • マスタのバージョン管理が必須
  • 組織の意思決定の痕跡が残る(DNA)

非列挙型の属性ドメイン(Non‑Enumerated Domain)

定義
取り得る値が 無限または範囲・型で定義されるドメイン。

  • 数値:整数(int)、実数(float)
  • 文字列:varchar(255)
  • 日付:date
  • 金額:decimal(10,2)
  • 温度:−50〜200℃
  • 緯度経度:−180〜180

特徴

  • 値の種類が無限
  • 型・範囲で制約
  • 柔軟性が高い
  • 意味論は文脈依存
  • マスタ管理は不要

ガバナンス上のポイント

  • 意味論が曖昧になりやすい(暗黙知が入り込む)
  • 入力ルール・バリデーションが重要
  • データ品質のばらつきが発生しやすい

物理モデル

「システム」として設計する。

プラットフォーム: odoo ORM

  • フィールドタイプ

プラットフォーム: 表計算アプリ

  • セルの表示形式(データ型)

メタデータレジストリの設計と実装

image.png

最小構成での設計と実装

メタデータレジストリを実装するため、物理データ層に、odooプラットフォームを追加しました。
まずは、odooプラットフォームで、メタデータレジストリを実装します。

odoo ソースコード
models.py
from odoo import models, fields

# ----------------------------
# データモデル
# ----------------------------
class DataModel(models.Model):
    _name = "biz001.data_model"
    _description = "biz001 データモデル"

    name = fields.Char(string="名称", required=True)

    item_ids = fields.One2many(
        "biz001.data_item",
        "model_id",
        string="データ項目",
    )


# ----------------------------
# データ項目
# ----------------------------
class DataItem(models.Model):
    _name = "biz001.data_item"
    _description = "biz001 データ項目"

    name = fields.Char(string="名称", required=True)

    data_type = fields.Selection(
        [
            ("char", "文字列"),
            ("integer", "整数"),
            ("float", "実数"),
            ("boolean", "真偽値"),
            ("date", "日付"),
            ("datetime", "日時"),
            ("selection", "選択肢(列挙型)"),
            ("relation", "関連(Many2one/One2many)"),
        ],
        string="データ型",
        required=True,
    )

    model_id = fields.Many2one(
        "biz001.data_model",
        string="データモデル",
        required=True,
    )

    domain_id = fields.Many2one(
        "biz001.data_domain",
        string="データドメイン",
    )


# ----------------------------
# データドメイン
# ----------------------------
class DataDomain(models.Model):
    _name = "biz001.data_domain"
    _description = "biz001 データドメイン"

    name = fields.Char(string="名称", required=True)
    description = fields.Text(string="説明")

    item_ids = fields.One2many(
        "biz001.data_item",
        "domain_id",
        string="関連データ項目",
    )



設計の見直し

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?