Summary:
このモデルは,階層型データベースに見られる親子関係のみの固定的な構造に対し,より柔軟で多対多の関係性を持つデータ表現を可能とする設計を特徴とする.データの論理構造をレコード型とセット型の組み合わせによって定義し,アプリケーションはこれらの構造をナビゲーション的に辿ることでデータ操作を行う.CODASYLモデルは,データ操作言語[DML]とスキーマ定義言語[DDL]の分離を導入し,データ定義とプログラムロジックの独立性を高めた.
また,CODASYLデータベースは,その後のリレーショナルデータベース設計に影響を与えた中間的な段階のデータベースモデルとして位置づけられる.
CODASYLモデルの構成は,レコード型,セット型,エリアといった明示的に定義されたデータ構造を基礎とする.レコード型は,固定長または可変長のデータ項目で構成され,同一の構造を持つ実体[レコード]を表現する.各レコード型には一意な識別子が与えられ,データ項目は文字列,数値,日付などの基本データ型として定義される.
セット型は,オーナーレコード型とメンバーレコード型からなる1対多の関係を表し,CODASYLモデルのネットワーク的性格を支える中心概念である.一つのレコード型が複数のセットにおいて同時にオーナーまたはメンバーとして参加することが可能であり,これにより非階層的で複雑なネットワーク構造が実現される.セットの物理的な実装は,ポインタチェーンによってなされ,オーナーから最初のメンバーへのポインタ,各メンバー間の順方向ポインタ,そして逆方向ポインタを保持する.これにより双方向のデータトラバースと効率的な順次アクセスが可能となる.
データベースは複数のエリアに分割され,それぞれが物理格納,同時実行制御,回復処理などの単位となる.レコード型は特定のエリアに配置され,格納効率やアクセスパターンに応じた物理的最適化が施される.
プログラムによるデータ操作は,手続き型でカレンシー[現在位置]という概念を用いて行われる.FIND,GET,STORE,MODIFY,ERASEといった命令により,レコードの検索,取得,挿入,更新,削除が行われる.FIND文はキー検索,セット順検索,全体走査の各モードを提供し,その結果は該当レコード型のカレンシーポインタに保持され,後続処理の参照基準となる.
同時実行制御はレコードまたはエリア単位のロック機構により実現され,共有ロックと排他ロックの使い分けによってデータ整合性が保証される.デッドロックの検出と解消のためのアルゴリズムも組み込まれており,高トラフィックな環境でも安定した処理が可能である.
トランザクション制御はCOMMITおよびROLLBACK命令によって行われ,複数の操作を一単位として整合性を保った処理が保証される.障害時にはログファイルとチェックポイントによって自動回復が実施される仕組みが提供されている.
スキーマ定義はDDLによって記述され,レコード型の構造,セット型の関係,エリアの定義,制約条件,アクセス権限などが静的に定義される.DMLは主にCOBOLなどのホスト言語に埋め込まれる形で用いられ,ホストプログラムと密接に連携して動作する.
CODASYLモデルには,セット構造が静的であること,実行時に関係を動的に変更できないこと,スキーマ変更に再編成を要することなどの制約が存在する.これによりデータ構造の柔軟性は限定的であり,変更耐性が低い.一方で,アクセス経路をプログラマが明示的に制御できるという点では,性能最適化の余地が大きい.
このモデルに基づいた代表的な実装には,IDMS[Integrated Database Management System],IDS[Integrated Data Store],TOTAL,DMS-1100などがあり,いずれも1970年代から1980年代にかけて大規模商用システムで広く用いられた.これらはCODASYL仕様に準拠しつつ,製品ごとの最適化や拡張機能を持ち,実用的な性能と信頼性を確保した.
CODASYLモデルは,階層型データベース[IMSなど]とリレーショナルモデル[RDB]の間に位置する過渡的なアプローチとして,データベース技術史において重要な役割を果たした.リレーショナルモデルの普及に伴いその使用は減少したが,DDLとDMLの分離,スキーマ独立性,トランザクション処理,同時実行制御など,多くの概念がその後のRDBMSに受け継がれ,今日のデータベース設計に深い影響を与えている.
Mathematics is the language with which God has written the universe.