2.1.3. データ構造¶
2.1.3.1. エンティティの概観¶
IM-共通マスタの基本的な設計要素として期間化と国際化への対応があります。期間化を行うことで「昔の帳票を出力したい」、「新しい組織情報をあらかじめ登録しておきたい」といったような要件に対応するためには情報の期間管理を行う必要があります。また国際化情報を持つことで「ログインしているユーザが使用している言語で組織名を表示したい」といった要件に対応することができます。従来のアプリケーション共通マスタではそれぞれ要件の対応のためにテーブルを複数定義して使用していましたが、IM-共通マスタでは1つのテーブル上で同様の情報を保持できるようにしました。IM-共通マスタのエンティティの構造は概念によって大きく5種に大別できます。
2.1.3.1.1. 基本構造¶
基本構造はユーザや組織といった基本的にそれだけで意味を成すマスタ情報を表します。基本構造は期間化・国際化の対応内容によって以下の4種類の構造に分類されます。それぞれの特徴について順に説明した後、期間の取り扱い方について についても説明します。
2.1.3.1.1.1. 期間国際化構造¶
期間化と国際化に対応する構造です。具体的には下記のようなルールに沿って設計されています。
言語を表すロケールIDを持つ(PK)
単一の論理データを表すビジネスキー群を持つ(PK)
期間を表す期間コードを持つ(PK)。期間コードは特定の開始日から終了日の期間を表す(開始終了日付も同テーブルに保持)。削除フラグ、ソートキーを持っている。必須の項目だが、期間化・国際化されない(同一ビジネスキーの全てのレコードが同じ値)。
作成者・作成日付を持つ
最終更新者・最終更新日を持つ
コラム
一つの論理エンティティを表す為に必要なレコード数 は 国際化数 × 期間化数 です。
【図:期間国際化構造】
2.1.3.1.1.2. 国際化構造¶
期間管理される必要が無く国際化情報を含むエンティティは以下のように設計されています。
- 言語を表すロケールIDを持つ(PK)。
- 単一の論理データを表すビジネスキー群を持つ(PK)。
- 削除フラグ、ソートキーを持っている。必須の項目だが、国際化されない(同一ビジネスキーの全てのレコードが同じ値)。
- 最終更新者・最終更新日を持つ。
コラム
一つの論理エンティティを表す為には国際化した数の分だけレコードが必要になります。
【図:国際化構造】
2.1.3.1.1.3. 期間化構造¶
国際化構造とは対照に国際化されないエンティティを表すテーブルは以下のように設計されています。
単一の論理データを表すビジネスキー群を持つ(PK)。 期間を表す期間コードを持つ(PK)。期間コードは特定の開始日から終了日の期間を表す(開始終了日付も同テーブルに保持)。 削除フラグ、ソートキーを持っている。必須の項目だが、期間化されない(同一ビジネスキーの全てのレコードが同じ値)。 作成者・作成日付を持つ。 最終更新者・最終更新日を持つ。コラム
一つの論理エンティティを表す為には期間化した数の分だけレコードが必要になります。
【図:期間化構造】
2.1.3.1.1.4. 非期間国際化構造¶
期間化にも国際化にも対応しないエンティティを表すテーブルは以下のように設計されています。
- 単一の論理データを表すビジネスキー群を持つ(PK)
- 削除フラグ、ソートキーを持っている。必須。
- 最終更新者・最終更新日を持つ
コラム
レコードで一つの論理エンティティを表すことが出来ます。
【図:非期間国際化構造】
2.1.3.1.1.5. 期間の取り扱い方について¶
期間の取り扱い方については下記の制約がありますので注意してください。
基本構造の期間は、システムの開始日から終了日まで全ての期間が定義されている必要があります。システムの開始日と終了日はシステムで管理されており、専用のAPIを使用して取得することが出来ます。期間化されている基本構造では、このシステムの開始日から終了日までの全期間のデータが必ず必要です。また重複や間断のない連続した期間である必要があります。 隣接した期間は物理的には前方の期間の終了日と後方の期間の開始日は同じ値で保持しています。 特定の期間で情報を無効にしたい場合は、削除フラグが定義されていますので、該当の期間を論理削除状態とすることで取り扱います。(【図:期間情報の例】参照)【図:期間情報の例】
特に期間指定無く新たな論理エンティティを作成する場合はシステム開始日~システム終了日の期間で作成します。 期間化に対応した情報は常に全期間分存在しているため、新しい期間を作成する場合は既存の期間を任意の日付で分割して新しい期間として使用します。分割して生成された直後のデータは期間(コード、開始日、終了日)を除いて分割元と全く同じ情報になります。【図:期間の分割】
ある期間の開始日・終了日を変更する場合、その期間の前後のデータについても間断や多重が発生しないように適切に隣接する期間を伸縮しなければなりません。 以下の情報については、期間化された情報のみを保持するため、全期間分のデータを持ちません。
- 内包情報
- 所属役職、所属役割
- 分類所属
コラム
IM-共通マスタで用意しているAPIを使用すると、上記の条件に従ったチェックや以下のようなデータの操作が自動的に実行されます。IM-共通マスタ情報を追加・更新・削除する場合などは特にAPIを使用して行ってください。
ソートキーや削除フラグなど、期間化・国際化に依存しない項目についての整合性の維持
国際化で新しい言語が追加・削除された場合の整合性の維持
論理エンティティの期間を変更した場合に隣接する期間を自動調整する。また隣接する期間を超えて期間を延ばした場合には隣接期間を削除する。システム開始日や終了日を含む期間を縮めた場合に発生する期間の空きを自動補完する
2.1.3.1.2. 内包構造¶
【図:内包構造】
組織構成のように再帰的に階層化された情報を構成する場合に、その関係を記録する情報群です。期間化する場合は期間ごとの構成情報を管理します。(【図:内包構造の期間化】参照)内包情報の期間化は階層のトップノード(原則としてセットと呼ばれ、これを表すテーブルが存在します)単位に管理され、期間毎に配下のツリー構成情報を管理します。【図:内包構造の期間化】
階層構造を保持するために内包構造エンティティでは階層を成す要素間のすべての関係を、階層の距離とともに保持しています。(【図:内包関係レコードのイメージ】参照)【図:内包関係レコードのイメージ】
内包は階層構造のみ管理しており、実際階層化されている実体の情報とは原則的には独立しています。たとえば会社組織の情報であれば、組織の情報は組織の情報として内包からは独立して存在しており、期間も組織は組織で独立して管理します。一方で組織構成の情報は内包によって組織とは独立して管理します。そのほかは基本構造と同様です。コラム
IM-共通マスタでは以下のテーブルが該当します。
- 組織内包
- パブリックグループ内包
- 品目カテゴリ内包
- 法人グループ内包
- 会社グループ内包
2.1.3.1.3. 所属構造¶
【図:所属構造】
ある基本構造のエンティティから別の基本構造のエンティティへの所属関係を表します。内包と異なり再帰構造ではない n 対 m の関係になります。それ以外は基本構造と同様です。コラム
IM-共通マスタでは以下のテーブルが該当します。
- 組織所属
- パブリックグループ所属
- 品目カテゴリ所属
- 法人所属
- 会社グループ所属
- 法人グループ
2.1.3.1.4. 期間属性¶
【図:期間属性(図中左)】
特定の期間に対して付与される属性情報です。このエンティティ自体は期間情報を保持せず、他のエンティティの期間情報を参照します。たとえば組織所属情報は期間化されており、ユーザが組織に所属している間を期間化して保持しています。ユーザの役職は所属情報で定義された期間に対して、組織所属役職情報を定義することでその期間役職に就いていることを表します。【図:組織所属の例】
コラム
IM-共通マスタでは以下のテーブルが該当します。
- 役職所属
- 役割所属
- 各種分類所属
2.1.3.1.5. 分類構造¶
特定のエンティティを任意に分類するための情報構造です。特に分類自身は期間管理されません。分類される側のエンティティの期間に依存します。コラム
IM-共通マスタでは以下のテーブルが該当します。
- ユーザ分類、ユーザ分類項目、ユーザ分類所属
- 組織分類、組織分類項目、組織分類所属
- パブリックグループ分類、パブリックグループ分類項目、パブリックグループ分類所属
- 品目分類、品目分類項目、品目分類所属
- 法人分類、法人分類項目、法人分類所属
- 取引先分類、取引先分類項目、取引先分類所属