(57)【特許請求の範囲】
【請求項１】
リレーショナルデータベースにレコードを追加するシステムに於いて、
前記レコードは、アプリケーションプログラムが意識しているキーと、キー値が同一のレコード群の内の順序を示す順序番号を含み、
前記アプリケーションプログラムからのレコード追加要求に応答してレコードを追加する際、前記アプリケーションプログラムが追加要求しているレコードと同一のキー値を持つレコードが前記リレーショナルデータベース内に存在する場合は、その同一のキー値を持つレコードの内の順序番号の最大値に１を加算した値を出力し、存在しない場合は、１を出力する順序番号割当手段と、
前記順序番号割当手段から出力された値を前記アプリケーションプログラムが追加要求しているレコードの順序番号に設定し、該レコードをリレーショナルデータベース内に格納するレコード追加手段と、
前記アプリケーションプログラムから渡される前記追加するレコードの位置情報と、前記アプリケーションプログラムが追加要求しているレコードのキー値とに基づいて、前記リレーショナルデータベース内の同一のキー値を持つ、順序番号の更新が必要なレコードを検索するレコード検索手段と、
前記レコード検索手段によって検索されたレコードの順序番号を更新する際、前記順序番号割当手段から出力された値に１を加算した値から始まる連番を前記検索されたレコードの順序番号に設定し、該レコードを更新するレコード更新手段と、
前記アプリケーションプログラムが追加要求しているレコードと同一のキー値を持つレコードの順序番号が上限値に達した際、該レコードの順序番号を１から始まる連番で再編成する順序番号再編成手段とを備えたことを特徴とするリレーショナルデータベースのレコード追加システム。
【請求項２】
前記レコード検索手段は、前記順序番号に設定されたインデクスを使用してレコードを検索する機能を備えたことを特徴とする請求項１記載のリレーショナルデータベースのレコード追加システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リレーショナルデータベースのレコード追加システムに関し、特に構造型データベース特有のレコード追加・検索手段をリレーショナルデータベースで実現する際に有用な、リレーショナルデータベースのレコード追加システムに関するものである。
【背景技術】
【０００２】
構造型データベースでは、同一の親を持つ子レコード同士がポインタによって繋がっており、レコードの検索はポインタに沿って行われる。アプリケーションプログラムは子レコードを追加する際に、任意の位置に子レコードを追加することで、子レコードを検索する際の順序を自由に決定することができる。
一方、リレーショナルデータベースでは、テーブル内のレコードの格納順序とは別に、レコードを検索する際、特定の列の値の昇順または降順にレコードを並べ替えることで、検索する順序を動的に決定することができる。
【０００３】
構造型データベースをリレーショナルデータベースに移行する際、この種の構造型データベース特有のレコード追加・検索手段をリレーショナルデータベースで実現する必要性が発生することがある。
特許文献１の「リレーショナルデータベースにおける階層型データのマッピングプログラム、装置、および方法」では、レコードに仮想カラムを設け、レコードを追加する際、自動的に順序を付与する方法が開示されている。この特許文献１で開示された方法では、順序がテーブル内の先頭となるようにレコードを追加する際、追加するレコードの順序に１を付与してレコードを追加すると共に、テーブル内のすべてのレコードの順序を元の値から１加算することで、順序付けを行う。
【特許文献１】特開２００４−２５９０７５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
構造型データベースによっては、同一の親を持つ子レコードの内の任意の位置に子レコードを追加することができる。これをリレーショナルデータベースで実現する場合、アプリケーションプログラム自身が親キーの値が同一のレコード群の内の順序付けを行う必要がある。
上述した特許文献１では、子レコードの内の任意の位置に子レコードを追加する方法については何等開示されていない。
【０００５】
以上の現状に鑑み、本発明は、アプリケーションプログラムが同一のキー値を持つレコードの内の順序付けを行うことなく、任意の位置に順序性を保証したレコードの追加を可能とすることで、構造型データベース特有のレコード追加・検索手段をリレーショナルデータベースで実現するリレーショナルデータベースのレコード追加システムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記の課題を解決すべく、本発明は以下の構成を提供する。
請求項１に係る発明は、リレーショナルデータベースにレコードを追加するシステムに於いて、
前記レコードは、アプリケーションプログラムが意識しているキーと、キー値が同一のレコード群の内の順序を示す順序番号を含み、
前記アプリケーションプログラムからのレコード追加要求に応答してレコードを追加する際、前記アプリケーションプログラムが追加要求しているレコードと同一のキー値を持つレコードが前記リレーショナルデータベース内に存在する場合は、その同一のキー値を持つレコードの内の順序番号の最大値に１を加算した値を出力し、存在しない場合は、１を出力する順序番号割当手段と、
前記順序番号割当手段から出力された値を前記アプリケーションプログラムが追加要求しているレコードの順序番号に設定し、該レコードをリレーショナルデータベース内に格納するレコード追加手段と、
前記アプリケーションプログラムから渡される前記追加するレコードの位置情報と、前記アプリケーションプログラムが追加要求しているレコードのキー値とに基づいて、前記リレーショナルデータベース内の同一のキー値を持つ、順序番号の更新が必要なレコードを検索するレコード検索手段と、
前記レコード検索手段によって検索されたレコードの順序番号を更新する際、前記順序番号割当手段から出力された値に１を加算した値から始まる連番を前記検索されたレコードの順序番号に設定し、該レコードを更新するレコード更新手段と、
前記アプリケーションプログラムが追加要求しているレコードと同一のキー値を持つレコードの順序番号が上限値に達した際、該レコードの順序番号を１から始まる連番で再編成する順序番号再編成手段とを備えたことを特徴とするリレーショナルデータベースのレコード追加システムを提供するものである。
【０００７】
請求項２に係る発明は、前記レコード検索手段は、前記順序番号に設定されたインデクスを使用してレコードを検索する機能を備えたことを特徴とする請求項１記載のリレーショナルデータベースのレコード追加システムを提供するものである。
【０００８】
ここで、アプリケーションプログラムから渡される「位置情報」とは、レコードを追加する位置を示す情報であり、テーブル内でレコードを一意に識別できるキーなど、レコードを特定できる情報と、特定したレコードの前、又は後ろのどちらに追加するかを指示する情報とを示す。
【０００９】
また、「順序番号の上限値」とは、順序番号の列に格納できる数値の上限値であり、例えば、順序番号の列の属性を４バイト長で内部表現される整数型とすると、格納できる数値の上限値は２１４７４８３６４７である。
【発明の効果】
【００１０】
本発明によれば、アプリケーションプログラムが同一のキー値を持つレコードの内の順序付けを行うことなく、任意の位置に順序性を保証したレコードの追加を可能とすることで、構造型データベース特有のレコード追加・検索手段をリレーショナルデータベースで実現できる。
【００１１】
また、本発明において、順序番号を最大値で更新する利点は、同一のキー値を持つレコードの内で順序番号が重複しない点にある。つまり、順序番号の更新により、インデクスが即時更新されても、検索結果に影響を与えないようにすることができる。これは、順序番号の列に設定したインデクスを使用して高速にレコードを検索しながら順序番号を更新することを可能とする。
【発明を実施するための最良の形態】
【００１２】
以下、実施例を示した図面を参照しつつ本発明の実施の形態を説明する。
図１は、本発明の実施例のシステム構成図であり、レコード追加プログラム１と、補助記憶装置にあるデータベース２と、アプリケーションプログラム３と、ＤＢＭＳ（database
management system）４とから構成されている。矢印は制御の流れを示している。
【００１３】
データベース２に格納されているレコードは、図４に示す如く、アプリケーションプログラム３が意識しているキーを示すキー２１と、キー２１の値が同一のレコード群の内の順序を示す順序番号２２と、データを示すデータ２３とを有している。本実施例では、順序番号２２の列の属性を４バイト長で内部表現する整数型を想定し、ＩＮＴＥＧＥＲ型とする。
【００１４】
図２は、レコード追加プログラム１の機能ブロック図であり、レコード追加手段１１と、レコード検索手段１２と、レコード更新手段１３と、順序番号割当手段１４と、順序番号再編成手段１５とから構成されている。矢印はデータの流れを示している。
レコード追加手段１１は、アプリケーションプログラム３から渡されたレコードの順序番号に順序番号割当手段１４から渡された値を設定して、レコードをデータベース２に格納する機能を有する。
レコード検索手段１２は、アプリケーションプログラム３から渡された位置情報と、順序番号割当手段１４から渡された値とを基に、順序番号の変更が必要なレコードを検索する機能を有する。
レコード更新手段１３は、レコード検索手段１２から渡されたレコードの順序番号に、順序番号割当手段１４から渡された値に１を加算した値から始まる連番を設定し、レコードを更新する機能を有する。
順序番号割当手段１４は、アプリケーションプログラム３から渡されたレコードと同一のキー値を持つレコードがテーブル内に存在する場合は、この同一のキー値を持つレコードの内の順序番号の最大値に１を加算した値を出力し、存在しない場合は、１を出力する機能を有する。
順序番号再編成手段１５は、アプリケーションプログラム３から渡されたレコードと同一のキー値を持つレコードの順序番号を１から始まる連番で再編成する機能を有する。
【００１５】
図３は、構造型データベースの概念図である。丸印はレコードであり、丸印の中の文字はレコードの内容を示している。矢印はポインタを示している。いま、親レコード５０１には、子レコード５０２、５０３が属している。同様に、親レコード５１１には、子レコード５１２、５１３、５１４が属している。同様に、親レコード５２１には、子レコード５２２、５２３が属している。
【００１６】
図４は、図３に示す構造型データベースのレコードをリレーショナルデータベースに格納したときの概念図である。親テーブルは親レコードを格納したテーブルであり、親レコードのキーを示すキー６１と、データを示すデータ６２とを有する。子テーブルは子レコードを格納したテーブルであり、子レコードが属する親レコードのキーを示すキー２１と、キー２１の値が同一のレコード群の内の順序を示す順序番号２２と、データを示すデータ２３とを有する。
【００１７】
図５はレコード追加プログラム１の処理例を示す流れ図、図６はレコード追加プログラム１の機能の１つである順序番号割当手段１４の処理例を示す流れ図、図７はレコード追加プログラム１の機能の１つである順序番号再編成手段１５の処理例を示す流れ図であり、以下、各図を参照して本実施例の動作を説明する。
アプリケーションプログラム３はデータベース２にレコードを追加する際、レコード追加プログラム１に、追加しようとするレコードと、レコードを追加する位置を示す位置情報を渡す。
【００１８】
アプリケーションプログラム３がレコード追加プログラム１に渡すレコードは、図８に示すようにキー７１と、データ７２とを有している。ここで、キー７１はデータベース２に格納されているキー２１に、データ７２はデータ２３に対応している。また、アプリケーションプログラム３がレコード追加プログラム１に渡す位置情報は、図９に示すように、レコードを一意に識別できる一意キー８１と、一意キー８１で示されるレコードの前、又は後ろのどちらに追加するかを指示する前後指示情報８２とを有する。本実施例では、８１は、データ２３の値とする。
【００１９】
今、例えば、テーブルの内容が図４の子テーブルに示すものであるときに、データ２３の値が「Ｂ４」であるレコードの前に、キー２１の値が「Ａ２」で、データ２３の値が「Ｂ８」であるレコードを追加するものとする。
この場合、アプリケーションプログラム３は、図８に示すレコードのキー７１に「Ａ２」を、データ７２に「Ｂ８」を設定したレコードと、図９に示す位置情報の一意キー８１に「Ｂ４」を、前後指示情報８２に「前」を設定した位置情報とをレコード追加プログラム１に渡す。
【００２０】
レコード追加プログラム１は、図５の流れ図に示すように、追加要求されたレコードに順序番号を設定する項目を追加する（ステップＳ１）。その後、順序番号割当手段１４で順序番号を割り当てる（ステップＳ２）。
順序番号割当手段１４は、図６の流れ図に示すように、追加要求されたレコードと同一のキー値を持つレコードの内の順序番号の最大値を検索する（ステップＳ１２）。この場合、キー値が「Ａ２」の順序番号の最大値である「３」が検索される。検索できた場合（ステップＳ１３がＹＥＳ）は、ステップＳ１４に進み、アプリケーションプログラム３から渡された一意キーと同一の一意キーを持つレコードを検索し、当該レコードの順序番号を取得する。
【００２１】
次に、位置情報の前後指示情報８２を参照し、一意キー８１で示されるレコードの前に追加するか、後ろに追加するかを判断する（ステップＳ１５）。今、前後指示情報８２には「前」が指定されているので、ステップＳ１５がＹＥＳとなり、ステップＳ１６に進む。
ステップＳ１６では、追加要求されたレコードと同一のキー値を持ち、かつ、ステップＳ１４で取得した順序番号以上の順序番号を持つレコードの数を検索する。この場合、キー値が「Ａ２」で、かつ、順序番号が「２」以上のレコードの数である「２」が検索されることになる。
なお、前後指示情報８２に「後」が指定されている場合は、ステップＳ１５がＮＯとなり、ステップＳ１７に進む。ステップＳ１７では、追加するレコードと同一のキー値を持ち、かつ、ステップＳ１４で取得した順序番号より大きい順序番号を持つレコードの数を検索する。
【００２２】
続いて、ステップ１８の判定により、順序番号が上限値に達するかどうかを判断する。
尚、「順序番号の上限値」とは、順序番号の列に格納できる数値の上限値であり、例えば、順序番号の列の属性を４バイト長で内部表現される整数型とすると、格納できる数値の上限値は２１４７４８３６４７である。
この場合、「（２１４７４８３６４７−３）≧（２＋１）」であり、順序番号が上限値に達しないと判断し（ステップＳ１８がＹＥＳ）、ステップＳ１９に進み、検索された最大値に１を加算した値を出力する。従って、「３」に１を加算した「４」が出力されることになる。
なお、順序番号が上限値に達すると判断した場合（ステップＳ１８がＮＯ）は、順序番号再編成手段１５で順序番号の再編成を行う（ステップＳ２０）。
【００２３】
順序番号再編成手段１５は、図７の流れ図に示すように、追加要求されたレコードと同一のキー値を持つレコードを順序番号の昇順に読み出し、読み出したレコードの順序番号に１から始まる連番を設定し、読み出したレコードを更新する（ステップＳ２５〜Ｓ３０）。
その後、順序番号割当手段は、図６の流れ図に示すように、再編成した後の順序番号の最大値に１を加算した値を出力する（ステップＳ２１）。
【００２４】
なお、追加要求されたレコードと同一のキー値を持つレコードが１件もないことにより順序番号の最大値が検索できなかった場合（ステップＳ１３がＮＯ、ステップＳ２２がＹＥＳ）は、１を出力する（ステップＳ２４）。また、追加要求されたレコードと同一のキー値を持つレコードがあるにも関わらず、順序番号の最大値が検索できなかった場合（ステップＳ１３がＮＯ、ステップＳ２２がＮＯ）は、エラー終了する（ステップＳ２３）。
【００２５】
続いて、アプリケーションプログラム３は、図５の流れ図に示すように、割り当てられた順序番号を追加要求されたレコードの順序番号に設定し、追加要求されたレコードをデータベースに格納する（ステップＳ３）。従って、追加要求されたレコードの順序番号には「４」が設定されることになる。その後、割り当てられた順序番号をカウンタに設定する（ステップＳ４）。
【００２６】
続いて、レコード追加プログラム１は、位置情報の前後指示情報８２を参照し、一意キー８１で示されるレコードの前に追加するか、後ろに追加するかを判断する（ステップＳ５）。
今、前後指示情報８２には「前」が指定されているので、ステップＳ５がＹＥＳとなり、ステップＳ６に進む。ステップＳ６では、追加要求されたレコードと同一のキー値を持ち、かつ、順序番号が一意キー８１で示されるレコードの順序番号以上で、かつ、追加要求されたレコードに付与した順序番号未満の順序番号を持つレコードを、順序番号の昇順に検索するカーソルをオープンする。この場合、キー値が「Ａ２」で、かつ、順序番号が「２」以上で、かつ、順序番号が「４」未満のレコードが検索されることになり、従って、データ２３の値で「Ｂ４→Ｂ５」の順序でレコードが検索されることになる。
【００２７】
なお、前後指示情報８２に「後」が指定されている場合は、ステップＳ５がＮＯとなり、ステップＳ７に進む。ステップＳ７では、追加するレコードと同一のキー値を持ち、かつ、順序番号が一意キー８１で示されるレコードの順序番号より大きく、かつ、追加要求されたレコードに付与した順序番号未満の順序番号を持つレコードを、順序番号の昇順に検索するカーソルをオープンする。
【００２８】
次に、ＦＥＴＣＨ文を実行してレコードを１件取り出す（ステップＳ８）。レコードが取り出せた場合（ステップＳ９がＮＯ）は、カウンタに１を加算した後、カウンタの値を検索されたレコードの順序番号に設定し、検索されたレコードを更新する（ステップＳ１０〜１１）。この場合、データ２３の値が「Ｂ４」のレコードが取り出され、順序番号に「５」を設定し、このレコードを更新することになる。
なお、条件に合うレコードがない、又は検索が終了した場合（ステップＳ９がＹＥＳ）は、処理終了となる。
【００２９】
ステップＳ８に戻り、再びＦＥＴＣＨ文を実行すると、データ２３の値が「Ｂ５」のレコードが取り出される。このレコードに対しても、上述と同様の手順でレコードの更新が行われ、このレコードの順序番号が「６」に更新される。
この結果、図１０に示す如く、キー値が「Ａ２」のレコードの順序番号がデータ２３の値で「Ｂ３→Ｂ８→Ｂ４→Ｂ５」の順序となり、「Ｂ８」のレコードが「Ｂ４」の前に追加されたものとなる。
【００３０】
次に、テーブルの内容が図１０に示すものであるときに、データ２３の値が「Ｂ４」であるレコードの後ろに、キー２１の値が「Ａ２」で、データ２３の値が「Ｂ９」であるレコードを追加するものとする。
この場合、アプリケーションプログラム３は、図８に示すレコードのキー７１に「Ａ２」を、データ７２に「Ｂ９」を設定したレコードと、図９に示す位置情報の一意キー８１に「Ｂ４」を、前後指示情報８２に「後」を設定した位置情報とをレコード追加プログラム１に渡す。
レコード追加プログラム１は、上述の場合と同様に、追加要求されているレコードの順序番号に「７」を設定してレコードを追加する。また、ステップＳ７では、キー値が「Ａ２」で、かつ、順序番号が「５」より大きく、かつ、順序番号が「７」未満のレコードが検索されることになり、従って、データ２３の値で「Ｂ５」のレコードが検索され、このレコードの順序番号が「８」に更新されることになる。
【００３１】
この結果、図１１に示す如く、キー値が「Ａ２」のレコードの順序番号がデータ２３の値で「Ｂ３→Ｂ８→Ｂ４→Ｂ９→Ｂ５」の順序となり、「Ｂ９」のレコードが「Ｂ４」の後ろに追加されたものとなる。
【００３２】
以上により、アプリケーションプログラム３は、同一のキー値を持つレコードの内の順序付けを行うことなく、任意の位置に順序性を保証したレコードの追加を行うことが可能となる。
なお、本発明は上述した実施形態に限定せず、発明の趣旨を逸脱しない範囲で種々の変更・変形が可能である。
【図面の簡単な説明】
【００３３】
【図１】本発明によるリレーショナルデータベースのレコード追加システムの構成図である。
【図２】本発明によるレコード追加プログラムの機能ブロック図である。
【図３】構造型データベースの論理的構造を示す概念図である。
【図４】リレーショナルデータベースのテーブル構造を示す概念図である。
【図５】本発明によるレコード追加プログラムの処理例を示す流れ図である。
【図６】本発明による順序番号割当手段の処理例を示す流れ図である。
【図７】本発明による順序番号再編成手段の処理例を示す流れ図である。
【図８】本発明によるアプリケーションプログラムが意識しているレコードの形式例を示す図である。
【図９】本発明によるアプリケーションプログラムがレコード追加プログラムに渡す位置情報の形式例を示す図である。
【図１０】本発明によるレコード追加後のテーブルの内容を示す一例図である。
【図１１】本発明によるレコード追加後のテーブルの内容を示す他の例図である。
【符号の説明】
【００３４】
１  レコード追加プログラム
２  データベース
３  アプリケーションプログラム
１１  レコード追加手段
１２  レコード検索手段
１３  レコード更新手段
１４  順序番号割当手段
１５  順序番号再編成手段
２１、６１，７１  キー
２２  順序番号
２３、６２，７２  データ
【図１】
0005060350.tif 000002
【図２】
0005060350.tif 000003
【図３】
0005060350.tif 000004
【図４】
0005060350.tif 000005
【図５】
0005060350.tif 000006
【図６】
0005060350.tif 000007
【図７】
0005060350.tif 000008
【図８】
0005060350.tif 000009
【図９】
0005060350.tif 000010
【図１０】
0005060350.tif 000011
【図１１】
0005060350.tif 000012