4.2.2 結合項目と構成項目の生成規則

ここでは,データベースの表情報から,どのように結合項目と構成項目が生成されるのかについて説明します。

<この項の構成>
(1) 結合項目と構成項目の生成例
(2) 生成規則
(3) データ項目名による更新入力
(4) 外部キーの扱い

(1) 結合項目と構成項目の生成例

データソース「TESTDATA」を例に,使用するデータベースがORACLEの場合,どのように結合項目と構成項目が生成されるのかについて説明します。データソース「TESTDATA」は表「NEWTABLE」を持ち,表「NEWTABLE」は「City」および「State」という列を持ちます。このデータソースの表から求められる列情報の例を次の表に示します。

表4-7 データソースの表から求められる列情報の例

列情報項目列情報1列情報2
表名 (TABLE_NAME)NEWTABLENEWTABLE
列名 (COLUMN_NAME)CityState
データ型 (DATA_TYPE)SQL_CHARSQL_CHAR
精度 (PRECISION)102

この例から生成されるデータ項目の関係を次の図に示します。

図4-5 生成されるデータ項目間の関係

[図データ]

生成されるデータ項目の定義内容の例を次の表に示します。

表4-8 生成されるデータ項目の定義内容の例

定義項目生成される定義内容
データソースNEWTABLE(表)City(列)State(列)
データ項目名TESTDATANEWTABLECityState
データ項目種別結合項目結合項目単項目単項目
分類結合データ結合データ英数字文字列データ英数字文字列データ
けた数102
名前(言語共通)TESTDATANEWTABLECityState


COBOL又はOOCOBOLXX
C又はC++charchar
SQLCHARCHAR
帳票定義CC
Javacharchar
言語4~7フリー定義フリー定義

生成されるデータ項目の詳細な定義内容の例は,CSV形式ファイルで提供されています。このサンプルの提供先を次に示します。

サーバのSEWB+ 基本開発環境の組み込み先パス名¥Repository¥sample¥odbcin.csv

なお,組み込み先パス名は,デフォルトでは次のように設定されています。システムドライブとは,Windows Serverが組み込まれているドライブです。

システムドライブ:¥Program Files¥HITACHI¥Sewb
注意
64ビット版のWindowsでの,デフォルトの組み込み先パス名を次に示します。
システムドライブ:¥Program Files (x86)¥HITACHI¥Sewb

(2) 生成規則

(a) 生成の概要

ODBC入力コマンドを使用すると,生成元のデータソースから結合項目の構成が生成され,データ項目辞書に格納されます。生成されるデータ項目の関係の例を次の図に示します。

図4-6 データソースから生成されるデータ項目の関係

[図データ]

データソースから生成されるデータ項目は,次の3種類に分類されます。

  1. データソースに対応するデータ項目
    結合項目となります。一つのデータソースに対し,一つだけ生成されます。2.のデータ項目が,この結合項目の構成項目になります。
  2. 表に対応するデータ項目
    結合項目(最上位結合項目)となります。データソース中の表に対応して,複数生成されます。3.のデータ項目が,この結合項目の構成項目になります。
  3. 列に対応するデータ項目
    単項目※1または結合項目となります。データ項目種別(単項目または結合項目)は,列のSQLデータ型※2によって異なります。
    注※1
    単項目とは,構成項目を持たないデータ項目のことです。
    注※2
    ODBC SQLデータ型(SEWB+/REPOSITORYでは「ODBCタイプ」と呼びます)とは,ODBCで規定されるSQLデータ型のことです。ODBC SQLデータ型の詳細は,ODBCに接続するデータベースのマニュアルを参照してください。
(b) データソース,表,列から生成されるデータ項目の定義内容

(a)で説明した分類に従って,それぞれのデータ項目に生成される定義内容を次の表に示します。

