期間限定属性(chronological)


まえがき

属性 chronological は,時間系列上で現実世界において

となる情報について,有効とするのが望ましい期間をデータベースシステムで統一的な手法により扱うために導入する.
これはデータベース上での情報の自動的な無効化を実現するものではない. すなわち,この期間限定属性を情報に付加したとしても,情報自体は常に有効な状態でデータベース中に存在する. 期間限定属性はデータベースに対して発行するクエリにその条件が含まれている場合のみ利用される.


期間限定したい情報の例

○組織の改組
    大学などの組織においては,不定期に学科や学部の改組が行われている.
    組織の改組にともない,改組前の【組織】情報を破棄し,改組後の【組織】情報をデータベースに登録すれば何ら問題はないように思われるかも知れないが,本データベースでは,他の情報から【組織】情報を参照(ex. 【著作】.[組織]で著作が属する組織を登録する)するため,古い【組織】情報を削除することが出来ない.
    削除されない【組織】情報は已然としてデータベースの中で有効な状態で存在するため,例えば大学の組織の構成チャートを作成するときなどに問題が発生する.
    この問題を回避するために,情報自体に有効期間を定義し,情報として抽出する場合に有効であるか否かを判断できる様にしておく必要がある.
○委員の交替
    本データベースでは,委員会委員などの定期的に個人が交替する情報を【擬人】情報として表現し,蓄積している.
    現在,この情報には同時に一人の【個人】情報しか登録できないため,新しい個人を委員として登録すると,旧委員の内容は失われてしまう.もちろん,旧委員が誰であったかという記録は,情報の変更履歴に含まれていることになるが,変更履歴は単に編集の履歴を示すものであり,後登録の修正作業をも含まれるので,信頼性がない.また,いつからいつまでという期間の情報も含まれていない.
    これに対処するためには,委員の登録内容に付加情報として期間を列記出来るようにすることが必要である.


基本方針

○出来るだけ体系だてて
    期間限定が上記に掲げたもののみに該当する事柄であれば,【組織】【擬人】の情報もしくはそれらの中の項目のみを特別扱いし,例外的な処理をシステムに組み込めばよい.
    しかし,この種の期間限定の属性は,データベース中のほとんどの項目に必要性が生じる可能性がある. それらについてその都度特別なコードを記述し,例外処理を行うことは繁雑な作業をうみ,強いてはシステムの安定運用性,実現性に大きく関わってくる事柄となる.
    結局のところ,可能な限り共通のコードを利用して上記の要件を解決する方法を考えておきたい.(つまり,楽をしたいということである)
○期間限定を行う箇所を指定する
    全ての情報および全ての項目において,期間限定を可能とするのではなく,テーブルの定義もしくはテーブル中のカラムの定義において,期間限定が可能なテーブル,カラムを指定する. 指定は,テーブルやカラムの属性(<edb:attribute>...</edb:attribute>)に期間限定(chronological)を指定することによる. すなわち,
<edb:attribute>chronological</edb:attribute>
と記述する.
○期間限定に対するEDB最下層(libedb)の処理
    期間限定を行った情報についてEDBの最下層(libedb)では,
  • 期間限定された情報抽出要求が発行された場合のみ,それに合致する情報を抽出する.
  • 権限が委譲される参照登録のカラムについては,現時刻に一致する要素のみが権限委譲の対象となる.
  • 見出しに利用されるカラムについては,現時刻に一致する要素のみが見出しに利用される.
である.
すなわち,libedbでは期間限定が行われている情報の解釈について特定の指針は与えず,期間限定を行った情報やカラムをどのように扱うかは上位層に委ねる.
    要素数Nとして定義されているカラムに期間限定属性(chronological)が指定された場合,
  • 要素数を任意数として扱う.
  • 各要素に登録されている期間がN以上重複する場合にはエラーとする.
  • 各要素を年代順に排列する.
を行う.


期間限定属性のXMLでの表現

○期間限定の表現
    期間限定の情報をXMLで表現するために,これらをXMLの要素(ELEMENT)ではなく,属性(ATTRIBUTE)として記述する. 属性名および指定方法は
  • date.from="avail-from-date"
  • date.to="avail-to-date"
