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

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

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

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

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

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

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

この例から生成されるデータ項目の関係を図4-5に,データ項目の定義内容を表4-8に示します。

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

[図データ]

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

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


COBOL又は
OOCOBOL
XX
C又はC++charchar
SQLCHARCHAR
IDL(CORBA)charchar
帳票定義CC
Javacharchar
言語4~7フリー定義フリー定義

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

サーバのSEWB+/REPOSITORY組み込み先パス名¥SAMPLE¥ODBCIN.CSV

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

(2) 生成規則

(a) 生成の概要

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

図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)で説明した分類に従って,それぞれのデータ項目に生成される定義内容を表4-9に示します。

注※1 コマンド実行時に,引数に指定した国語区分に対して設定されます。指定していない場合,すべての国語区分に同じ内容が設定されます。
注※2 すべての言語区分に同じ内容が設定されます。
注※3 言語区分「COBOL又はOOCOBOL」で定義する編集文字列,言語区分「IDL(CORBA)」で定義するシーケンスを指します。
注※4 コマンド実行時に,引数に指定した所有者名が設定されます。指定していない場合は,システム管理者が設定されます。
注※5 コマンド実行時に,引数に指定したグループ名が設定されます。指定していない場合は,システム管理者の所属するグループ名が設定されます。
注※6 新規に登録したデータ項目にはアクセス権の初期値が設定されます。初期値については「3.2.1 アクセス権の設定」を参照してください。なお,既存のデータ項目を更新した場合には,設定されているアクセス権は変更されません。

(c) ODBCタイプマッピングの規則

データ項目種別
構造を持つ列は結合項目,構造を持たない列は単項目となります。
結合項目として生成される場合,構成項目も同時に生成され,そのデータ項目名には内容を表すサフィックスが付加されます。
ODBCタイプと付加されるサフィックスの有無の対応については,表4-10を参照してください。
分類,けた数,小数部けた数
タイプマッピングの規則に従って,ODBCタイプや条件に応じた分類,けた数,小数部けた数が設定されます。標準で用意されているタイプマッピングの規則を,表4-10に示します。
  • 結合項目として生成されたデータ項目は分類が「結合データ」となるため,けた数と小数部けた数は設定されません。単項目,又は結合項目の構成項目として生成されたデータ項目には,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又は
OOCOBOL
C又は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タイプと言語別タイプの対応(IDL(CORBA),帳票定義,Java)

列の情報データ項目の定義内容
ODBCタイプ構成項目の
サフィックス
言語別のタイプ
IDL(CORBA)帳票定義Java
SQL_CHARcharC※9
SQL_VARCHAR-lengthlongI※9
-charstringC※9
SQL_LONGVARCHAR-lengthlongI※9
-charstringC※9
SQL_DECIMALフリー定義※1I6
フリー定義6
※9
SQL_NUMERICフリー定義※1I7
B7
※9
SQL_SMALLINTshort2
unsigned short2
I※9
SQL_INTEGERlong3
unsigned long3
I※9
SQL_REALfloatI※9
SQL_FLOATdoubleB※9
SQL_DOUBLEdoubleB※9
SQL_BIT-filleroctetフリー定義※8※9
-bitoctetフリー定義※8※9
SQL_TINYINTlong※3
unsigned long※3
I※9
SQL_BIGINTフリー定義1I※9
SQL_BINARYフリー定義4フリー定義※8※9
SQL_VARBINARY-lengthlongI※9
-bitフリー定義4フリー定義※8※9
SQL_LONGVARBINARY-lengthlongI※9
-bitフリー定義4フリー定義※8※9
SQL_DATE-yearshortI※9
-monthunsigned shortI※9
-dayunsigned shortI※9
SQL_TIME-hourunsigned shortI※9
-minuteunsigned shortI※9
-secondunsigned shortI※9
SQL_TIMESTAMP-yearshortI※9
-monthunsigned shortI※9
-dayunsigned shortI※9
-hourunsigned shortI※9
-minuteunsigned shortI※9
-secondunsigned shortI※9
-fractionunsigned longI※9
その他フリー定義※5フリー定義※5フリー定義5

(凡例)-:設定されない

注※1 定義文字列には「string」が設定されます。

注※2 列符号がある場合は「short」,ない場合は「unsigned short」となります。

注※3 列符号がある場合は「long」,ない場合は「unsigned long」となります。

注※4 定義文字列には「octet *」が設定されます。

注※5 定義文字列は設定されません。

注※6 列の精度とスケールに依存します。スケール=0 かつ 精度≦16の場合と,0<スケール≦5 かつ (精度-スケール)≦16の場合は「I」となります。その他の場合はフリー定義で,内容は「C」となります。

注※7 列の精度とスケールに依存します。スケール=0 かつ 精度≦10の場合は「I」となります。その他の場合は「B」となります。

注※8 定義文字列には「C」が設定されます。

注※9 環境構築ユティリティで設定した分類区分に対応するタイプの初期値(デフォルトタイプ)が設定されます。


(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がサポートされていない場合
名称が同じ列に対するデータ項目が,一つのデータ項目に統合されます。この場合,属性が同じ列を除く列の名称は,入力する表全体で一意であることが前提になります。名称が同じ列が複数ある場合には,入力時に先に登録されたデータ項目に統合されます。
このように,列の名称によって一つのデータ項目に統合されるため,データ項目名による更新入力を行う場合に,入力するデータ項目の名称を一意に保ちやすくなります。
なお,列に別名が付けられている場合,主キーと外部キーで継承の関係が結べないため,独立したデータ項目として登録されます。この場合の例を次に示します。
[図データ]