(c) ODBCタイプマッピングの規則
データ項目種別
構造を持つ列は結合項目,構造を持たない列は単項目となります。
結合項目として生成される場合,構成項目も同時に生成され,そのデータ項目名には内容を表すサフィックスが付加されます。
ODBCタイプと付加されるサフィックスの有無の対応については,表4-10を参照してください。
分類,けた数,小数部けた数
タイプマッピングの規則に従って,ODBCタイプや条件に応じた分類,けた数,小数部けた数が設定されます。標準で用意されているタイプマッピングの規則を次の表に示します。
  • 結合項目として生成されたデータ項目は分類が「結合データ」となるため,けた数と小数部けた数は設定されません。単項目または結合項目の構成項目として生成されたデータ項目には,ODBCタイプに応じた分類,けた数,小数部けた数が設定されます。
  • 列の精度からけた数が設定されるデータ項目で,列の精度がけた数の上限値を超える場合,代わりに上限値が設定されます。

    表4-10 ODBCタイプと分類,けた数,小数部けた数の対応

    ODBCタイプデータ項目の定義内容
    構成項目のサフィックス分類けた数小数部
    けた数
    SQL_CHAR英数字文字列長さ
    SQL_VARCHAR-length整数9
    -char英数字文字列長さ
    SQL_LONGVARCHAR-length整数9
    -char英数字文字列長さ
    SQL_DECIMAL整数精度
    実数精度スケール
    SQL_NUMERIC整数精度
    実数精度スケール
    SQL_SMALLINT整数精度
    SQL_INTEGER整数精度
    SQL_REAL実数精度
    SQL_FLOAT実数精度
    SQL_DOUBLE実数精度
    SQL_BIT-filler分類なし7
    -bit分類なし1
    SQL_TINYINT整数精度
    SQL_BIGINT整数精度
    SQL_BINARY英数字文字列長さ
    SQL_VARBINARY-length整数9
    -bit英数字文字列長さ
    SQL_LONGVARBINARY-length整数9
    -bit英数字文字列列最大長
    SQL_DATE-year整数4
    -month整数4
    -day整数4
    SQL_TIME-hour整数4
    -minute整数4
    -second整数4
    SQL_TIMESTAMP-year整数4
    -month整数4
    -day整数4
    -hour整数4
    -minute整数4
    -second整数4
    -fraction整数9
    その他分類なし
    (凡例)
    -:設定されない
    構成項目のサフィックス欄が「-」のODBCタイプは,単項目として生成されるタイプです。「-」以外のタイプは,結合項目としてその構成項目が生成されるタイプです。
    注※
    スケールに依存します。スケール=0の場合は「整数データ」となります。その他の場合は「実数データ」となります。

