本発明は、データベースへのデータ入力方法、データ入力装置、データベースシステム、及びプログラムに関し、特に外部データをデータベースシステムに入力するシステムに関する。
従来のデータベースへのデータ入力方法及びその装置の一例が、特許文献1に記載されている。図11は、特許文献1を参照した従来の装置を示す概念図である。
図11に示す従来の装置は、システム利用者105が利用するデータ文字列を入力するためのデータ入力装置101と、複数のカラム(列)を持ったデータレコード、もしくは行により構成される表を複数保持し得るデータベース管理システム102と、システム利用者105とデータベース管理システム102間でデータの入出力を行うためのデータベース入出力管理プログラム103と、データ入力装置101によって入力された文字列を解析し、データベース管理システム102のどのデータカラムに入力データを格納すべきかを判定するカラム判定手段としてのデータ文字列解析部104とを含んで構成される。データ入力装置101は、特許文献1では一般化されたものではなく、キーボードに限定されている。
図11に示す従来装置において、入力データをデータベース管理システム102へ格納する際の手順について説明する。
システム利用者105は、データベース管理システム102に入力したい文字列を、データ入力装置101より入力する。データ入力装置101によって入力されたデータ文字列は、データ文字解析部104に送られる。
データ文字解析部104は、データ入力装置101によって入力された文字列がどのような文字種で構成され、それらがどのような順序および文字数で出現するかについての解析作業を実行する。すなわち、後述するようなデータの属性、長さ、周期性、特定な文字列の1つまたは2つ以上の特徴を組み合わせて解析する。
次いで、データ文字解析部104は、データベース管理システム102より取得した各データカラムの文字構成情報を参照・検証する。その結果、入力文字列がデータベース管理システム102上で管理される表のどのカラムに対する入力であるのかを判別する。
そして、データ文字解析部104は、データベース入出力管理プログラム103に対して、データ文字列を入力すべきデータカラムを指定する。そして、データ文字列をデータベース入出力管理プログラム103に出力する。
以上の工程後に、データベース入出力管理プログラム103は、データベース管理システム102の指定データカラムにデータ文字列を格納する。
データ文字解析部104は、以上のような解析作業を実行するが、具体的な例を挙げてその解析作業について説明する。
例えば、ある会社の社員のデータをデータベース管理システム102に入力しようとした場合、1レコードを構成する1行のカラム群が以下6つで構築されているものと仮定する。
1)社員番号、2)氏名、3)性別、4)生年月日、5)住所、6)電話番号
前記1)から6)の各項目に入力された文字列が振り分けられる条件は、次のとおりとする。
1)社員番号は、例えば「543567」等、特定桁数の数字文字だけで構成された文字列であり、データの長さと属性に特徴がある。
2)氏名は、例えば「佐藤一郎」等、数字を含まない全角文字列で構成される。氏名として良く使われる文字列は、例えば「佐藤」、「鈴木」、「田中」、「一郎」、「太郎」、「花子」等であり、データの属性と特定な文字列に特徴がある。
3)性別は、例えば「男」又は「女」等、特定の数の、特定の文字で構成され、データの長さと特定な文字列に特徴がある。
4)生年月日は、例えば「1960/10/10」、「S40年9月10日」等、年月日として適当な桁数の数字で構成され、年月日を示す文字列「/」、「年」、「月」、「日」等が適当な位置に存在し、データの属性と特定な文字列および周期性に特徴がある。
5)住所は、例えば「東京都杉並区杉並1−2−3」等、数値以外の全角文字で始まる。また、地名文字列を含む。さらに住所を示す特定な区切り文字、例えば「都」、「区」、「市」、「町」、「村」等が適当な位置に存在し、データの属性と特定な文字列に特徴がある。
6)電話番号は、例えば「0465−85−1234」、「03−3546−2246」等、電話番号として適当な桁数の数字で構成され、電話番号の区切り文字が適当な位置に存在し、データの属性と長さおよび周期性に特徴がある。
前述したように、データ文字解析部104においては、入力手段により入力されたデータの属性、長さ、周期性、特定な文字列の1つまたは2つ以上の特徴を組み合わせることで、格納すべきカラムをある程度正確に判定することができる。
この方法のカラム判定により、入力されたデータを識別して格納すべきデータベース管理システム102中のカラムを判定し、このカラム判定により推定されたカラムに対してデータを格納するように成されるので、システム利用者105がデータの入力先を指示する手続きを省くことができ、より高速なデータ入力が可能となる、とされている。
加えて、データベース管理システム102のデータフィールドの順序に縛られることなく、比較的無造作にデータを入力することも可能である、とされている。
より厳密な方法を取る場合、データ入力順序、データの順番をあらかじめ指定する作業を事前に実施しておけば、正しくデータを入力できることになる、はずである。
この特許文献1では、データ入力装置101は、一般化されたものではなくキーボードに限定しているが、データ入力装置101を、システム利用者105が指定するファイル読込み装置にすることは、その請求範囲を制限する事項ではないため、特許公報1の適用範囲内として扱われると解釈できる。
特開平10−269245号公報
しかしながら、従来の技術では、下記に説明するような技術課題が存在している。
特許文献1が主張する、従来技術に対する新規性は、入力手段により入力されたデータの属性、長さ、周期性、特定な文字列の1つまたは2つ以上の特徴を組み合わせることで、格納すべきカラムをある程度正確に判定することができる点である。
現在、技術的にも商業的にも主流で、評価を確立している一般的なデータベース管理システム102では、内部で管理しているカラムに「整合性制約」を付与できる機能が実装されている。「整合性制約」には、通常、カラムの定義に関係する「実体整合性制約」、並びに複数カラム間で定義される関係を規定する「参照整合性制約」が存在している。この内、「実体整合性制約」には、ある任意カラムの値をNULL値とすることが可能か否かを規定する「NULL制約」、任意カラムの値に一意性を保障する「UNIQUE制約」等が含まれる。
この特許文献1で主張するところの実施例に拠れば、データ文字解析部104が、データベース管理システム102より取得した各データカラムの文字構成情報を参照・検証した上で、入力文字列がデータベース管理システム102上で管理される表のどのカラムに対する入力なのかを判別している。
しかし、各データカラムの文字構成情報である、データの属性、長さ、周期性、特定な文字列の1つまたは2つ以上の特徴の組み合わせだけでは、「実体整合性制約」を違反するか否かの判定に言及していないに留まらず、実現不可能な場合も存在することを否定できない。特に「NULL制約」、「UNIQUE制約」を維持しながら入力ができる機能を、保障はしていない。更に、特許文献1の実施例を見る限りにおいて、「参照整合性制約」に対する違反に対しては、摘出・検証が言及されていないだけではなく、概ねの場合、実現不可能であることが予想される。
そのような状況下では、データ入力装置101を、システム利用者105が指定するファイル読込み装置のみならず、キーボードとした場合、入力の度に「実体整合性制約」、もしくは「参照整合性制約」に対する違反を事前に判定できないため、データ入力の度に全てデータベース管理システム102に対する入力違反として扱われ、入力そのものができないと言う問題が露見し得る。
そのような事態を部分的に回避するには、システム利用者105自ら、データの入力順序に関する制限を考慮してデータ入力装置101を起動する必要がある。ただし、これも全ての状況下で、前述の事態を回避できる訳ではない。「参照整合性制約」が閉じた関係を作る場合は、入力そのものができないと言う問題は再度露見し、これは解決できない。
以上のように従来の技術では、データベースにデータを入力する際には、データの入力順序を考慮せねばならず、さらに入力したデータ1行ごとに実体整合性制約及び参照整合性制約の検証を行う必要があるため、検証に時間が掛かるという問題があった。
本発明は、このような従来の事情を考慮してなされたもので、データベースへデータを入力する際の操作性を向上させると共に、整合性に関する制約の検証の高速化を図ることを、その目的とする。
上記目的を達成するため、本発明に係るデータベースへのデータ入力方法は、外部ファイルからデータをデータベースに入力するデータ入力方法であって、前記外部ファイルからデータが入力されるとき、前記データの格納先となる前記データベースに予め設定されている整合性制約に従い、前記データを入力事前に検証する検証ステップと、検証された前記データを前記データベースに入力する入力ステップとを有すること特徴とする。
本発明に係るデータ入力方法において、前記検証ステップの実施前に、前記データベースの整合性制約に基づく処理動作を一時停止するステップと、前記入力ステップの実施後に、一時停止されている前記整合性制約に基づく処理動作を再有効化するステップとをさらに有してもよい。
また、前記検証ステップは、前記整合性制約の内の実体整合性制約に従い、前記データを入力事前に検証する第1の検証ステップと、前記整合性制約の内の参照整合性制約に従い、前記データを入力事前に検証する第2の検証ステップとを有してもよい。
ここで、前記第1の検証ステップは、前記データの格納先となる前記データベース内の指定列を対象として、前記データベース内の指定列に既に格納済みの列値と、前記外部ファイルのデータ内の前記指定列に対応する列の列値とを全て集積するステップと、集積された列値が一意性を保障しているか否かを検証するステップとを有してもよい。
また、前記第2の検証ステップは、前記データの格納先となる前記データベース内の複数の指定列で構成される参照関係を対象とし、前記データベース内の複数の指定列で既に確立されている参照関係に加え、前記外部ファイルのデータ内の前記複数の指定列に対応する複数の列と新たに確立される新参照関係に基づいて、参照整合性を保障しているか否かを検証する検証ステップを有してもよい。
さらに、前記第2の検証ステップは、前記データの格納先となる前記データベース内の複数の指定列で構成される参照関係に対し、前記参照整合性制約に基づくデータの読み込み回数の縮退操作及びデータ並び替え操作を実施しながら、参照整合性を保障しているか否かを検証する検証ステップを有してもよい。
本発明に係るデータ入力装置は、外部ファイルからデータをデータベースに入力するデータ入力装置であって、前記外部ファイルからデータが入力されるとき、前記データの格納先となる前記データベースに予め設定されている整合性制約に従い、前記データを入力事前に検証する検証手段と、検証された前記データを前記データベースに入力する入力手段とを有すること特徴とする。
本発明に係るデータベースシステムは、外部ファイルからデータを入力するデータ入力装置と、前記データ入力装置により入力されたデータを格納するデータベースとを有するデータベースシステムであって、前記データ入力装置は、前記外部ファイルからデータが入力されるとき、前記データの格納先となる前記データベースに予め設定されている整合性制約に従い、前記データを入力事前に検証する検証手段と、検証された前記データを前記データベースに入力する入力手段とを有することを特徴とする。
本発明に係るプログラムは、外部ファイルからデータをデータベースに入力するためのプログラムであって、コンピュータに、前記外部ファイルからデータが入力されるとき、前記データの格納先となる前記データベースに予め設定されている整合性制約に従い、前記データを入力事前に検証する検証ステップと、検証された前記データを前記データベースに入力する入力ステップとを実行させることを特徴とする。
本発明によれば、データベースへの入力事前に全ての入力データを一括して整合性に関する制約の検証を行っているため、従来の方法に比べ高速な制約の検証が可能になっている。また、本発明によれば、外部ファイル内に記載されるデータの入力順序を意識せずに任意の順序で入力を行うことができるため、操作性を大幅に向上させることができる。
次に、本発明に係るデータベースへのデータ入力方法、データ入力装置、データベースシステム、及びプログラムの実施の形態について図面を参照して詳細に説明する。
図1は、本実施の形態に係るデータ入力装置を備えたデータベースシステムの全体構成を示す。図1に示すデータベースシステムは、例えばデータベース問い合わせ言語として規格化されているSQL(Structured Query Language)に従い操作可能なリレーショナルデータベース(関係データベース)を適用したものであり、そのデータベースの定義や操作等を管理するデータベース管理システム4と、このデータベース管理システム4と連携して動作する本実施の形態のデータ入力装置としてのデータローダ装置1とを備える。
データベース管理システム4は、機能上、主にメタ情報、カタログ情報を扱うデータディクショナリ部5と、具体的なデータを管理するデータインスタンス部6とを含んで構成される。
データディクショナリ部5は、機能上、更にデータベースの基本管理単位である表の定義情報を表数分、管理している表定義部8と、表毎に定義される「実体整合性制約」を管理する実体整合性制約管理部10と、任意の複数表間に付与された「参照整合性制約」を管理する参照整合性制約管理部7とを含んで構成される。なお、表定義部8で管理する表定義情報を一般化して「表定義情報」16と定義する。
データインスタンス部6は、表定義部8で管理されている表定義情報16に従い、データを表形式で管理する。ここでは、データインスタンス部6で管理される表形式のデータを一般化して「表」11と定義する。
データローダ装置1は、機能上、検証部2、データ挿入部3、ログファイル12、検証済データ保持部13、及び制約制御部14を備える。このうち、検証部2は、その内部に複数の列情報保存領域18、複数の参照先列値保存領域19、及び複数の参照元列値保存領域20を含む。
データローダ装置1は、システム利用者15から起動コマンドaを受け取ると、動作を開始する。起動コマンドaには、挿入するデータを記載した複数の挿入データファイル群9のパス名とデータベース管理システム4内の表定義部8にて定義される表定義情報16の関係rが引数として指定されている。ここで、関係r内で指定される表を一般化して「指定表」tとする。
動作を開始したデータローダ装置1は、関係rを更に引数sとして扱い、引数sを元に検証部2を起動する要求bを発行する。要求bにより起動した検証部2は、引数sで指定される関係rの指定表群tの存在を確認するため、データベース管理システム4に問い合わせcを発行する。この問い合わせcの結果、データベース管理システム4は、表定義部8にアクセスし、指定表tに対する全ての表属性定義情報dと、この表属性定義情報dに付随するデータ型情報eとを検証部2に戻す。
検証部2は、実体整合性制約に関する情報を得るため、表属性定義情報dを元に、データベース管理システム4に問い合わせfを発行する。この問い合わせfの結果、データベース管理システム4は、実体整合性制約管理部10にアクセスし、その後、指定表tの表属性定義情報dに付随する実体整合性制約情報gを表毎に検証部2に戻す。この問い合わせfは、指定された指定表t全てに実施される。
また、検証部2は、参照整合性制約に関する情報を得るため、表属性定義情報dを元に、データベース管理システム4に問い合わせhを発行する。この問い合わせhの結果、データベース管理システム4は、参照整合性制約管理部7にアクセスし、その後、指定された指定表tの表属性定義情報dに付随する参照整合性制約情報iを表毎に検証部2に戻す。この問い合わせhは、指定された指定表t全てに実施される。
また、検証部2は、入手した参照整合性制約情報iを元に、指定表tに付与した参照整合性制約の全てを一時的に停止するため、要求jを制約制御部14に発行する。制約制御部14は、データベース管理システム4に対して、要求jと同意の要求lを発行する。要求lの結果、データベース管理システム4は、参照整合性制約管理部7にアクセスし、指定表tの参照整合性制約情報iから対象参照整合性制約を全て停止する。
さらに、検証部2は、いくつかの検証処理を実施する。最初に実施するものは、実体整合性制約の検証処理である。次に実施するのは、停止した参照整合性制約の検証処理である。これら各整合性制約の検証処理は、挿入データファイル群9に記載されるデータだけでなく、データベース管理システム4のデータインスタンス部6で管理され、関係rで指定されている指定表群t相当の表11内データも含めて実施される。
起動コマンドaで指定される全ての挿入データファイル群9のデータに関して、実体整合性制約、並びに参照整合性制約の検証ステップを実施したならば、検証部2は、検証済データのデータベース管理システム4への格納を行うため、データ挿入部3に対して起動要求nを発行する。その際、検証済データ保持部13のアクセス参照先uが引数として渡される。
データ挿入部3は、起動要求nを受けると、指定された指定表tに相当する表11へ格納するべきデータの内、全行分のデータpを検証済データ保持部13から入手する。その後、データインスタンス部6への格納を行うため、データpをもとに、SQLのINSERT文を作成し、順次、データベース管理システム4へ、INSERT文qを発行する。
INSERT文qに加工・翻訳された一連のデータをデータベース管理システム4に格納した後、データ挿入部3は、先に停止させた、参照整合性制約情報i対応の参照整合性制約を全て再有効にするため、制約制御部14に要求kを発行する。
制約制御部14は、データベース管理システム4に対し、要求kと同意の要求mを発行する。要求mの結果、データベース管理システム4は、参照整合性制約管理部7をアクセスし、参照整合性制約情報iに対応する参照整合性制約を全て再有効化する。
次に、データローダ装置1による実体整合性制約の検証処理及び参照整合性制約の検証処理を主にして、本実施の形態の動作を説明する。
[実体整合性制約の検証処理]
データローダ装置1による実体整合性制約の検証処理は、図2及び図3に記すフローチャートの手順で行われる。これは、ステップ201〜215を含んで構成される。
図2において、検証部2は、まだ処理対象となっていない指定表tを選び、関係rと合わせて、挿入データファイル群9から、まだ処理対象となっていない1つの挿入データファイルを抽出し、その挿入データファイルを読み込み、処理対象とする(ステップ201、ステップ202:NO)。この時点で、既に全ての挿入データファイルが処理対象となっていた場合は、読み込むファイルが存在しないと判断し(ステップ202:YES)、処理を終了する。
続けて、検証部2は、指定表tの表属性定義情報dに付随する実体整合性制約情報gを元に、ステップ201にて処理対象となった挿入データファイルに関連する全ての実体整合性制約を、実体整合性制約リストとして取得する(ステップ203)。
次いで、ステップ203で取得した実体整合性制約リストを判定し、そのリストの中に、制約条件確認の一環として、他行を参照する必要があるもの(ここでは、「UNIQUE制約」が主対象である。)が存在する場合、検証部2内に列情報保存領域18を追加・確保する(ステップ204)。
次いで、ステップ201で処理対象とした挿入データファイルから1行読み込む(ステップ205、ステップ206:NO)。既に全行が読み込まれている場合は、読み込む行が存在しないと判断し(ステップ206:YES)、図3に示すステップ212の処理へ移行する。
続けて、ステップ205で読み込んだ行そのものを、挿入データファイル行データとして検証済データ保持部13に保存する(ステップ218)。
次いで、ステップ203で取得した実体整合性制約リストの内、ステップ205で取得した行に対して、検証していない実体整合性制約を1つ取得する(ステップ207、ステップ208:NO)。この時点で、既にリスト内の全ての実体整合性制約が検証されている場合は、全ての実体整合性制約を適用済みであると判断し(ステップ208:YES)、ステップ205の処理へ戻る。
次いで、ステップ207で取得した実体整合性制約に関する判定に、他行を参照する必要があるか、すなわちステップ204で検証部2内に確保した列情報保存領域18に保存された実体整合性制約であるか否かを判定する(ステップ209)。
その結果、他行を参照する必要があると判定された場合は(ステップ209:NO)、ステップ207で取得し、ステップ205で読み込んだ行に対する未適用実体整合性制約の対象値を、列候補値として、ステップ204で確保した列情報保存領域18に保存する(ステップ210)。
一方、他行を参照する必要がないと判定された場合は(ステップ209:YES)、ステップ205で読み込んだ行に対する実体整合性制約対象となる列候補値が、ステップ207で取得した未検証の実体整合性制約に関する条件を満足するか否かを判定する(ステップ211)。
ここで検証されるものは、NULL制約とデータ型に関する制約である。この判定で、実体整合性制約の条件を満足していれば(ステップ211:YES)、ステップ218へ戻り、満たしていない場合は(ステップ211:NO)、エラーとして扱い(ステップ211a)、ログファイル12に書き出した後、処理を終了する。
上記ステップ206の処理で既に全行が読み込まれていた場合(ステップ206:YES)、図3に示すように、ステップ204で確保した列情報保存領域18から未検証状態にある領域を1つ取得する(ステップ212、ステップ213:NO)。また、全列情報保存領域18が検証済状態にある場合は(ステップ213:YES)、ステップ201の処理へ戻る。
続けて、ステップ212で取得した、未検証状態にある列情報保存領域18に保存される実体整合性制約を一つ参照し、データインスタンス部6からその実体整合性制約対象となる列値を取得する(ステップ214)。
次いで、ステップ214で取得した列値と、ステップ210で取得した列情報保存領域18内に保存されている列候補値を全て統合し、統合データとする。この統合データには、ステップ207で取得した実体整合性制約が対応する。そこで統合データもとに、対応する実体整合性制約の条件を満足するか否かを判定する(ステップ215)。
この判定で、実体整合性制約の条件を満たしている場合は(ステップ215:YES)、ステップ212の処理に戻り、それを満たしていない場合は(ステップ215:NO)、エラーとして扱い、ログファイル12に書き出した後(ステップ215a)、処理を終了する。
上記の実体整合性制約の検証ステップの後、検証部2は、問題の無い行に関しては、検証済データ保持部13に一時的に保管する。そのため、検証済データ保持部13に行データoが渡される。ここでの実体整合性制約の検証ステップは、起動コマンドaで指定される挿入データファイル群9全てに対して実施される。
[参照整合性制約の検証処理]
次に、データローダ装置1による参照整合性制約の検証処理を実施する。参照整合性制約の検証処理は、図4〜図7に記される一連のフローチャート手順で行われ、大きくは、1)参照整合性制約の検証対象となる列情報取得ステップ、2)参照整合性制約の検証対象となる列値候補取得ステップ、3)参照整合性制約の検証対象となる列値取得ステップ、4)参照整合性制約の検証ステップとで構成される。以下、順次説明する。
1)参照整合性制約の検証対象となる列情報取得ステップ
本ステップは、図4に記されるフローチャート手順で実施される。これは、ステップ301〜306を含んで構成される。
まず、検証部2は、指定表tの表属性定義情報dに付随する参照整合性制約情報iを元に、指定表tに関連する全参照整合性制約を、参照整合性制約リストとして取得する(ステップ301)。
次いで、ステップ301で取得した参照整合性制約リストの内、検証していない参照整合性制約を1つ取得する(ステップ302、ステップ303:NO)。この時点で、既にリスト内の全ての参照整合性制約が検証されている場合は、全ての参照整合性制約を適用済みと判断し(ステップ303:YES)、図5に示すステップ310の処理へ移行する。
次いで、ステップ302で取得した参照整合性制約から、参照整合性制約を構成する参照元と参照先の列情報を取得し(ステップ304)、取得した参照先の列情報が、指定表tの列となっているかを判定する(ステップ305)。
この判定で、参照先の列が指定表tに含まれない場合は(ステップ305:YES)、ステップ302の処理に戻る。
一方、参照先の列が指定表tに含まれる場合は(ステップ305:NO)、検証部2は、検証部2自身に参照先列情報に対応する参照先列値記憶領域19が存在するか否かを判定する(ステップ306)。
この判定で、参照先列値の記憶領域19が存在する場合は(ステップ306:YES)、ステップ302の処理に戻り、参照先列値の記憶領域19が存在しない場合は(ステップ306:NO)、検証部2は、検証部2自身に、参照先列情報に対応する参照先列値記憶領域19を新たに追加・確保する(ステップ307)。このとき、検証部2は、この列を参照先とする参照元列値を保存するため、検証部2自身に新たな参照元列値記憶領域20も同時に追加・確保する。その後、ステップ302の処理に戻る。
2)参照整合性制約の検証対象となる列値候補取得ステップ
本ステップは、図5に記されるフローチャート手順で実施される。これは、ステップ310〜318を含んで構成される。
検証部2は、まだ処理対象となっていない指定表tを選び、ステップ218で検証済データ保持部13に保存した挿入データファイル9のパス情報を元に、同じく検証済データ保持部13に保存した挿入データファイル行データを割り出す。その後、挿入データファイル行データを読み込み、処理対象とする(ステップ310、ステップ311:NO)。この時点で、全ての挿入データファイル行データが既に処理対象となっていた場合は、読み込むファイルが存在しないと判断し(ステップ311:YES)、図6に示すステップ320を実行する。
続けて、検証部2は、指定表tの表属性定義情報dに付随する参照整合性制約情報iを元に、ステップ310にて処理対象となった挿入データファイル行データに関連する全参照整合性制約を、参照整合性制約リストとして取得し直す(ステップ312、ステップ313:NO)。これは、ステップ301の処理で実施しているが、必要な限り再度、実施する。一方、列情報保存領域18に保存した挿入データファイル行データに関連する参照整合性制約が存在しない場合は(ステップ313:YES)、ステップ310の処理に戻る。
次いで、ステップ310で処理対象とした挿入データファイル行データから1行分のデータを読み込む(ステップ314、ステップ315:NO)。この時点で、既に全行分のデータが読み込まれている場合は、読み込む行が存在しないと判断され(ステップ315:YES)、ステップ310の処理に戻る。
次いで、ステップ312で取得した参照整合性制約リストの内、ステップ314で取得した挿入データファイル行データを検証していない参照整合性制約を1つ選択する(ステップ316、ステップ316:NO)。この時点で、既にリスト内の全ての参照整合性制約が検証されている場合(ステップ316:YES)、ステップ314の処理へ戻る。
続けて、検証部2は、次のステップ318の処理を実行する。
即ち、指定表tの表属性定義情報dに付随する参照整合性制約情報iを元に、ステップ310にて処理対象となった挿入データファイル行データに、ステップ316で取得した参照整合性制約の参照先となる列が含まれており、且つ、この当該列に対応する参照先列値記憶領域19が、検証部2自身内に存在するか否かを判定する。
参照先列値記憶領域19が存在すると判定された場合、ステップ314で取得した挿入データファイル行データ上の該当列の列候補値を参照先列値記憶領域19にコピーして保存する。
続けて、検証部2は、指定表tの表属性定義情報dに付随する参照整合性制約情報iを元に、ステップ310にて処理対象となった挿入データファイル行データに、ステップ316で取得した参照整合性制約の参照元となる列が含まれており、且つ、この列に対応する参照元列値記憶領域20が、検証部2自身内に存在するか否かを判定する。
検証部2自身内に参照元列値記憶領域20が存在すると判定され、且つ、参照元列値記憶領域20にステップ314で取得した挿入データファイル行データ上の該当列の列候補値と同一値が保存されていない場合に限り、ステップ314で取得した挿入データファイル行データ上の該当列の列候補値を、参照先列値記憶領域20に保存する(ステップ318)。それ以外は、ステップ316の処理に戻る。
ステップ318の処理を実行した場合は、実行後、ステップ316の処理に戻る。
3)参照整合性制約の検証対象となる列値取得ステップ
本ステップは、図6に記すフローチャート手順で実施される。これは、ステップ320〜324を含んで構成される。
まず、検証部2は、ステップ307で確保され、検証部2自身が保持している参照先列値記憶領域19のうち、処理対象となっていない参照先列値記憶領域19を1つ選択する(ステップ320、ステップ321:NO)。この時点で、全ての参照先列値記憶領域19が既に処理対象となっている場合は、全ての記憶領域を処理済みと判断し(ステップ321:YES)、図7に示すステップ330の処理を実行する。
次いで、検証部2は、ステップ320で取得した参照先列値記憶領域19と関連する参照整合性制約を、ステップ321で取得した参照整合性制約リストから取得し、データインスタンス部6からその参照整合性制約の対象となる列値を取得する(ステップ322)。
次いで、検証部2は、列値を、ステップ320で取得した参照先列値記憶領域19にコピー・保存する(ステップ323)。さらに、ステップ320で取得した参照先列値記憶領域19に格納されている列値を昇順にソートし、ステップ320に戻る(ステップ324)。
4)参照整合性制約の検証ステップ
本ステップは、図7に記すフローチャート手順で実施される。これは、ステップ330〜343を含んで構成される。
まず、検証部2は、ステップ307で確保され、検証部2自身が保持している参照元列値記憶領域20のうち、まだ処理対象となっていない参照元列値記憶領域を1つ選択する(ステップ330、ステップ331:NO)。この時点で、全ての参照元列値記憶領域20が既に処理対象となっている場合は、全ての記憶領域を処理済と判断し(ステップ331:YES)、処理を完了する。
次いで、検証部2は、ステップ330で取得した参照元列値記憶領域20に格納されている列値を昇順にソートする(ステップ332)。
次いで、ステップ330で取得した参照元列値記憶領域20に対応する参照先列値記憶領域19を取得する(ステップ333)。
次いで、ステップ330で取得した参照元列値記憶領域20に格納されている列値の先頭の値(最小の値)を取得し、これを現参照元列値とする(ステップ334、ステップ335:NO)。この時点で、現参照元列値が取得できない場合は、列値の先頭の値が存在しないと判断し(ステップ335:YES)、ステップ330の処理に戻る。
次いで、ステップ333で取得した参照先列値記憶領域19に格納されている列値の先頭の値(最小の値)を取得し、これを現参照先列値とする(ステップ336、ステップ337:NO)。この時点で、現参照先列値が取得できない場合は、列値の先頭の値が存在しないと判断し(ステップ337:YES)、エラーとして扱い(ステップ337a)、ログファイル12に書き出した後、処理を終了する。
次いで、現参照元列値と現参照先列値を比較し、両者が等しい場合は(現参照元列値=現参照先列値、ステップ338:YES)、ステップ340の処理を実行する。
また、両者が等しくない場合は(ステップ338:NO)、現参照元列値が現参照先列値より大きいかどうか判断し(ステップ339)、現参照元列値が現参照先列値より大きい場合は(ステップ339:YES)、ステップ342の処理を実行する。それ以外の場合は(ステップ339:NO)、エラーとして扱い(ステップ339a)、ログファイル12に書き出した後、処理を終了する。
次いで、ステップ330で取得した参照元列値記憶領域20から、現参照元列値の次の値を新たに取得し、これを現参照元列値として再設定する(ステップ340、ステップ341:NO)。この時点で、新たな現参照元列値を取得できない場合は、現参照元列値の次の値が存在しないと判断し(ステップ341:YES)、ステップ330の処理に戻る。
次いで、ステップ333で取得した参照先列値記憶領域19から、現参照先列値の次の値を新たに取得し、これを現参照先列値として再設定する(ステップ342、ステップ343:NO)。この時点で、新たな現参照先列値が取得できない場合は、現参照先列値の次の値が存在しないと判断し(ステップ343:YES)、エラーとして扱い(ステップ343a)、ログファイル12に書き出した後、処理を終了する。また、新たな現参照先列値を取得できた場合は(ステップ343:NO)、ステップ338の処理に戻る。
検証部2は、参照整合性制約の検証ステップを満足しない挿入データファイル行データが存在することを摘出した場合は、エラーとして扱い、ログファイル12に書き出す。
上記の参照整合性制約の検証ステップでは、起動コマンドaで指定される全ての挿入データファイル群9を対象とし、列情報保存領域18に保存される挿入データファイル行データに対して実施する。
次に、具体的な実施例を用いて本発明を実施するための最良の形態の動作を説明する。
ここでは、データディクショナリ部5には、図8(a)〜(c)に示す表A〜表Cに関する表定義、実体整合性制約、参照整合性制約が設定され、さらにデータインスタンス部6には、図9(a)〜(c)に示す表A〜表Cのデータインスタンス(データ)があらかじめ入力されている場合の実施例について説明する。
ここで、図8(a)〜(c)中の「PK」は主キー(Primary Key)を、「FK」は外部キー(Foreign Key)をそれぞれ表す。主キーは、リレーショナルデータベースを構成する表中の目的とする行を一意に識別するために使用する列(カラム)である。また、外部キーは、リレーショナルデータベースを構成する2つの表のうちの一方の表中のあるカラムの値がその他方の表の主キーを成すカラムの値のいずれかと等しい関係にある場合、他方の表の主キーを指示(参照)している一方の表の列である。例えば、参照整合性制約として、「表X.列1」に「FK(表Y.列2)」が設定されている場合は、「表X.列1」(参照元)の列値(列情報)は、「表Y.列2」(参照先)の列値(列情報)を参照することを意味する。
この実施例において、挿入データファイル群9および起動コマンドaによる挿入データファイル(データファイルA〜C)と指定表(表A〜表C)との対応関係が図10(a)〜(c)に示すようになっていた場合の動作を説明する。
まず、動作を開始したデータローダ装置1は、関係rを更に引数sとして扱い、引数sを元に検証部2を起動する要求bを発行する。要求bにより起動した検証部2は、引数sで指定される関係rの指定表t(この実施例では表A、表B、表C)の存在を確認するため、データベース管理システム4に問い合わせcを発行する。この問い合わせcの結果、データベース管理システム4は、表定義部8にアクセスし、指定表tに対する全ての表属性定義情報dと、この表属性定義情報dに付随するデータ型情報eとを検証部2に戻す。この実施例では、指定表tに対応する表A、表B、表Cについて、図8(a)〜(c)に示されている全ての表定義情報が戻される。
次いで、検証部2は、実体整合性制約に関する情報を得るため、表属性定義情報dを元に、データベース管理システム4に問い合わせfを発行する。この問い合わせfの結果、データベース管理システム4は、実体整合性制約管理部10をアクセスする。その後、検証部2に対して、指定表tの表属性定義情報dに付随する実体整合性制約情報gが表毎に戻される。この問い合わせfは、指定された指定表t全てに実施される。この実施例においては、図8(a)〜(c)に示されている表A〜表C(指定表t)における実体整合性制約情報gとして、「表A.列2」に対するUNIQUE制約と、「表B.列3」に対するNOT NULL制約とが戻される。
次いで、検証部2は、参照整合性制約に関する情報を得るため、表属性定義情報dを元に、データベース管理システム4に問い合わせhを発行する。この問い合わせhの結果、データベース管理システム4は、参照整合性制約管理部7をアクセスする。その後、検証部2に指定された指定表tの表属性定義情報dに付随する参照整合性制約情報iが表毎に戻される。この問い合わせhは、指定された指定表t全てに実施される。この実施例においては、図8(a)〜(c)に示されている表A〜表C(指定表t)における参照整合性制約情報iとして、「表B.列2」から「表A.列1」への参照(図8(b))と、「表C.列2」から「表A.列1」に対する参照(図8(c))と、「表C.列3」から「表B.列1」に対する参照(図8(c))とが戻される。
その後、検証部2は、入手した参照整合性制約情報iを元に、指定表tに付与した参照整合性制約の全てを一時的に停止するため、要求jを制約制御部14に発行する。制約制御部14は、データベース管理システム4に対して、要求jと同意の要求lを発行する。要求lの結果、データベース管理システム4は参照整合性制約管理部7にアクセスし、指定表tの参照整合性制約情報iから対象参照整合性制約を全て停止する。これにより、図8(a)〜(c)に示されている参照整合性制約情報i、即ち「表B.列2」から「表A.列1」への参照と、「表C.列2」から「表A.列1」に対する参照と、「表C.列3」から「表B.列1」に対する参照とが一時的に停止される。
次に、検証部2は、前述した図2及び図3のフローチャートに従って実体整合性制約の検証処理を行う。
まず、検証部2は、挿入データファイル群9からデータファイルを1つ読み込む(ステップ201、ステップ202:NO)。ここでは、図10(a)に示すデータファイルAを読み込むものとする。
次いで、読み込んだデータファイルに関連する全ての実体整合性制約を、実体整合性制約リストとして取得する(ステップ203)。ここでは、実体整合性制約リストとして、図8(a)に示す「表A.列2」のUNIQUE制約が取得される。
次いで、ステップ203で取得した実体整合性制約リストを判定し、そのリストの中に、制約条件確認の一環として、同一表内の他行を参照する必要があるもの(ここではUNIQUE制約が主対象である。)が存在する場合、検証部2内に列情報保存領域18を追加・確保する(ステップ204)。ここでは、実体整合性制約リストには、制約条件確認のために同一表内の他行を参照する必要があるUNIQUE制約が取得されているため、列情報保存領域18として、そのUNIQUE制約に対応する「表A.列2」を保存する領域が確保される。
次いで、ステップ201で処理対象とされたデータファイルAから1行読み込む(ステップ205、ステップ206:NO)。これにより、図10(a)に示すように、データファイルAから“3、5、アメリカ、ニューヨーク”という行が読み込まれる。続けて、データファイルAから読み込んだ1行分のデータそのものを、挿入データファイル行データoとして検証済データ保持部13に保存する(ステップ218)。
次いで、ステップ203で取得された実体整合性制約リストの内、ステップ205で取得した行に対して、検証していない実体整合性制約を1つ取得する(ステップ207、ステップ208:NO)。ここでは、実体整合性制約リストには、「表A.列2」のUNIQUE制約だけが登録されているため、これが取得される。
さらに、ステップ207で取得した実体整合性制約に関する判定に、他行を参照する必要があるか、すなわちステップ204で検証部2内に確保した列情報保存領域18に保存された実体整合性制約であるか否かを判定する(ステップ209)。ここでは、「表A.列2」のUNIQUE制約に対応する列情報保存領域18は確保されているため、ステップ207で取得し、ステップ205で読み込んだ行に対する未適用の実体整合性制約の対象値を、列候補値として、ステップ204で確保された列情報保存領域18に保存する(ステップ209:NO、ステップ210)。ここでは、未適用の実体整合性制約の対象値として、値“5”が保存される。
これで、ステップ203で取得した実体整合性制約リストの全ての実体整合性制約が検証され、さらにステップ201で処理対象としたデータファイルAの全ての行が処理されたことになるため(ステップ208:YES、206:YES)、図3に示すステップ212の処理へ移行する。
即ち、ステップ204で確保された列情報保存領域18から、未検証状態にある領域を1つ取得する(ステップ212)。ここでは、未検証状態にある領域として、UNIQUE制約に対応する「表A.列2」を保存する領域が取得される。
次いで、データインスタンス部6のデータから、実体整合性制約対象となる列値を取得する(ステップ214)。ここでは、図9(a)に示すデータインスタンス部6のデータ(表A)のうち、「表A.列2」には、“3”、“2”という値が格納されているため、この2つの値が取得される。
次に、ステップ214で取得された列値と、ステップ210で取得された列情報保存領域18内に保存されている列候補値とを全て統合し、統合データとする。これにより、列情報保存領域18に保存されていた値“5”と、「表A.列2」から取得された“3”、“2”とが統合されて、1つの統合データとなる。この統合データには、ステップ207で取得された実体整合性制約が対応する。そこで、統合データをもとに、対応する実体整合性制約の条件を満足するか否かを判定する(ステップ215)。ここでは、“3”、“2”、“5”という値の集合は、「UNIQUE制約」を満たすため、検証は成功する。
以上により、データファイルAに対応する全ての列情報保存領域18が処理されたため、ステップ201の処理に戻る(ステップ213:YES)。
次いで、挿入データファイル群9から次のデータファイルを読み込む(ステップ201)。ここでは、図10(b)に示すデータファイルBが読み込まれる。このデータファイルBも、上記処理により、データファイルAと同様に処理されるが、データファイルBに対応する表Bには、図8(b)に示すように、実体整合性制約として、NOT NULL制約のみが設定されており、NOT NULL制約は、判定に他行を参照する必要がないため、ステップ204、210、214の処理では、何も実行されない。その代わりに、ステップ211の処理により、1行読み込みを行うごとに実体整合性制約の検証が行われる。
次いで、挿入データファイル群9から次のデータファイル、即ち図10(c)データファイルCが読み込まれるが、このデータファイルCに対応する表Cには、図8(c)に示すように、実体整合性制約が設定されていないため、検証は行われない。
以上の処理により、データファイルA、B、Cが実体整合性制約を満たしていることが確認された。さらに、検証済データ保持部13には、データファイルA、B、Cの各データが保存された。
以上により、検証部2による実体整合性制約の検証処理が終了する(ステップ202:YES)。
次に、検証部2は、前述した図4〜図7のフローチャートに従って参照整合性制約の検証処理を行う。
まず、検証部2は、指定表tの表属性定義情報dに付随する参照整合性制約情報iを元に、指定表tに関連する全ての参照整合性制約を、参照整合性制約リストとして取得する(ステップ301)。ここでは、参照整合性制約リストとして、図8(a)〜(c)に示されている表A〜表C(指定表t)の参照整合性制約情報iである、「表B.列2」から「表A.列1」への参照、「表C.列2」から「表A.列1」に対する参照、「表C.列3」から「表B.列1」に対する参照が取得される。
次いで、取得された参照整合性制約リストから参照整合性制約を1つ取得する。ここでは、まず、「表B.列2」から「表A.列1」への参照を取得する(ステップ302、ステップ303:NO)。次いで、参照整合性制約を構成する参照元と参照先の列情報を取得する(ステップ304)。ここでは、参照元が「表B.列2」、参照先が「表A.列1」となる。
次いで、ステップ304で取得された参照先の列情報が指定表tの列となっているか否かを判定する(ステップ305)。ここでは、参照先の表である「表A」は、指定表t(表A、表B、表C)に含まれるため(ステップ305:NO)、次に、「表A.列1」に対応する参照先列値記憶領域19が存在するか否かを判定する(ステップ306)。
この時点では、まだ「表A.列1」に対応する参照先列値記憶領域19は存在しないため(ステップ306:NO)、「表A.列1」に対応する参照先列値記憶領域19を新たに追加・確保する(ステップ307)。更に、検証部2は、この列(表A.列1)を参照先とする参照元列値を保存するため、検証部2自身に新たな参照元列値記憶領域20も同時に追加・確保する(ステップ307)。
以後、同様の処理を、「表C.列2」から「表A.列1」に対する参照に対しても実行するが、「表A.列1」に対応する参照先列値記憶領域19は、上記処理により既に確保されているため、参照先列値記憶領域19の確保は行われない。
一方、「表C.列3」から「表B.列1」に対する参照については、「表B.列1」に対応する参照先列値記憶領域19がまだ確保されていないため、「表B.列1」に対応する参照先列値記憶領域19、及び参照元列値記憶領域20が確保される。
以上により、参照整合性制約リストの全ての参照整合性制約が適用されると(ステップ303:YES)、検証部2は、まだ処理対象となっていない指定表tを選び、ステップ218で検証済データ保持部13に保存した挿入データファイル9のパス情報を元に、同じく検証済データ保持部13に保存した挿入データファイル行データoを割り出す。その後、挿入データファイル行データoを読み込み、処理対象とする(ステップ310、ステップ311:NO)。ここでは、データファイルAに対応する検証済データ保持部13に保存した挿入データファイル行データoを処理対象とする。
続けて、検証部2は、指定表tの表属性定義情報dに付随する参照整合性制約情報iを元に、ステップ310にて処理対象となった挿入データファイル行データoに関連する全ての参照整合性制約を、参照整合性制約リストとして取得する(ステップ312、ステップ313:NO)。ここでは、表Aに関連する、「表B.列2」から「表A.列1」への参照、「表C.列2」から「表A.列1」に対する参照を取得する。
次いで、ステップ310で処理対象とされた挿入データファイル行データoから1行分のデータを読み込む(ステップ314、ステップ315:YES)。ここでは、図10(a)に示すように、データファイルAに対応する挿入データファイル行データoから、“3、5、アメリカ、ニューヨーク”という行が読み込まれる。
次いで、ステップ312で取得された参照整合性制約リストの内、ステップ314で取得された挿入データファイル行データoを検証していない参照整合性制約を1つ選択する(ステップ316、ステップ317:NO)。ここでは、まず、「表B.列2」から「表A.列1」への参照が取得される。
続けて、検証部2は、ステップ318の処理を実行する。
即ち、指定表tの表属性定義情報dに付随する参照整合性制約情報iを元に、ステップ310にて処理対象となった挿入データファイル行データoに、ステップ316で取得された参照整合性制約の参照先となる列が含まれており、且つ、この列に対応する参照先列値記憶領域19が、検証部2自身内に存在するか否かを判定する。ここでは、「表A.列1」に対応する参照先列値記憶領域19が確保されているため、ステップ314で取得された挿入データファイル行データo上の該当列の列候補値を参照先列値記憶領域19にコピーして保存する。ここでは、“3”が保存される。
続けて、検証部2は、指定表tの表属性定義情報dに付随する参照整合性制約情報iを元に、ステップ310にて処理対象となった挿入データファイル行データoに、ステップ316で取得された参照整合性制約の参照元となる列が含まれているか否かを検証する。ここでは、参照元である「表B.列2」は、表Aの列ではないため、処理は行われない。
同様に、ステップ316〜318の処理が「表C.列2」から「表A.列1」に対する参照に対しても行われる。さらに、データファイルB、Cに対してステップ310〜318の処理が行われる。
これにより、「表A.列1」に対応する参照先列値記憶領域19には“3”が、「表A.列1」に対応する参照元列値記憶領域20には“1”、“2”、“3”が、「表B.列1」に対応する参照先列値記憶領域19には“4”、“5”が、「表B.列1」に対応する参照元列値記憶領域20には“1”、“4”、“5”が格納される。
以上により、挿入データファイル群9から読み込むデータファイルが存在しなくなると(ステップ311:YES)、検証部2は、ステップ307で確保され、検証部2自身が保持している参照先列値記憶領域19のうち、処理対象となっていない参照先列値記憶領域19を1つ選択する(ステップ320、ステップ321:NO)。ここでは、「表A.列1」に対応する参照先列値記憶領域19が取得される。
次いで、検証部2は、ステップ320で取得された参照先列値記憶領域19と関連する参照整合性制約を、ステップ321で取得された参照整合性制約リストから取得し、データインスタンス部6のデータから、参照整合性制約の対象となる列値を取得する(ステップ322)。ここでは、「表A.列1」の列値が取得される。図9によれば、「表A.列1」には“1”、“2”が格納されているため、この列値が取得される。
次いで、検証部2は、取得された“1”、“2”の列値を、ステップ320で取得した参照先列値記憶領域19にコピーして保存する(ステップ323)。これにより、「表A.列1」に対応する参照先列値記憶領域19には、“1”、“2”、“3”が格納される。さらに、この列値は、昇順にソートされる。
以後、同様の処理が「表B.列1」に対応する参照先列値記憶領域19に対しても行われ、“1”、“2”、“3”、“4”、“5”が格納される。
以上により、参照先列値記憶領域19の全ての記憶領域が処理されると(ステップ321:YES)、検証部2は、ステップ307で確保され、検証部2自身が保持している参照元列値記憶領域20のうち、まだ処理対象となっていない参照元列値記憶領域を1つ選択する(ステップ330、ステップ331:NO)。ここでは、「表A.列1」に対応する参照元列値記憶領域20が取得される。検証部2は、ステップ330で取得された参照元列値記憶領域20に格納されている列値を昇順にソートする(ステップ332)。
次いで、ステップ330で取得された参照元列値記憶領域20に対応する参照先列値記憶領域19を取得する(ステップ333)。ここでは、「表A.列1」に対応する参照先列値記憶領域19が取得される。
次いで、ステップ330で取得された参照元列値記憶領域20に格納されている列値の先頭の値(最小の値)を取得し、これを現参照元列値とする(ステップ334、ステップ335:NO)。ここでは、“1”が取得される。
次いで、ステップ333で取得された参照先列値記憶領域19に格納されている列値の先頭の値(最小の値)を取得し、これを現参照先列値とする(ステップ336、ステップ337:NO)。ここでは、“1”が取得される。
次いで、現参照元列値と現参照先列値を比較する(ステップ338、339)。ここでは、両者は等しいため(ステップ338:YES)、現参照元列値の次の値と、現参照先列値の次の値が取得される(ステップ340、ステップ341:NO、ステップ342、ステップ343:NO)。ここでは、“2”と“2”が取得される。
その結果、再度、現参照元列値と現参照先列値が比較され、これも等しいため、現参照元列値の次の値と、現参照先列値の次の値である、“3”と“3”が取得され、比較される。これにより、全ての参照元列値記憶領域20に格納されている値について検証が成功する。
次いで、「表B.列1」に対応する参照先列値記憶領域19と、「表B.列1」に対応する参照元列値記憶領域20とについて同様の処理を行う。
この場合、参照元列値記憶領域20に格納されている列値の先頭の値は“1”、参照先列値記憶領域19に格納されている列値の先頭の値は“1”で、これらは等しいため、検証に成功するが、現参照元列値の次の値は“4”、現参照先列値の次の値は“2”となり、参照元列値>参照先列値となる。
この場合、ステップ339の処理でYESと判定され、参照先列値のみが現参照先列値の次の値となる。これにより、参照先列値は“3”となるが、やはり参照元列値>参照先列値となる。ここで再度参照先列値のみが現参照先列値の次の値となる。これにより、参照先列値は“4”となり、参照元列値と等しくなるため、検証に成功する。
次いで、現参照元列値の次の値と、現参照先列値の次の値である、“5”と“5”が取得され、これらは等しいため、検証に成功する。
以上により、全ての参照元列値記憶領域20に対して検証が成功するため、データファイルA、B、Cは、参照整合性制約を満たしていることが確認された。
これにより、検証部2による参照整合性制約の検証処理が終了する(ステップ331:YES)。
以上のようにして、起動コマンドaで指定される全ての挿入データファイル群9のデータに関して、実体整合性制約と参照整合性制約の検証ステップの処理が終了すると、検証部2は、検証済データのデータベース管理システム4への格納を行うため、データ挿入部3に対して起動要求nを発行する。その際、検証済データ保持部13のアクセス参照先uが引数として渡される。
データ挿入部3は、起動要求nを受けると、指定された指定表tに相当する表11へ格納するべきデータの内、全行分のデータpを検証済データ保持部13から入手する。その後、データインスタンス部6への格納を行うため、データpをもとに、SQLの該当INSERT文を作成し、順次、データベース管理システム4へ、INSERT文qを発行する。これにより、表A〜表Cへ、データファイルA〜Cの各データがそれぞれ格納される。
このようにして、INSERT文qに加工・翻訳された一連のデータをデータベース管理システム4に格納した後、データ挿入部3は、先に停止させた参照整合性制約情報iに対応する参照整合性制約を全て再有効にするため、制約制御部14に要求kを発行する。
その後、制約制御部14は、データベース管理システム4に対し、要求kと同意の要求mを発行する。この要求mの結果、データベース管理システム4は、参照整合性制約管理部7をアクセスし、参照整合性制約情報iに対応する参照整合性制約を全て再有効化する。これにより、「表B.列2」から「表A.列1」への参照、「表C.列2」から「表A.列1」に対する参照、「表C.列3」から「表B.列1」に対する参照が有効になる。
上記一連の動作を終了した段階で、本データローダ装置1は、動作を終了する。
従って、本実施の形態によれば、全ての入力データを一括して整合性に関する制約の検証を行っているため、従来の方法に比べ高速な制約の検証が可能になっている。また、外部ファイル内に記載されるデータの入力順序を意識せずに任意の順序で入力を行うことができるため、操作性を大幅に向上させることができる。このようにして、データベースへデータを入力する際の操作性を向上させると共に、整合性に関する制約の検証の高速化を図ることができる。
なお、本発明は、代表的に例示した上述の実施の形態に限定されるものではなく、当業者であれば、特許請求の範囲の記載内容に基づき、その要旨を逸脱しない範囲内で種々の態様に変形、変更することができる。これらの変更例や変形例も本発明の権利範囲に属するものである。
以下、本発明のその他の実施の態様について説明する。
[第一のデータ入力方式]
本方式は、システム利用者が、外部ファイルからデータベースへデータを入力する際に、前記外部ファイル内に記載されるデータを、前記データベースが保持している実体整合性制約及び参照整合性制約に従い、入力事前に検証するステップを含むこと特徴とする。
これによれば、実体整合性制約、もしくは参照整合性制約に対する整合性違反を事前に判定できない故、データベース管理システムに対するデータ入力の際、入力の度に整合性違反が報告され、入力そのものができないという従来技術の課題を解決することができる。
[第二のデータ入力方式]
本方式は、システム利用者が、外部ファイルからデータベースへデータを入力する際に、前記データベースが保持している整合性制約を一度停止するステップを実施し、外部ファイル内に記載されるデータを、データベースが保持している整合性制約に従い、入力事前に検証した後、前記データを入力するステップを実施し、入力後に前記整合性制約を再度有効化するステップを実施することで、前記整合性制約による前述データの入力順序制限を考慮不要にできることを特徴とする。
これによれば、実体整合性制約、もしくは参照整合性制約に対する整合性違反を事前に判定できない故、外部ファイルからデータベース管理システムへデータを入力する際に、システム利用者が当該データの入力順序を考慮する必要があるという従来技術の課題を解決することができる。
[第三のデータ入力方式]
本方式は、システム利用者が、外部ファイルからデータベースへデータを入力する際に、当該外部ファイル内に記載される前記データを、前記データベースが保持している実体整合性制約に従い入力事前に検証するステップを実施する場合、前記データベース内の指定カラムに関し、前記データベースが既に保持しているカラム値、ならびに前記外部ファイル内の対応するカラム値を全て集積し、一意性を保障しているか否かの検証ステップの実施を含むことを特徴とする。
これによれば、実体整合性制約、もしくは参照整合性制約に対する整合性違反を事前に判定できない故、データベース管理システムに対するデータ入力の際、入力の度に整合性違反が報告され、入力そのものができないという従来技術の課題を解決することができる。
[第四のデータ入力方式]
本方式は、システム利用者が、外部ファイルからデータベースへデータを入力する際に、当該外部ファイル内に記載される前記データを、前記データベースが保持している参照整合性制約に従い入力事前に検証するステップを実施する場合、前記データベース内の複数指定カラムで構成される参照関係に関し、前記データベースが既に確立している参照関係のみならず、前記外部ファイル内の対応するカラム値と新たに構成する新参照関係も含めて、前記参照整合性を保障しているか否かの検証ステップの実施を含むことを特徴とする。
これによれば、実体整合性制約、もしくは参照整合性制約に対する整合性違反を事前に判定できない故、データベース管理システムに対するデータ入力の際、入力の度に整合性違反が報告され、入力そのものができないという従来技術の課題を解決することができる。
[第五のデータ入力方式]
本方式は、システム利用者が、外部ファイルからデータベースへデータを入力する際に、当該外部ファイル内に記載される前述データを、前述データベースが保持している参照整合性制約に従い入力事前に検証するステップを実施する場合、当該参照整合性制約に基づく前記データの読み込み回数の縮退操作、ならびにデータ並び替え操作を実施することで、参照の検証に掛かる計算量を極小化した方式で当該参照整合性を保障しているか否かの検証ステップ実施を含むことを特徴とする。
[第一のデータ入力装置]
本装置は、システム利用者が、外部ファイルからデータベースへデータを入力する際に、当該データベースが保持している整合性制約を一度停止するステップを実施し、前記外部ファイル内に記載される前述データを、前記データベースが保持している前記整合性制約に従い、入力事前に検証した後、前記データを入力するステップを実施し、入力後に前記整合性制約を再度有効化するステップを実施することで、整合性制約によるデータの入力順序制限を考慮不要とするデータベースへのデータ入力方式を採用したものである。
これによれば、外部ファイル内に記載されるデータの入力順序を意識せずに、かつデータベースが保持している整合性に関する制約を解決しつつ、システムを操作することができる。
本発明の実施の形態に係るデータ入力装置を備えたデータベースシステムの全体構成を示す概略ブロック図である。
本発明の実施の形態に係るデータ入力装置による実体整合性制約の検証ステップを説明する概略フローチャートである。
本発明の実施の形態に係るデータ入力装置による実体整合性制約の検証ステップを説明する概略フローチャートである。
本発明の実施の形態に係るデータ入力装置による参照整合性制約の検証ステップの内、参照整合性制約の検証対象となる列情報取得ステップを説明する概略フローチャートである。
本発明の実施の形態に係るデータ入力装置による参照整合性制約の検証ステップの内、参照整合性制約の検証対象となる列値候補取得ステップを説明する概略フローチャートである。
本発明の実施の形態に係るデータ入力装置による参照整合性制約の検証ステップの内、参照整合性制約の検証対象となる列値取得ステップを説明する概略フローチャートである。
本発明の実施の形態に係るデータ入力装置による参照整合性制約の検証ステップの内、参照整合性制約の検証ステップを説明する概略フローチャートである。
本発明の実施例の表定義を説明する図である。
本発明の実施例の表のデータインスタンスを説明する図である。
本発明の実施例の挿入データファイル群を説明する図である。
従来技術のデータベースへのデータ入力方法及びその装置を説明する概略ブロック図である。
符号の説明
1 データローダ装置
2 検証部
3 データ挿入部
4 データベース管理システム
5 データディクショナリ部
6 データインスタンス部
7 参照整合性制約管理部
8 表定義部
9 挿入データファイル
10 実体整合性制約管理部
11 表
12 ログファイル
13 検証済データ保持部
14 制約制御部
15 システム利用者
16 表定義情報
18 列情報保存領域
19 参照先列値保存領域
20 参照元列値保存領域
a 起動コマンド
b 起動要求
c 問い合わせ
d 表属性定義情報
e データ型情報
f 問い合わせ
g 実体整合性制約情報
h 問い合わせ
i 参照整合性制約情報
j 要求
k 要求
l 要求
m 要求
n 起動要求
o 行データ
p データ
q INSERT文
r 表定義の関係
s 引数
t 指定表
u アクセス参照先
101 入力装置
102 データベース管理システム
103 データベース入出力管理プログラム
104 データ文字列解析部
105 システム利用者