(57)【要約】【目的】リレーショナルデータベースのテーブル主キーを生成する際、データベース管理者の手によらず、プログラムにより自動的に生成し、省力化とリレーションの最適化を図ることができるベーステーブル主キー割り当て方式を提供すること。【構成】リレーショナルデータベースにおいて、リレーションの属性が企業の部署名や個人の住所、製品分類情報といった階層的な内容を含むテーブルの主キーを生成する際にプログラムを用い、そのテーブルの属性順に（列順に）、フィールド名（列名）をＳＱＬ文に引用し、レコードセットオブジェクトを生成する手段を用いて主キーを生成する。【選択図】　　　図１
2004133573.tif 000002
【特許請求の範囲】
【請求項１】
リレーショナルデータベースにおいて、リレーションの属性が企業の部署名や個人の住所、製品分類情報といった階層的な内容を含むテーブルの主キーを生成する際にプログラムを用い、そのテーブルの属性順に（列順に）、フィールド名（列名）をＳＱＬ文に引用し、レコードセットオブジェクトを生成する手段を用いて主キーを生成することを特徴とするベーステーブル主キー割り当て方式。
【請求項２】
生成された主キーを階層的な内容のテーブルの属性順（列順）に生成し、最下位層から順次上位層へ主キー生成を試みる、つまりＮ−１層の属性で生成されなかったとき、Ｎ階層の属性で更にＮ、更にＮ層の属性でも生成されなかったとき、Ｎ＋１階層の属性で主キー生成を試みる手段と、最終的に最上位層の属性で主キーが割り当てられなかったときに主キー全体を再構築する手段を有することを特徴とする請求項１記載のデータベーステーブル主キー割り当て方式。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、リレーショナルデータベーステーブルに登録されている様々なテーブルであるリレーションに、テーブル結合等のために主キーを割り当てる際、データベース管理者がテーブルの内容を加味してキーを割りあてる負荷を削減し、データベース管理者の手を介在することなくクライアント側で容易に主キーを生成することに関するものである。
【０００２】
【従来の技術】
従来、データベーステーブルに登録されている様々なリレーションに主キーを割り当てる際、データベース管理者が手作業でテーブルの内容を加味して主キーを割り当てなくてはならず、相当な時間と労を要していた。特に、テーブルの内容が企業の部署名や個人の住所、製品分類情報といった階層的な内容（例えば、部署名の場合、事業本部名、事業部名、，，課名等）である場合に顕著であった。しかも、割り当てたい値の主キーが既に割り当て済みである場合、テーブルの内容を考慮した適正な値の主キーを割り当てられなかった。
【０００３】
従って、後でデータベース利用の際、手作業による主キーの再構築が必要であった。
【０００４】
又、敢えてテーブルの内容を考慮した適正な値の主キーを割り当てようとした場合、既に割り当て済の主キーの値を変更しなくてはならず、手作業でテーブルをレコード単位に再編成する必要があり、データベース運用の効率が悪かった。
【０００５】
【発明が解決しようとする課題】
このような場合、後でデータベース利用の際にテーブルの内容を出力しようとしたときに、折角主キーの昇順にテーブルの内容が出力されても、再度、見易くするためにも手作業でソートし直さなくてはならず効率が悪かった。
【０００６】
又、データベースに、一般的には、ユーザインターフェースであるフォームを使った、データベース更新の際、一貫性の欠いた主キーをユーザに認識させざるを得ず、違和感を与えて好ましくなかった。従って、主キーに一貫性をも持たせるために、手作業による主キーの再構築が必要であった。
【０００７】
本発明は上記問題に鑑みてなされたもので、その目的とする処は、リレーショナルデータベースのテーブル主キーを生成する際、データベース管理者の手によらず、プログラムにより自動的に生成し、省力化とリレーションの最適化を図ることができるベーステーブル主キー割り当て方式を提供することにある。
【０００８】
【課題を解決するための手段】
上記目的を達成するため、本発明は、リレーショナルデータベースにおいて、リレーションの属性が企業の部署名や個人の住所、製品分類情報といった階層的な内容を含むテーブルの主キーを生成する際にプログラムを用い、そのテーブルの属性順に（列順に）、フィールド名（列名）をＳＱＬ文に引用し、レコードセットオブジェクトを生成する手段を用いて主キーを生成することを特徴とする。
【０００９】
【発明の実施の形態】
以下に本発明の実施の形態を添付図面に基づいて説明する。
【００１０】
本発明においては、リレーショナルデータベースにアクセスするプログラムの中で、レコードセットオブジェクト変数を利用し、レコードセットオブジェクト生成手段として、データベース操作言語でありデータ定義機能を持つＳＱＬ文を利用する。
【００１１】
テーブルのフィールド名（列名）を引用したＳＱＬ文と、レコードセットオブジェクト変数を階層的な内容のテーブルの属性（列）の数だけ用意し、下位階層からＳＱＬ文を使ってレコードセットオブジェクトを生成する。そして、生成した結果、最終レコードの値により主キーを生成し、その主キーが既に割り当て済であれば、その１つ上の階層へと順次上位層への主キー生成を試み、最上位階層で主キーが生成できなければ主キー全体の再構築を試みる。
【００１２】
図１はデータベーステーブル主キー割り当て方式を含むプログラムとユーザとのインターフェースであるフォーム及びリレーショナルデータベースの概念図である。
【００１３】
５はリレーショナルデータベースであり、図３の詳細に示すユーザテーブルと所属部署テーブルがあるものとする。
【００１４】
図３において、ユーザテーブルは、ユーザＩＤ、ユーザ名、Ｅメール、．．．部署キーというフィールドから成る属性を持ち、一方、所属部署テーブルは、部署キー、事業本部名、事業部名、センター名、部名、課名というフィールドから成る属性を持っている。そして、所属部署テーブルの部署キーを主キーに設定し、ユーザテーブルの外部キーとして双方のテーブルを結合している。
【００１５】
今、ユーザを追加登録しようとして、そのユーザの所属部署が、所属部署テーブルに存在しない場合、ユーザテーブルのレコード（タプル）の追加とともに、所属部署テーブルにもレコードの追加をすることになり、新たに双方のテーブルを結合する際の部署キー（主キー）の生成が必要になる。その部署キーの生成を司るのが１で示すクライアントプログラムである。
【００１６】
先ず、ユーザの追加登録をしようとしてクライアントプログラムを起動すると、２で示すユーザインターフェースであるフォームが表示される。フォームの詳細を図２に示す。図２において、追加するユーザを、ユーザ選択コンボボックス７或はスクロールボタン９等で選択した後（尚、ここでは、別フォームで、追加するユーザのユーザテーブルに関する情報を予め入力してあるものとする）、事業本部、事業部、．．．課名といった、テキストフィールド８に追加するユーザの部署名を入力する。そのとき、テキストフィールドに部署名を入力すると同時に、プログラム１で確保した１０の配列変数ｓｔｒＳＱＬ（ｉ）にそれをセーブする。入力完了後、フォームの“追加”ボタン６を押下すると、３で示す本発明のテーブルキー割り当て方式を実施するプログラムモジュールが起動する。
【００１７】
ここで、変数ｉは、‘０’から、所属部署名テーブルの属性の次数までの任意の値を示す。つまり、フィールドである属性の名称が、階層的な構成になっているときの階層番号を示し、最高位の階層を‘０’とし、最低位の階層を‘ｎ’としたｉ番目の階層を示しており、本実施の形態の場合、最高位の名称は“事業本部名”で、最低位の名称は“課名”である。
【００１８】
プログラムモジュールの詳細を図４のフローチャートに示す。
【００１９】
図４において、フォームから追加入力されたレコードの内容に、既存レコードとの重複がないかどうかチェックし、重複がない場合、１１で上記変数ｉに最低位から１つ上の階層番号の‘ｎ−１’を代入する。次に、先にセーブした配列変数ｓｔｒＳＱＬ（ｉ）を使って、クエリー操作のためのＳＱＬ文を生成する（１２）。又、ＳＱＬ文の詳細を１３に示す。但し、ＳＱＬ文中のＢＬＮＧ（ｉ）は配列定数を示し、所属部署テーブルのフィールド名称、つまり列名をプログラムにより事前に入力しておくものとする。
【００２０】
次に、１４において、１５で示すデータベースオブジェクト生成文により、‘ｎ−１’階層のフィールドの属性が一致するレコードだけの集合のオブジェクトを生成する。例えば、図２の所属部署フォームにおいて、テキストフィールド８で、追加部署名として‘Ａ事業本部’‘Ａ事業部’‘Ａセンター’‘製造部’‘生産課’と入力したとすると、‘ｎ−１’階層の属性である部名が、“製造部”であるレコードの集合のオブジェクトを生成することを意味する。
【００２１】
次に、１６で示すキーの生成に際しては、上記集合のオブジェクトの最終レコードの所属キー（主キー）の次の値を採用する。上記の追加事例の場合、図３の所属部署テーブルより、最終レコードの所属キー（主キー）の値が、‘０１０１’であるから、採用される主キーの値は‘０１０２’となる。
【００２２】
そして、そのキーが、所属部署テーブル全体の部署キーのどれかに重複しなければ、主キーとして確定する。もしも、重複があれば、上記変数ｉに、‘ｎ−１’階層の次の階層番号番である‘ｎ−２’を代入し、同様の操作を行い、例えば上記の追加事例の場合、‘センター名’が、‘Ａセンター’であるレコードの集合のオブジェクトを生成し、最終的に上記変数ｉに最上位の階層番号の‘０’を代入するまでを行う。つまり、上記の追加事例の場合、‘事業本部’が‘Ａ事業本部’であるレコードの集合のオブジェクトを生成するまでを行う。
【００２３】
こうして、最終的に、主キーの重複から逃れられない場合、主キー全体を再構築する（１８）。再構築の場合は、本実施の形態の場合、重複したレコード以降の主キーの値に特定の値を加算することにより主キーの重複を避けている（１９）。
【００２４】
こうして、生成された主キーは、ユーザテーブルと所属部署テーブルに書き込むとともに、フォームにフィードバックしてユーザに知らせしめる（２０）。
【００２５】
【発明の効果】
以上説明したように、本発明においては、リレーショナルデータベーステーブルのリレーションの属性が、階層的な内容になっている場合、テーブル結合等のために主キーを割り当てる際、データベース管理者がテーブルの内容を加味してキーを割りあてる負荷を削減し、データベース管理者の手を介在することなく、その場で、クライアント側で容易に主キーを生成することができ、後でデータベース利用の際、例えばテーブルの内容を出力しようとしたときに、再度、テーブルの内容をソートし直す必要がなくなるという効果が得られる。
【図面の簡単な説明】
【図１】データベーステーブル主キー割り当て方式を含むプログラムとユーザとのインターフェースであるフォーム及びリレーショナルデータベースの概念図である。
【図２】図１で示すフォームの詳細図である。
【図３】図１で示すデータベーステーブル詳細図である。
【図４】本発明に係るテーブルキー割り当て方式（プログラム）のフローチャートである。
【符号の説明】
１　　　クライアントプログラム
２　　　ユーザインターフェースフォーム
３　　　テーブルキー割り当て方式（プログラム）
４　　　主キー生成ブロック
５　　　データベーステーブル
６　　　ユーザインターフェースフォームの‘追加’ボタン
７　　　ユーザインターフェースフォームの‘ユーザ選択’コンボボックス
８　　　ユーザインターフェースフォームの‘テキスト’フィールド
９　　　ユーザインターフェースフォームの‘スクロール’ボタン
１０　　配列変数
１１　　変数ｉの初期値入力ステップ
１２　　ＳＱＬ生成ステップ
１３　　ＳＱＬ文詳細
１４　　レコードオブジェクト生成ステップ
１５　　レコードオブジェクト生成文詳細
１６　　主キー生成ステップ
１７　　主キー生成文詳細
１８　　レコード全体再構築ステップ
１９　　主キー生成ステップ
２０　　主キー確定ステップ
【図１】
2004133573.tif 000003
【図２】
2004133573.tif 000004
【図３】
2004133573.tif 000005
【図４】
2004133573.tif 000006