である. 『avail-from-date』,『avail-to-date』は年月日(YYYYMMDD)で指定し,0〜99999999の整数値とする. 実際に存在しない年月日を指定しても構わない. 『avail-from-date』の既定値は0,『avail-to-date』の既定値は99999999であり,それぞれの要素が省略された場合に用いられる.
    ある一つの情報の全体を期間限定する場合には,その情報のbase要素に
<edb:base ... date.from="avail-from-date" date.to="avail-to-date" ... />
と記述する. ただし,テーブル定義の属性にchronologicalが指定されていない場合には無視される.
    ある一つの要素を期間限定する場合には,その要素の属性に
<edb:element ... date.from="avail-from-date" date.to="avail-to-date" ... >
と記述する. ただし,カラム定義の属性にchronologicalが指定されていない場合には無視される.
○期間判定
    ある日時( date )が指定されたとき,期間に合致するかどうかは
avail-from-datedate    AND    dateavail-to-date
で判断される.等号が含まれていることに注意.
また,期間( fromto )が指定されたとき,期間の重複しないかどうかは,
avail-to-datefrom    OR    toavail-from-date1
で判断される.等号が含まれていないことに注意.
○期間限定属性の継承
    階層化されたカラムにおいて期間限定の情報は継承される. 継承は,
情報→上位の要素→下位の要素
の方向で行われ,下位の要素に期間限定属性の指定がない場合にも有効である.
これは,期間限定できない要素においても,暗黙のうちに期間限定される可能性を示している. 実際のXMLの記述内容に関する処理においては,全ての要素に期間限定の可能性があると想定しておく必要がある.


関係データベース(RDB)への反映

○期間限定の表現
    期間限定の情報は,全てSQLレベルにおいて用意されているテーブルのベースカラム(SQL: edb_base)に反映される. 反映されるカラムは,
  • date_from: date.from 属性の値.
  • date_to: date.to 属性の値.
である. 既定値はなく,NULLになることもない. XML上で date.from,date.to が指定されていない場合には,date_from, date_to はそれぞれ 0, 99999999の値が記録される.
○情報および要素の期間限定情報の記録場所
    情報自体が期間限定されている場合には,最上位のテーブル
  • sql-table-name.date_from
  • sql-table-name.date_to
にその情報が記録される. libedbでは sql-table-name は (EdbTableInfo) -> sqlname で参照できる. 要素毎の期間限定情報は
  • sql-table-name_sql-column-name.date_from
  • sql-table-name_sql-column-name.date_to
に記録される. libedbでは sql-table-name_sql-column-name は (EdbColumnInfo) -> reldb_sqlname で参照できる. 要素が階層化されている場合には,最下層の期間限定属性は
  • sql-table-name_sql-column-name1_sql-column-name2.date_from
  • sql-table-name_sql-column-name1_sql-column-name2.date_to
に記録される. libedbでは sql-table-name_sql-column-name1_sql-column-name2 は (EdbColumnInfo) -> reldb_sqlname で参照できる.
これらは全て,期間限定属性を継承済みの期間である.


どのテーブル,カラムについて期間限定を指定するか?

期間限定を指定する際にどの情報やどのカラムに指定するのがよいのか,また,悪いのか?

○短見出し(caption=1)に利用されるカラムには指定しない方がよい.
EDBでは参照登録すると,自動的に参照先の情報の短い見出しを作成し,冗長な情報としてカラムのテキストに代入する. この代入は,RDB上で行われるとともに,補間XML(cXML)にも反映される. 期間限定が行われた場合,どの要素を見出しとするかは予想がしがたい.
組織の改組が名称の変更のみであったとしても,【組織】.[名称]を期間限定に指定するのではなく,その場合にはマップを用いた従来の情報の同一性を利用し,別の【組織】情報として登録しておくのがよい. この場合,
  • 改組前の【組織】情報の期間指定: date.from="xxxx" date.to="改組日の前日"
  • 改組後の【組織】情報の期間指定: date.from="改組日"
とする.
○年限が確定している様な情報,または,年次毎に内容が変更されるような情報
【擬人】情報の期間限定属性定義例(情報: 徳島大学工学部長)
テーブルの定義
登録情報のXML表現
登録情報の表示


EDB working group <edb-admin@web.db.tokushima-u.ac.jp>
$Id: chronological.html,v 1.15 2005/01/25 13:43:08 alex Exp $