SEWB+/REPOSITORY 辞書設計ガイド
ここでは,データベースの表情報から,どのように結合項目と構成項目が生成されるのかについて説明します。
- <この項の構成>
- (1) 結合項目と構成項目の生成例
- (2) 生成規則
- (3) データ項目名による更新入力
- (4) 外部キーの扱い
(1) 結合項目と構成項目の生成例
データソース「TESTDATA」を例に,使用するデータベースがORACLEの場合,どのように結合項目と構成項目が生成されるのかについて説明します。データソース「TESTDATA」は表「NEWTABLE」を持ち,表「NEWTABLE」は「City」「State」という列を持ちます。このデータソースの表から求められる列情報の例を,表4-7に示します。
表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に示します。
図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 IDL(CORBA) − − char char 帳票定義 − − C C Java − − char char 言語4〜7 − − フリー定義 フリー定義 生成されるデータ項目の詳細な定義内容の例は,CSV形式ファイルで提供されています。このサンプルの提供先を次に示します。
サーバのSEWB+/REPOSITORY組み込み先パス名\SAMPLE\ODBCIN.CSV
なお,組み込み先パス名は,デフォルトでは次のように設定されています。システムドライブとは,Windows NT Server又はWindows 2000 Serverが組み込まれているドライブを指します。
- Windows NT Server 4.0又はWindows 2000 Serverの場合
システムドライブ:\Program Files\HITACHI\Sewb\REPOSITORY
- Windows NT Server 3.51の場合
システムドライブ:\Win32app\HITACHI\Sewb\REPOSITORY
(2) 生成規則
(a) 生成の概要
ODBC入力コマンドを使用すると,生成元のデータソースから結合項目の構成が生成され,データ項目辞書に格納されます。生成されるデータ項目の関係の例を,図4-6に示します。
図4-6 データソースから生成されるデータ項目の関係
データソースから生成されるデータ項目は,次の3種類に分類されます。
- データソースに対応するデータ項目
結合項目となります。一つのデータソースに対し,一つだけ生成されます。2.のデータ項目が,この結合項目の構成項目になります。
- 表に対応するデータ項目
結合項目(最上位結合項目)となります。データソース中の表に対応して,複数生成されます。3.のデータ項目が,この結合項目の構成項目になります。
- 列に対応するデータ項目
単項目※1又は結合項目となります。データ項目種別(単項目又は結合項目)は,列のSQLデータ型※2によって異なります。
- 注※1 単項目とは,構成項目を持たないデータ項目のことです。
- 注※2 ODBC SQLデータ型(SEWB+/REPOSITORYでは「ODBCタイプ」と呼びます)とは,ODBCで規定されるSQLデータ型のことです。ODBC SQLデータ型の詳細については,ODBCに接続するデータベースのマニュアルを参照してください。
(b) データソース,表,列から生成されるデータ項目の定義内容
(a)で説明した分類に従って,それぞれのデータ項目に生成される定義内容を表4-9に示します。
- データ項目名,標準名称,コメント,名前に設定される名称の文字数が,定義項目の上限値を超える場合,超えた部分が切り捨てられて生成されます。
- データソースの情報を使用するため,生成された言語別の名前が言語の規則(文字数や使用できる文字の種類など)に従っていない場合があります。生成後,リポジトリブラウザを使用して適切な名前に変更してください。
- 列に対応するデータ項目の種別,分類,けた数,小数部けた数,言語別のタイプは,列のODBCタイプで決まります。詳細な対応については,「(c) ODBC タイプマッピングの規則」を参照してください。
表4-9 データソースから生成されるデータ項目の定義内容
定義項目 データ項目の定義内容 データソースから生成 表から生成 列から生成 名称 データ項目名 データソース名 テーブル識別子 列識別子 標準名称 データソース名※1 テーブル識別子※1 列識別子※1 フリガナ − − − 属性 分類 結合データ 結合データ ODBCタイプに対応 けた数 − − ODBCタイプに対応 小数部けた数 − − ODBCタイプに対応 反復回数 − − − 付加
情報フィールド1〜20 − − − コメント − テーブルの説明 列の説明 言語別
詳細情報名前 データソース名※2 テーブル識別子※2 列識別子※2 タイプ − − ODBCタイプに対応 タイプ修飾情報※3 − − − 取りうる値 − − − 初期値 − − − 言語別フィールド − − − セキュリティ情報 所有者名 −※4 −※4 −※4 グループ名 −※5 −※5 −※5 アクセス権 −※6 −※6 −※6 (凡例)−:設定されない
注
- データソース名は,コマンド実行時に,引数に指定したデータソース名です。
- テーブル識別子は,表の名前を示す文字列です。
- テーブルの説明は,表を説明する文字列です。
- 列識別子は,列の名前を示す文字列です。
- 列の説明は,列を説明する文字列です。
- 注※1 コマンド実行時に,引数に指定した国語区分に対して設定されます。指定していない場合,すべての国語区分に同じ内容が設定されます。
- 注※2 すべての言語区分に同じ内容が設定されます。
- 注※3 言語区分「COBOL又はOOCOBOL」で定義する編集文字列,言語区分「IDL(CORBA)」で定義するシーケンスを指します。
- 注※4 コマンド実行時に,引数に指定した所有者名が設定されます。指定していない場合は,システム管理者が設定されます。
- 注※5 コマンド実行時に,引数に指定したグループ名が設定されます。指定していない場合は,システム管理者の所属するグループ名が設定されます。
- 注※6 新規に登録したデータ項目にはアクセス権の初期値が設定されます。初期値については「3.2.1 アクセス権の設定」を参照してください。なお,既存のデータ項目を更新した場合には,設定されているアクセス権は変更されません。
- データ項目種別
- 構造を持つ列は結合項目,構造を持たない列は単項目となります。
- 結合項目として生成される場合,構成項目も同時に生成され,そのデータ項目名には内容を表すサフィックスが付加されます。
- 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又は
OOCOBOLC又は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 − B※2
BU※2short※6
unsigned short※6SQL_INTEGER − B※2
BU※2long※7
unsigned long※7SQL_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※9SQL_BIGINT − B※2
BU※2フリー定義※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データべース
がHiRDBSQL_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タイプと言語別タイプの対応(IDL(CORBA),帳票定義,Java)
列の情報 データ項目の定義内容 ODBCタイプ 構成項目の
サフィックス言語別のタイプ IDL(CORBA) 帳票定義 Java SQL_CHAR − char C ※9 SQL_VARCHAR -length long I ※9 -char string C ※9 SQL_LONGVARCHAR -length long I ※9 -char string C ※9 SQL_DECIMAL − フリー定義※1 I※6
フリー定義※6※9 SQL_NUMERIC − フリー定義※1 I※7
B※7※9 SQL_SMALLINT − short※2
unsigned short※2I ※9 SQL_INTEGER − long※3
unsigned long※3I ※9 SQL_REAL − float I ※9 SQL_FLOAT − double B ※9 SQL_DOUBLE − double B ※9 SQL_BIT -filler octet フリー定義※8 ※9 -bit octet フリー定義※8 ※9 SQL_TINYINT − long※3
unsigned long※3I ※9 SQL_BIGINT − フリー定義※1 I ※9 SQL_BINARY − フリー定義※4 フリー定義※8 ※9 SQL_VARBINARY -length long I ※9 -bit フリー定義※4 フリー定義※8 ※9 SQL_LONGVARBINARY -length long I ※9 -bit フリー定義※4 フリー定義※8 ※9 SQL_DATE -year short I ※9 -month unsigned short I ※9 -day unsigned short I ※9 SQL_TIME -hour unsigned short I ※9 -minute unsigned short I ※9 -second unsigned short I ※9 SQL_TIMESTAMP -year short I ※9 -month unsigned short I ※9 -day unsigned short I ※9 -hour unsigned short I ※9 -minute unsigned short I ※9 -second unsigned short I ※9 -fraction unsigned long I ※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がサポートされていない場合
- 名称が同じ列に対するデータ項目が,一つのデータ項目に統合されます。この場合,属性が同じ列を除く列の名称は,入力する表全体で一意であることが前提になります。名称が同じ列が複数ある場合には,入力時に先に登録されたデータ項目に統合されます。
- このように,列の名称によって一つのデータ項目に統合されるため,データ項目名による更新入力を行う場合に,入力するデータ項目の名称を一意に保ちやすくなります。
- なお,列に別名が付けられている場合,主キーと外部キーで継承の関係が結べないため,独立したデータ項目として登録されます。この場合の例を次に示します。
All Rights Reserved, Copyright (C) 1996,2001, Hitachi, Ltd.