言語別のタイプ
タイプマッピングの規則に従って,ODBCタイプや条件に応じたタイプが設定されます。標準で用意されているタイプマッピングの規則を,表4-11から表4-13に示します。
  • 結合項目として生成されたデータ項目には,言語別のタイプは設定されません。単項目または結合項目の構成項目として生成されたデータ項目には,ODBCタイプに応じた言語別のタイプが設定されます。
  • 同じODBCタイプでも,列の符号の有無によって,設定されるタイプが異なる場合があります。
  • 言語別4~7のタイプには「フリー定義」が設定されます。定義文字列は設定されません。

    表4-11 ODBCタイプと言語別タイプの対応(COBOL又はOOCOBOL,C又はC++)

    列の情報データ項目の定義内容
    ODBCタイプ構成項目のサフィックス言語別のタイプ
    COBOL又はOOCOBOLC又はC++
    SQL_CHARXchar
    SQL_VARCHAR-lengthBlong
    -charXchar *
    SQL_LONGVARCHAR-lengthBlong
    -charXchar *
    SQL_DECIMALフリー定義※1フリー定義※5
    SQL_NUMERICフリー定義※1フリー定義※5
    SQL_SMALLINTB2
    BU2
    short6
    unsigned short6
    SQL_INTEGERB2
    BU2
    long7
    unsigned long7
    SQL_REALDfloat
    SQL_FLOATDdouble
    SQL_DOUBLEDdouble
    SQL_BIT-filler1フリー定義※8
    -bit1フリー定義※8
    SQL_TINYINTフリー定義※3int※9
    unsigned int※9
    SQL_BIGINTB2
    BU2
    フリー定義※5
    SQL_BINARYXフリー定義※10
    SQL_VARBINARY-lengthBlong
    -bitXフリー定義※10
    SQL_LONGVARBINARY-lengthBlong
    -bitXフリー定義※10
    SQL_DATE-yearBshort
    -monthBUunsigned short
    -dayBUunsigned short
    SQL_TIME-hourBUunsigned short
    -minuteBUunsigned short
    -secondBUunsigned short
    SQL_TIMESTAMP-yearBshort
    -monthBUunsigned short
    -dayBUunsigned short
    -hourBUunsigned short
    -minuteBUunsigned short
    -secondBUunsigned short
    -fractionBUunsigned long
    その他フリー定義※4フリー定義※4
    (凡例)
    -:設定されない
    注※1
    精度を$p,スケールを$sとするとき,定義文字列は「PIC S9($p-$s)V9($s) SIGN LEADING SEPARATE」となります。
    注※2
    列符号がある場合は「B」,ない場合は「BU」となります。
    注※3
    定義文字列には「PIC X(1)」が設定されます。
    注※4
    定義文字列は設定されません。
    注※5
    定義文字列には「char *」が設定されます。
    注※6
    列符号がある場合は「short」,ない場合は「unsigned short」となります。
    注※7
    列符号がある場合は「long」,ない場合は「unsigned long」となります。
    注※8
    定義文字列には「unsigned char」が設定されます。
    注※9
    列符号がある場合は「int」,ない場合は「unsigned int」となります。
    注※10
    定義文字列には「unsigned char *」が設定されます。

    表4-12 ODBCタイプと言語別タイプの対応(SQL)

    列の情報データ項目の定義内容
    ODBCタイプ構成項目のサフィックス言語別のタイプ(SQL)
    データべースがORACLEデータべースがHiRDB
    SQL_CHARCHARCHAR
    SQL_VARCHAR-lengthNUMBERSMALLINT
    -charVARCHAR2VARCHAR
    SQL_LONGVARCHAR-lengthNUMBERDEC
    -charLONGフリー定義
    SQL_DECIMALNUMBERDEC
    SQL_NUMERICNUMBERDEC
    SQL_SMALLINTNUMBERSMALLINT
    SQL_INTEGERNUMBERINT
    SQL_REALNUMBERfSMALLFLT
    SQL_FLOATNUMBERfFLOAT
    SQL_DOUBLENUMBERfFLOAT
    SQL_BIT-fillerフリー定義フリー定義
    -bitフリー定義フリー定義
    SQL_TINYINTNUMBERSMALLINT
    SQL_BIGINTNUMBERDEC
    SQL_BINARYフリー定義フリー定義
    SQL_VARBINARY-lengthNUMBERSMALLINT
    -bitフリー定義フリー定義
    SQL_LONGVARBINARY-lengthNUMBERDEC
    -bitフリー定義フリー定義
    SQL_DATE-yearNUMBERSMALLINT
    -monthNUMBERSMALLINT
    -dayNUMBERSMALLINT
    SQL_TIME-hourNUMBERSMALLINT
    -minuteNUMBERSMALLINT
    -secondNUMBERSMALLINT
    SQL_TIMESTAMP-yearNUMBERSMALLINT
    -monthNUMBERSMALLINT
    -dayNUMBERSMALLINT
    -hourNUMBERSMALLINT
    -minuteNUMBERSMALLINT
    -secondNUMBERSMALLINT
    -fractionNUMBERSMALLINT
    その他フリー定義フリー定義
    (凡例)
    -:該当しない
    言語別SQLに「ORACLE」または「HiRDB」のどちらのタイプで登録するかを,コマンドに指定してください。コマンドの詳細は,「4.2.3(3) ODBC入力コマンド(RPOdbcin)の指定」の引数 /Qを参照してください。言語別SQLで使用するタイプを,あらかじめ環境構築ユティリティでカスタマイズしておく必要があります。標準に設定されている分類とタイプの対応については「表2-4 分類区分とタイプの対応(SQL)」,HiRDBのカスタマイズ例については「表2-8 分類区分とタイプの対応のカスタマイズ例(言語区分SQLのタイプをHiRDBとして使用する場合)」を参照してください。
    注※
    定義文字列は設定されません。

    表4-13 ODBCタイプと言語別タイプの対応(帳票定義,Java)

    列の情報データ項目の定義内容
    ODBCタイプ構成項目のサフィックス言語別のタイプ
    帳票定義Java
    SQL_CHARC※1
    SQL_VARCHAR-lengthI※1
    -charC※1
    SQL_LONGVARCHAR-lengthI※1
    -charC※1
    SQL_DECIMALI2
    フリー定義2
    ※1
    SQL_NUMERICI3
    B3
    ※1
    SQL_SMALLINTI※1
    SQL_INTEGERI※1
    SQL_REALI※1
    SQL_FLOATB※1
    SQL_DOUBLEB※1
    SQL_BIT-fillerフリー定義※4※1
    -bitフリー定義※4※1
    SQL_TINYINTI※1
    SQL_BIGINTI※1
    SQL_BINARYフリー定義※4※1
    SQL_VARBINARY-lengthI※1
    -bitフリー定義※4※1
    SQL_LONGVARBINARY-lengthI※1
    -bitフリー定義※4※1
    SQL_DATE-yearI※1
    -monthI※1
    -dayI※1
    SQL_TIME-hourI※1
    -minuteI※1
    -secondI※1
    SQL_TIMESTAMP-yearI※1
    -monthI※1
    -dayI※1
    -hourI※1
    -minuteI※1
    -secondI※1
    -fractionI※1
    その他フリー定義※5フリー定義5
    (凡例)
    -:設定されない
    注※1
    環境構築ユティリティで設定した分類区分に対応するタイプの初期値(デフォルトタイプ)が設定されます。
    注※2
    列の精度とスケールに依存します。スケール=0 かつ 精度≦16の場合と,0<スケール≦5 かつ(精度-スケール)≦16の場合は「I」となります。その他の場合はフリー定義で,内容は「C」となります。
    注※3
    列の精度とスケールに依存します。スケール=0 かつ 精度≦10の場合は「I」となります。その他の場合は「B」となります。
    注※4
    定義文字列には「C」が設定されます。
    注※5
    定義文字列は設定されません。

