SEWB+/REPOSITORY 辞書設計ガイド

[目次][用語][索引][前へ][次へ]

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

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

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

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

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

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

列情報項目 列情報1 列情報2
表名 (TABLE_NAME) NEWTABLE NEWTABLE
列名 (COLUMN_NAME) City State
データ型 (DATA_TYPE) SQL_CHAR SQL_CHAR
精度 (PRECISION) 10 2

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

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

[図データ]

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

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

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



COBOL又はOOCOBOL X X
C又はC++ char char
SQL CHAR CHAR
帳票定義 C C
Java char char
言語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又はOOCOBOL C又はC++
    SQL_CHAR X char
    SQL_VARCHAR -length B long
    -char X char *
    SQL_LONGVARCHAR -length B long
    -char X char *
    SQL_DECIMAL フリー定義※1 フリー定義※5
    SQL_NUMERIC フリー定義※1 フリー定義※5
    SQL_SMALLINT B2
    BU2
    short6
    unsigned short6
    SQL_INTEGER B2
    BU2
    long7
    unsigned long7
    SQL_REAL D float
    SQL_FLOAT D double
    SQL_DOUBLE D double
    SQL_BIT -filler 1 フリー定義※8
    -bit 1 フリー定義※8
    SQL_TINYINT フリー定義※3 int※9
    unsigned int※9
    SQL_BIGINT B2
    BU2
    フリー定義※5
    SQL_BINARY X フリー定義※10
    SQL_VARBINARY -length B long
    -bit X フリー定義※10
    SQL_LONGVARBINARY -length B long
    -bit X フリー定義※10
    SQL_DATE -year B short
    -month BU unsigned short
    -day BU unsigned short
    SQL_TIME -hour BU unsigned short
    -minute BU unsigned short
    -second BU unsigned short
    SQL_TIMESTAMP -year B short
    -month BU unsigned short
    -day BU unsigned short
    -hour BU unsigned short
    -minute BU unsigned short
    -second BU unsigned short
    -fraction BU unsigned 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_CHAR CHAR CHAR
    SQL_VARCHAR -length NUMBER SMALLINT
    -char VARCHAR2 VARCHAR
    SQL_LONGVARCHAR -length NUMBER DEC
    -char LONG フリー定義
    SQL_DECIMAL NUMBER DEC
    SQL_NUMERIC NUMBER DEC
    SQL_SMALLINT NUMBER SMALLINT
    SQL_INTEGER NUMBER INT
    SQL_REAL NUMBERf SMALLFLT
    SQL_FLOAT NUMBERf FLOAT
    SQL_DOUBLE NUMBERf FLOAT
    SQL_BIT -filler フリー定義 フリー定義
    -bit フリー定義 フリー定義
    SQL_TINYINT NUMBER SMALLINT
    SQL_BIGINT NUMBER DEC
    SQL_BINARY フリー定義 フリー定義
    SQL_VARBINARY -length NUMBER SMALLINT
    -bit フリー定義 フリー定義
    SQL_LONGVARBINARY -length NUMBER DEC
    -bit フリー定義 フリー定義
    SQL_DATE -year NUMBER SMALLINT
    -month NUMBER SMALLINT
    -day NUMBER SMALLINT
    SQL_TIME -hour NUMBER SMALLINT
    -minute NUMBER SMALLINT
    -second NUMBER SMALLINT
    SQL_TIMESTAMP -year NUMBER SMALLINT
    -month NUMBER SMALLINT
    -day NUMBER SMALLINT
    -hour NUMBER SMALLINT
    -minute NUMBER SMALLINT
    -second NUMBER SMALLINT
    -fraction NUMBER SMALLINT
    その他 フリー定義 フリー定義
    (凡例)
    −:該当しない
    言語別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_CHAR C ※1
    SQL_VARCHAR -length I ※1
    -char C ※1
    SQL_LONGVARCHAR -length I ※1
    -char C ※1
    SQL_DECIMAL I2
    フリー定義2
    ※1
    SQL_NUMERIC I3
    B3
    ※1
    SQL_SMALLINT I ※1
    SQL_INTEGER I ※1
    SQL_REAL I ※1
    SQL_FLOAT B ※1
    SQL_DOUBLE B ※1
    SQL_BIT -filler フリー定義※4 ※1
    -bit フリー定義※4 ※1
    SQL_TINYINT I ※1
    SQL_BIGINT I ※1
    SQL_BINARY フリー定義※4 ※1
    SQL_VARBINARY -length I ※1
    -bit フリー定義※4 ※1
    SQL_LONGVARBINARY -length I ※1
    -bit フリー定義※4 ※1
    SQL_DATE -year I ※1
    -month I ※1
    -day I ※1
    SQL_TIME -hour I ※1
    -minute I ※1
    -second I ※1
    SQL_TIMESTAMP -year I ※1
    -month I ※1
    -day I ※1
    -hour I ※1
    -minute I ※1
    -second I ※1
    -fraction I ※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がサポートされていない場合
名称が同じ列に対するデータ項目が,一つのデータ項目に統合されます。この場合,属性が同じ列を除く列の名称は,入力する表全体で一意であることが前提になります。名称が同じ列が複数ある場合には,入力時に先に登録されたデータ項目に統合されます。
このように,列の名称によって一つのデータ項目に統合されるため,データ項目名による更新入力を行う場合に,入力するデータ項目の名称を一意に保ちやすくなります。
なお,列に別名が付けられている場合,主キーと外部キーで継承の関係が結べないため,独立したデータ項目として登録されます。この場合の例を次に示します。
[図データ]