プラットフォーム別物理モデルの設計
データモデリング × データ定義 → 物理モデル(プラットフォーム固有)
データモデリング(ビジネス層)
- エンティティ
- 属性(アトリビュート)
- リレーション
エンティティ・データ定義
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 モデル+複合属性モデルの全体

図. IPA isoiec-11179-4.pdf, p.33
ビジネス主導
ISO 11179をベースにビジネス主導のビジネスルール管理に拡張する。
「属性ドメイン」とは
属性ドメインとは、
「その属性が取り得る値の集合(許容される値の範囲)」
のこと。
データモデルの“遺伝子(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
- フィールドタイプ
プラットフォーム: 表計算アプリ
- セルの表示形式(データ型)
メタデータレジストリの設計と実装
最小構成での設計と実装
メタデータレジストリを実装するため、物理データ層に、odooプラットフォームを追加しました。
まずは、odooプラットフォームで、メタデータレジストリを実装します。
odoo ソースコード
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="関連データ項目",
)
設計の見直し
参考資料