(3) データ項目名による更新入力

データベースから生成された定義情報で,すでに辞書に登録されているデータ項目を更新できます(更新入力)。この場合は,ODBC入力コマンドで,引数「/N 辞書への登録方法」を指定します。

更新入力では,データ項目名によって,更新の対象となるデータ項目が特定されます。このため,既存の辞書フォルダ内および登録されるデータ項目には,一意のデータ項目名が定義されている必要があります。なお,対象となるデータ項目が辞書にない場合には,新しいデータ項目として作成,登録されます。

(4) 外部キーの扱い

表に指定された外部キーの関係を,辞書に反映できます。ここでは,外部キーを含む表の生成規則について説明します。ODBC入力コマンドの引数の指定によって,個別のデータ項目として生成するか,またはデータ項目に外部キーに基づいた関連を付けて生成するかを選択できます。

(a) 外部キーを個別のデータ項目として生成

ODBC入力コマンドで,引数「/R 外部キー関連付けの有無」を省略,または引数「/R 外部キー関連付けの有無」で「nouse」を指定すると,外部キーは個別のデータ項目として生成されます。この場合の例を次に示します。

[図データ]

(b) 外部キーをデータ項目の関連として生成

ODBC入力コマンドで,引数「/R 外部キー関連付けの有無」に「use」を指定すると,外部キーの関係をデータ項目間の関連として生成できます。この場合,外部キーとなるデータ項目は作成されず,主キーとなるデータ項目に関連が付けられます。

なお,外部キーの情報をデータソースから取得するためには,ODBCドライバがAPI適合レベル2に準拠している必要があります。ODBCドライバのAPI適合レベルについては,使用するODBCドライバまたはデータベースのマニュアルなどで確認してください。

外部キーの関連づけは,ODBCドライバのAPI適合レベルによって,生成規則が異なります。

(i) API適合レベル2の場合
  • 関連の生成規則
    外部キーとなるデータ項目は作成されず,主キーとなるデータ項目に結合の関連が付けられます。この場合の例を次に示します。

    [図データ]

    ただし,一度に入力する表に,主キーと外部キーの両方の指定が含まれていることが前提となります。主キーとなるデータ項目が一度に入力する表に含まれない場合には,外部キーのデータ項目だけが新規に作成されます。また,外部キーの名称を別名で指定している場合は,主キーのデータ項目を親として継承するデータ項目が作成されます。この場合の例を次に示します。

    [図データ]

  • 表から生成されたデータ項目と既存のデータ項目との関連
    データ項目名による更新入力を併用することで,入力する外部キーのデータ項目と既存の辞書フォルダ内にある主キーのデータ項目とに関連が付けられます。
    既存の辞書フォルダ内にある主キーのデータ項目は,表の外部キーの属性で更新されます。また,外部キーが別名のデータ項目は,既存の辞書フォルダ内の主キーとなるデータ項目を親とする継承の関連が付けられます。
    ただし,継承の関連は,主キーとなるデータ項目が先に辞書フォルダに登録されていることが前提となります。
(ii) API適合レベル2がサポートされていない場合
名称が同じ列に対するデータ項目が,一つのデータ項目に統合されます。この場合,属性が同じ列を除く列の名称は,入力する表全体で一意であることが前提になります。名称が同じ列が複数ある場合には,入力時に先に登録されたデータ項目に統合されます。
このように,列の名称によって一つのデータ項目に統合されるため,データ項目名による更新入力を行う場合に,入力するデータ項目の名称を一意に保ちやすくなります。
なお,列に別名が付けられている場合,主キーと外部キーで継承の関係が結べないため,独立したデータ項目として登録されます。この場合の例を次に示します。
[図データ]