3.7.1 CREATE TABLE文の指定形式および規則
実表を定義します。
- 〈この項の構成〉
(1) 指定形式
CREATE TABLE文::= CREATE 〔FIX〕 TABLE 表名(表要素〔,表要素〕…) 〔IN DBエリア名〕 〔PCTFREE=未使用領域の比率〕※ 〔BRANCH ALL〕※ 〔チャンク指定〕※ 〔STORAGE FORMAT {ROW|COLUMN}〕※ 表要素::={列定義|表制約} 列定義::=列名 データ型 〔DEFAULT句〕 〔NOT NULL〕 〔BRANCH {YES|NO|AUTO}〕 〔圧縮方式指定〕 DEFAULT句::=DEFAULT 既定値選択肢 既定値選択肢::={定数|CURRENT_DATE|CURRENT_TIME〔(p)〕 |CURRENT_TIMESTAMP〔(p)〕|CURRENT_USER|NULL} 圧縮方式指定::=COMPRESSION TYPE {AUTO|NONE|RUNLENGTH|DICTIONARY|DELTA |DELTA_RUNLENGTH} 表制約::={一意性制約定義|参照制約定義} 一意性制約定義::=〔CONSTRAINT 制約名〕 PRIMARY KEY (列名 〔{ASC|DESC}〕 〔,列名 〔{ASC|DESC}〕〕…) 〔IN DBエリア名〕 〔PCTFREE=未使用領域の比率〕 参照制約定義::=〔CONSTRAINT 制約名〕 FOREIGN KEY (列名〔,列名〕…) REFERENCES 表名 DISABLE チャンク指定::=CHUNK〔=チャンク数の最大値〕 〔チャンクアーカイブ指定〕 チャンクアーカイブ指定::=ARCHIVABLE RANGECOLUMN=列名 〔RANGEINDEXNAME=インデクス識別子〕 〔IN DBエリア名〕 ARCHIVEDIR=アーカイブディレクトリ名
- 注※
-
PCTFREE,BRANCH ALL,チャンク指定,およびSTORAGE FORMATは,どの順序で指定してもかまいません。
- メモ
-
PCTFREE,BRANCH ALL,チャンク指定,およびSTORAGE FORMATをまとめて表オプションといいます。
ローストア表を定義するときに指定できるオプションと,カラムストア表を定義するときに指定できるオプションを次の表に示します。
項番 |
CREATE TABLEの各オプション |
ローストア表を定義する場合 |
カラムストア表を定義する場合 |
|
---|---|---|---|---|
1 |
FIX |
○ |
× |
|
2 |
表名 |
○ |
○ |
|
3 |
列定義 |
列名 |
○ |
○ |
4 |
データ型 |
○ |
○ |
|
5 |
DEFAULT句 |
○ |
○ |
|
6 |
NOT NULL |
○ |
○ |
|
7 |
BRANCH |
○ |
× |
|
8 |
圧縮方式指定 |
× |
○ |
|
9 |
表制約 |
○ |
○ |
|
10 |
IN DBエリア名 |
○ |
○ |
|
11 |
PCTFREE |
○ |
× |
|
12 |
BRANCH ALL |
○ |
× |
|
13 |
チャンク指定 |
チャンク数の最大値 |
○ |
○ |
14 |
チャンクアーカイブ指定 |
○ |
× |
|
15 |
STORAGE FORMAT |
○ |
○ |
- (凡例)
-
○:指定が必要なオプション,または指定を検討するオプションです。
×:指定できないオプションです。
(2) 指定形式の説明
各オプションの説明で,【ローストア表】と表記されているオプションは,ローストア表を定義するときに指定できるオプションです。【カラムストア表】と表記されているオプションは,カラムストア表を定義するときに指定できるオプションです。【共通】と表記されているオプションは,ローストア表およびカラムストア表共通のオプションです。
- 重要
-
表に配列型の列を定義する場合,その表はカラムストア表として定義する必要があります。
(a) FIX 【ローストア表】
行長が固定となる実表(FIX表)を定義します。
指定規則を次に示します。
-
FIXを指定した場合,この表に対して次に示すデータ型は指定できません。
-
VARCHAR
-
VARBINARY
-
-
FIXを指定した場合,実表のすべての列に非ナル値制約が設定されます。
-
FIX表に対してだけ,行単位(ROW指定)の参照,更新,挿入ができます。
-
アーカイブマルチチャンク表の場合,FIXは指定できません。
(b) 表名 【共通】
定義する実表の表名を指定します。すでに定義されている表と同じ表名は指定できません。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。
(c) 表要素 【共通】
表要素::={列定義|表制約}
表要素には,列定義または表制約のどちらかを指定します。
(d) 列定義 【共通】
列定義::=列名 データ型 〔DEFAULT句〕 〔NOT NULL〕 〔BRANCH {YES|NO|AUTO}〕 〔圧縮方式指定〕
実表を構成する各列の定義を指定します。列定義は1つ以上指定する必要があります。
- ●列名 【共通】
-
表を構成する列の列名を指定します。1つの表に同じ列名を指定できません。
なお,HADBによって自動的に設定される導出列名と重複する可能性があるため,列名にEXPnnnn_NO_NAMEを指定しないでください。nnnnは,0000~9999の符号なし整数です。
- ●データ型 【共通】
-
列のデータ型を指定します。指定できるデータ型を次の表に示します。
表3‒8 指定できるデータ型(CREATE TABLE文の場合) 項番
データ型
指定形式
1
INTEGER
INTまたはINTEGER
2
SMALLINT
SMALLINT
3
DECIMAL
DEC〔(m〔,n〕)〕またはDECIMAL〔(m〔,n〕)〕
m:精度(全体の桁数)
n:位取り(小数部の桁数)
mを省略すると38が仮定され,nを省略すると0が仮定されます。
4
NUMERIC※1
NUMERIC〔(m〔,n〕)〕
m:精度(全体の桁数)
n:位取り(小数部の桁数)
mを省略すると38が仮定され,nを省略すると0が仮定されます。
5
DOUBLE PRECISION
DOUBLEまたはDOUBLE PRECISION
6
FLOAT※2
FLOAT
7
CHARACTER
CHAR(n)またはCHARACTER(n)
n:文字列の長さ(バイト)
CHARまたはCHARACTERと指定した場合は,文字列の長さに1が仮定されます。
8
VARCHAR※3
VARCHAR(n)
n:文字列の最大長(バイト)
9
DATE
DATE
10
TIME
TIME(p)またはTIME
p:小数秒精度(小数秒の桁数)
pに指定できる値は,0,3,6,9,または12です。TIMEと指定した場合は,pに0が仮定されます。
11
TIMESTAMP
TIMESTAMP(p)またはTIMESTAMP
p:小数秒精度(小数秒の桁数)
pに指定できる値は,0,3,6,9,または12です。TIMESTAMPと指定した場合は,pに0が仮定されます。
12
BINARY
BINARY(n)
n:バイナリデータの長さ(バイト数)
BINARYと指定した場合は,バイナリデータの長さに1が仮定されます。
13
VARBINARY
VARBINARY(n)
n:バイナリデータの最大長(バイト数)
14
ARRAY※4
要素データ型 ARRAY[最大要素数]
- 要素データ型:
-
配列要素のデータ型を指定します。要素データ型には,数データ,文字データ,日時データ,またはバイナリデータのどれかのデータ型を指定します。要素データ型の指定形式は,項番1~13で説明している各データ型の指定形式の規則に従います。
- 最大要素数:
-
配列要素の最大数を指定します。最大要素数には,2~30,000の符号なし整数定数を指定してください。
<指定例>
-
要素データ型がCHAR(5)で,最大要素数が20の場合
CHAR(5) ARRAY[20]
-
要素データ型がINTEGERで,最大要素数が5の場合
INTEGER ARRAY[5]
- 注※1
-
NUMERIC型が指定された場合,HADBはデータ型にDECIMAL型が指定されたと見なします。
- 注※2
-
FLOAT型が指定された場合,HADBはデータ型にDOUBLE PRECISION型が指定されたと見なします。
- 注※3
-
列の定義長が32,000バイトを超えるVARCHAR型は指定できません。
- 注※4
-
配列型のデータ型です。配列型の列を定義する際の考慮点については,マニュアルHADB システム構築・運用ガイドの配列型の列の定義【カラムストア表】を参照してください。
- 重要
-
カラムストア表として定義する表に配列型の列を定義できます。ローストア表として定義する表には,配列型の列を定義できません。
データ型の詳細については,「6.2 データ型」を参照してください。
- ●DEFAULT句 【共通】
-
DEFAULT句::=DEFAULT 既定値選択肢 既定値選択肢::={定数|CURRENT_DATE|CURRENT_TIME〔(p)〕 |CURRENT_TIMESTAMP〔(p)〕|CURRENT_USER|NULL}
列の既定値を設定する場合にDEFAULT句を指定します。
DEFAULT句の指定形式,列の既定値については,「7.10 DEFAULT句」を参照してください。
- 重要
-
配列型の列にはDEFAULT句を指定できません。
- ●NOT NULL 【共通】
-
列に非ナル値制約(ナル値を許さない制約)を定義する場合に指定します。
非ナル値制約を指定する列には,DEFAULT句の既定値選択肢にNULLを指定できません。
- ●BRANCH {YES|NO|AUTO} 【ローストア表】
-
VARCHAR型またはVARBINARY型の列のデータの格納方法を指定します。
BRANCHにYESまたはNOを指定した方がよいケースについては,マニュアルHADB システム構築・運用ガイドの可変長データ型の列データの分岐指定(BRANCH)【ローストア表】を参照してください。
- YES:
-
指定したVARCHAR型またはVARBINARY型の列のデータを分岐します。
- NO:
-
指定したVARCHAR型またはVARBINARY型の列のデータを分岐しません。
- AUTO:
-
定義長が255バイト以下のVARCHAR型またはVARBINARY型の列のデータは分岐しません。定義長が256バイト以上の場合で,基本行が1ページに収まらないときは分岐します。
BRANCHの指定を省略した場合,AUTOが仮定されます。
なお,このオプションは,次に示す表および列には指定できません。
-
表オプションBRANCH ALLを指定した表
-
データ型がVARCHAR型またはVARBINARY型以外の列
- ●圧縮方式指定 【カラムストア表】
-
圧縮方式指定::=COMPRESSION TYPE {AUTO|NONE|RUNLENGTH|DICTIONARY|DELTA|DELTA_RUNLENGTH}
カラムストア表の列のデータを圧縮する方式(列データの圧縮方式)を指定します。カラムストア表の各列に対してこのオプションを指定します。
圧縮方式指定の指定を省略した場合,AUTOが仮定されます。
- AUTO:
-
カラムストア表のこの列のデータの圧縮方式を,HADBサーバが自動的に決定します。
- NONE:
-
カラムストア表のこの列のデータを圧縮しません。
- RUNLENGTH:
-
カラムストア表のこの列のデータをランレングス圧縮方式で圧縮します。
- DICTIONARY:
-
カラムストア表のこの列のデータを辞書圧縮方式で圧縮します。
- DELTA:
-
カラムストア表のこの列のデータを差分圧縮方式で圧縮します。
- DELTA_RUNLENGTH:
-
カラムストア表のこの列のデータを差分ランレングス圧縮方式で圧縮します。
各圧縮方式の詳細については,マニュアルHADB システム構築・運用ガイドのローストア表とカラムストア表の選択基準のカラムストア表の列データの圧縮方式を参照してください。
(e) 表制約 【共通】
表制約::={一意性制約定義|参照制約定義}
表制約には,一意性制約定義または参照制約定義を指定します。
(f) 一意性制約定義 【共通】
一意性制約定義::=〔CONSTRAINT 制約名〕 PRIMARY KEY (列名 〔{ASC|DESC}〕 〔,列名 〔{ASC|DESC}〕〕…) 〔IN DBエリア名〕 〔PCTFREE=未使用領域の比率〕
実表に主キーを定義する場合に指定します。主キーは,1つの表に1つだけ定義できます。
主キーを構成する列には,一意性制約と非ナル値制約が適用されます。一意性制約とは,列値(または複数の列の列値の組み合わせ)が重複することを許さない制約のことです。非ナル値制約とは,列値にナル値を許さない制約のことです。
表中の行を一意に識別できる列,または列の組み合わせ(候補キー)の中から主キーを選択してください。
- メモ
-
表中の行を一意に識別できる列,または列の組み合わせを候補キーといいます。
- 重要
-
配列型の列を定義している表には一意性制約を定義できません。
- ●CONSTRAINT 制約名 【共通】
-
ここで指定する一意性制約定義の制約名を指定します。制約名の指定規則については,「6.1.4 名前の指定」の「(2) 名前に使用できる文字の規則」を参照してください。
指定規則を次に示します。
-
同じ名称の制約名(参照制約定義の制約名も含む)が同一スキーマ内に存在する場合,CREATE TABLE文がエラーになります。
-
この指定を省略した場合,次の名称が制約名として仮定されます。
PRIMARY_nnnnnnnn
nnnnnnnn:主キーを定義する表の表IDを16進数に変換した8桁の文字列
仮定された制約名が,同一スキーマ内に存在する場合,CREATE TABLE文がエラーになります。そのため,制約名(参照制約定義の制約名も含む)およびインデクス識別子には,上記の形式に類似した名称を使用しないことを推奨します。
-
- ●列名 【共通】
-
主キーを構成する列の列名を指定します。指定規則を次に示します。
-
列名は,16個まで指定できます。
-
複数の列名を指定する場合は,同じ列名を指定できません。
CREATE TABLE文の実行時,列名に指定した列をインデクス構成列とするB-treeインデクスがユニークインデクスとして自動的に定義されます。定義されるB-treeインデクスの規則を次に示します。
-
列名を1つだけ指定した場合は,単一列インデクスが定義されます。
-
複数の列名を指定した場合は,複数列インデクスが定義されます。
-
インデクス識別子は制約名と同じになります。
-
制約名と同じ名称のインデクス識別子が同一スキーマ内に存在する場合,CREATE TABLE文がエラーになります。
- メモ
-
自動的に定義されたB-treeインデクスは,CREATE INDEX文で定義したB-treeインデクスと同じ規則が適用されます。
-
- ●{ASC|DESC} 【共通】
-
主キーに対応するB-treeインデクスのキー値の並び順を指定します。
- ASC:
-
主キーに対応するB-treeインデクスのキー値を昇順に並べる場合に指定します。
- DESC:
-
主キーに対応するB-treeインデクスのキー値を降順に並べる場合に指定します。
なお,単一列インデクスに対してDESCを指定しても無視されます。単一列インデクスのキー値は,常に昇順に並べられます(ASCが指定されたと仮定されます)。
ASCおよびDESCの指定を省略した場合,ASCが仮定されます。
- ●IN DBエリア名 【共通】
-
主キーに対応するB-treeインデクスを格納するDBエリアのDBエリア名を指定します。
「IN DBエリア名」の指定を省略した場合,サーバ定義のadb_sql_default_dbarea_sharedオペランドに指定したDBエリアに,主キーに対応するB-treeインデクスが格納されます。
なお,次のどちらかの条件を満たす場合に,「IN DBエリア名」の指定を省略すると,CREATE TABLE文がエラーになります。
-
サーバ定義のadb_sql_default_dbarea_sharedオペランドの指定を省略している場合
-
サーバ定義のadb_sql_default_dbarea_sharedオペランドに,存在しないDBエリアを指定している場合,またはデータ用DBエリア以外のDBエリアを指定している場合
-
- ●PCTFREE=未使用領域の比率 【共通】
-
〜〈符号なし整数〉((0〜99))《30》(単位:%)
主キーに対応するB-treeインデクスのインデクスページ内の未使用領域の比率を指定します。0〜99(単位:%)を指定します。省略すると,30%が仮定されます。
データがインポートされて主キーに対応するB-treeインデクスが作成される際,または主キーに対応するB-treeインデクスが再作成される際,ここで指定した未使用領域の比率に従ってB-treeインデクスのデータが格納されます。
インデクスページ内の未使用領域の比率の目安については,マニュアルHADB システム構築・運用ガイドのB-treeインデクスのインデクスページ内の未使用領域の確保(PCTFREE),またはテキストインデクスのインデクスページ内の未使用領域の確保(PCTFREE)を参照してください。
(g) 参照制約定義 【共通】
参照制約定義::=〔CONSTRAINT 制約名〕 FOREIGN KEY (列名〔,列名〕…) REFERENCES 表名 DISABLE
実表に参照制約(外部キー)を定義する場合に指定します。ほかの表の主キーを参照する列(または複数の列の組)を外部キーとして定義できます。
外部キーを定義する利点については,マニュアルHADB システム構築・運用ガイドの外部キーの指定(FOREIGN KEY)を参照してください。
- メモ
-
外部キーを構成する列と,主キーを構成する列は,次のすべての項目を同じにする必要があります。
-
構成列の列数
-
構成列の各列のデータ型
-
構成列の各列のデータ長
-
指定規則を次に示します。
-
1つの表に対して外部キーを最大255個定義できます。
-
1つの主キーを参照する外部キーは,最大255個定義できます。
-
同じ外部キーから,同じ主キーを参照する参照制約を複数定義することはできません。なお,ここでいう同じ外部キーとは,次の条件を満たす外部キーのことです。
-
外部キーを構成する列が同じである
複数の列で外部キーを構成する場合,外部キーを定義するときの列の順番が異なっていても同じ外部キーと見なされます。
-
- ●CONSTRAINT 制約名 【共通】
-
ここで指定する参照制約定義の制約名を指定します。制約名の指定規則については,「6.1.4 名前の指定」の「(2) 名前に使用できる文字の規則」を参照してください。
指定規則を次に示します。
-
同じ名称の制約名(一意性制約定義の制約名も含む)が同一スキーマ内に存在する場合,CREATE TABLE文がエラーになります。
-
この指定を省略した場合,次の名称が制約名として仮定されます。
FOREIGN_nnnnnnnn_YYYYMMDDhhmmssth
nnnnnnnn:外部キーを定義する表の表IDを16進数に変換した8桁の文字列
YYYYMMDDhhmmssth:外部キーを定義したときのタイムスタンプ(100分の1秒まで出力)
仮定された制約名が,同一スキーマ内に存在する場合,CREATE TABLE文がエラーになります。そのため,制約名(一意性制約定義の制約名も含む)には,上記の形式に類似した名称を使用しないことを推奨します。
-
- ●列名 【共通】
-
外部キーを構成する列の列名を指定します。
指定規則を次に示します。
-
列名は,16個まで指定できます。
-
複数の列名を指定する場合,同じ列名を指定できません。
-
- ●表名 【共通】
-
被参照表(主キーを定義した実表)の表名を指定します。
指定規則を次に示します。
-
外部キーを定義する表自身を被参照表にすることはできません。
-
- ●DISABLE 【共通】
-
このオプション(参照制約チェック抑止指定)を指定すると,外部キーによる参照制約のチェックを行いません。
このオプションは必ず指定してください。指定しないと,CREATE TABLE文がエラーになります。
(h) IN DBエリア名 【共通】
表を格納するDBエリアのDBエリア名を指定します。
「IN DBエリア名」の指定を省略した場合,サーバ定義のadb_sql_default_dbarea_sharedオペランドに指定したDBエリアに,表が格納されます。
注意事項を次に示します。
-
次のどちらかの条件を満たす場合に,「IN DBエリア名」の指定を省略すると,CREATE TABLE文がエラーになります。
-
サーバ定義のadb_sql_default_dbarea_sharedオペランドの指定を省略している場合
-
サーバ定義のadb_sql_default_dbarea_sharedオペランドに,存在しないDBエリアを指定している場合,またはデータ用DBエリア以外のDBエリアを指定している場合
-
-
配列型の列を定義した表は,ページサイズが4,096バイトのデータ用DBエリアには格納できません。
-
配列型の列を定義した表を格納するデータ用DBエリアの1セグメントの容量は,次の条件を満たすようにしてください。
1セグメントの容量(単位:バイト)≧ARRAY_ROWSZ(配列型の列を定義した表の行長)
1セグメントの容量は,adbinitコマンドまたはadbmodareaコマンドの-sオプションで指定します。
ARRAY_ROWSZの求め方については,マニュアルHADB システム構築・運用ガイドの行の種別ごとの格納ページ数の求め方の配列型の列を定義した表の行長(変数ARRAY_ROWSZ)の求め方を参照してください。
(i) PCTFREE=未使用領域の比率 【ローストア表】
〜〈符号なし整数〉((0〜99))《30》(単位:%)
データページ(表のデータを格納するページ)内の未使用領域の比率を指定します。0〜99(単位:%)を指定します。省略すると,30%が仮定されます。
データがインポートされる際,ここで指定した未使用領域の比率に従って表のデータが格納されます。
なお,INSERT文による行の追加,またはUPDATE文による行の更新時には,ここで指定した未使用領域の比率は適用されません(未使用領域に追加データまたは更新後のデータが格納されます)。
データページ内の未使用領域の比率の目安については,マニュアルHADB システム構築・運用ガイドのデータページ内の未使用領域の確保(PCTFREE)【ローストア表】を参照してください。
なお,PCTFREEは複数回指定できません。
(j) BRANCH ALL 【ローストア表】
表に定義したすべてのVARCHAR型およびVARBINARY型の列のデータを分岐します。
BRANCH ALLを指定した方がよいケースについては,マニュアルHADB システム構築・運用ガイドの可変長データ型の列データの分岐指定(BRANCH)【ローストア表】を参照してください。
なお,FIXを指定した場合は,BRANCH ALLを指定できません。
(k) チャンク指定 【共通】
チャンク指定::=CHUNK〔=チャンク数の最大値〕 〔チャンクアーカイブ指定〕 チャンクアーカイブ指定::=ARCHIVABLE RANGECOLUMN=列名 〔RANGEINDEXNAME=インデクス識別子〕 〔IN DBエリア名〕 ARCHIVEDIR=アーカイブディレクトリ名
定義する実表をマルチチャンク表とする場合に指定します。
マルチチャンク表の設計については,マニュアルHADB システム構築・運用ガイドのマルチチャンク表を定義する場合の考慮点を参照してください。
マルチチャンク表の種類と使用できる機能の関係を次の表に示します。
機能名 |
マルチチャンク表の種類 |
|
---|---|---|
レギュラーマルチチャンク表 |
アーカイブマルチチャンク表 |
|
バックグラウンドインポート機能 |
○ |
○ |
PURGE CHUNK文によるチャンク内の全行削除 |
○ |
○ |
チャンクアーカイブ機能 |
× |
○ |
- (凡例)
-
○:使用できます。
×:使用できません。
バックグラウンドインポート機能およびチャンクアーカイブ機能については,マニュアルHADB システム構築・運用ガイドのバックグラウンドインポート機能およびチャンクアーカイブ機能(チャンク内のデータの圧縮)を参照してください。
- ●CHUNK〔=チャンク数の最大値〕 【共通】
-
〜〈符号なし整数〉((2〜30,000))《256》(単位:個)
マルチチャンク表のチャンク数の最大値を指定します。CHUNKだけを指定して,チャンク数の最大値を省略した場合,チャンク数の最大値に256が仮定されます。
レギュラーマルチチャンク表を定義する場合は,「CHUNK=チャンク数の最大値」だけを指定してください。
アーカイブマルチチャンク表を定義する場合は,「CHUNK=チャンク数の最大値」および次に説明するチャンクアーカイブ指定を指定してください。
- ●チャンクアーカイブ指定 【ローストア表】
-
チャンクアーカイブ指定::=ARCHIVABLE RANGECOLUMN=列名 〔RANGEINDEXNAME=インデクス識別子〕 〔IN DBエリア名〕 ARCHIVEDIR=アーカイブディレクトリ名
定義する実表をアーカイブマルチチャンク表とする場合に指定します。
- ●RANGECOLUMN=列名
-
列名を指定します。ここで指定した列が,アーカイブレンジ列になります。
次に示すデータ型の列は,アーカイブレンジ列にできません。
-
定義長が33バイト以上のCHARACTER型
-
VARCHAR型
-
BINARY型
-
VARBINARY型
なお,アーカイブレンジ列には,非ナル値制約が設定されます。
-
- ●RANGEINDEXNAME=インデクス識別子
-
CREATE TABLE文の実行時,アーカイブレンジ列をインデクス構成列とするレンジインデクスが,HADBサーバによって自動的に定義されます。このレンジインデクスに付けるインデクス識別子を指定します。
RANGEINDEXNAMEの指定を省略した場合,HADBサーバが次の規則に従ってインデクス識別子を決定します。
ARCHIVE_RANGE_INDEX_nnnnnnnn
nnnnnnnnは,アーカイブマルチチャンク表の表IDを16進数に変換した8桁の文字列です。
上記の規則に従って決定されたインデクス識別子が,同一スキーマ内に存在する場合,CREATE TABLE文がエラーになります。そのため,CREATE INDEX文でインデクスを定義する際は,上記の形式に類似した名称を使用しないことを推奨します。
- メモ
-
自動的に定義されたレンジインデクスは,CREATE INDEX文で定義したレンジインデクスと同じ規則が適用されます。
- ●IN DBエリア名
-
自動的に定義されたレンジインデクスを格納するDBエリアの名称を指定します。
「IN DBエリア名」の指定を省略した場合,サーバ定義のadb_sql_default_dbarea_sharedオペランドに指定したDBエリアに,自動的に定義されたレンジインデクスが格納されます。
なお,次のどちらかの条件を満たす場合に,「IN DBエリア名」の指定を省略すると,CREATE TABLE文がエラーになります。
-
サーバ定義のadb_sql_default_dbarea_sharedオペランドの指定を省略している場合
-
サーバ定義のadb_sql_default_dbarea_sharedオペランドに,存在しないDBエリアを指定している場合
-
- ●ARCHIVEDIR=アーカイブディレクトリ名
-
アーカイブファイルを格納するアーカイブディレクトリの名称を絶対パスで指定します。
指定規則を次に示します。
-
アーカイブディレクトリ名は,文字列定数の形式で指定してください。文字列定数については,「6.3 定数」を参照してください。
-
アーカイブディレクトリには,存在するディレクトリを指定してください。また,HADB管理者に対して,読み取り権限,書き込み権限,および実行権限を与えたディレクトリを指定してください。
さらに,アーカイブディレクトリのパスに含まれるすべてのディレクトリに,HADB管理者に対する実行権限を付与してください。
(例)アーカイブディレクトリが,/HADB/archiveの場合
/HADB/archiveには,読み取り権限,書き込み権限,および実行権限が必要です。
/,および/HADBには,実行権限が必要です。
-
次のディレクトリは,アーカイブディレクトリにできません。
・サーバディレクトリ
・サーバディレクトリの下位のディレクトリ
・下位のディレクトリにサーバディレクトリがあるディレクトリ
・DBディレクトリ
・DBディレクトリの下位のディレクトリ
・下位のディレクトリにDBディレクトリがあるディレクトリ
・ルートディレクトリ
DBディレクトリが/HADB/dbの場合,アーカイブディレクトリにできるディレクトリの例と,できないディレクトリの例を次に示します。
アーカイブディレクトリの例
理由
アーカイブディレクトリにできるディレクトリの例
/HADB/archive
なし。
アーカイブディレクトリにできないディレクトリの例
/HADB/db
左記のディレクトリは,DBディレクトリと同一のため,アーカイブディレクトリにできません。
/HADB/db/archive
左記のディレクトリは,DBディレクトリの下位のディレクトリのため,アーカイブディレクトリにできません。
/HADB
左記のディレクトリは,下位のディレクトリにDBディレクトリがあるため,アーカイブディレクトリにできません。
-
HADBサーバのインストール時にインストールデータを格納したディレクトリを,アーカイブディレクトリに指定しないようにしてください。
-
アーカイブディレクトリ名は,前後の空白を除いて1〜400バイトの長さにしてください。
- メモ
-
アーカイブディレクトリ名の前後に空白がある場合,その空白は取り除かれて処理されます(空白が取り除かれた名称が仮定されます)。
-
アーカイブディレクトリ名のパスに含まれる各要素は,NAME_MAXバイト以下になるようにしてください。NAME_MAXの値は,ご利用の環境によって異なります。
アーカイブディレクトリ名にシンボリックリンクを指定した場合,シンボリックリンクを解決したあとの絶対パス名が,ここで説明している規則に従っているかどうかがチェックされます。
[マルチノード機能]
マルチノード機能を使用している場合は,次のことに注意してください。
-
アーカイブディレクトリは,NFSなどを使用して全ノードで共有してください。また,CREATE TABLE文の実行時点で,全ノードで共有されている必要があります。
-
CREATE TABLE文の実行時,ここで説明しているアーカイブディレクトリ名の指定規則のチェックが,プライマリノードで実行されます。セカンダリノードでは,チェックは行われません。そのため,CREATE TABLE文の実行後,セカンダリノードでアーカイブディレクトリ名のチェックを行ってください。
-
- ■アーカイブマルチチャンク表を定義したときに定義されるロケーション表について
-
CREATE TABLE文を実行してアーカイブマルチチャンク表を定義した場合,ロケーション表とロケーション表のインデクスがHADBサーバによって自動的に定義されます。この,ロケーション表とロケーション表のインデクスは,HADBサーバが使用します。そのため,ロケーション表とロケーション表のインデクスをユーザが直接操作したり,定義変更したり,または削除したりすることはできません。ロケーション表については,マニュアルHADB システム構築・運用ガイドのアーカイブマルチチャンク表の検索を参照してください。
ロケーション表,およびロケーション表のインデクスは,アーカイブマルチチャンク表と同じDBエリア内に格納されます。
ロケーション表およびロケーション表のインデクスの名称は,次の表で説明している規則に従って決定されます。
表3‒10 ロケーション表およびロケーション表のインデクスの名称規則 種別
名称規則
インデクスが管理する情報
インデクス構成列
ロケーション表
"HADB"."LOCATION_TABLE_nnnnnnnn"
−
−
ロケーション表のインデクス
"HADB"."LOCATION_INDEX_nnnnnnnn_CHUNK_ID"
アーカイブファイルに対応するチャンクのチャンクIDを管理しています。
CHUNK_ID
"HADB"."LOCATION_INDEX_nnnnnnnn_RANGE_01"
アーカイブファイルに格納されているデータのアーカイブレンジ列の値の範囲(上限値と下限値)を管理しています。
-
RANGE_MAX
-
RANGE_MIN
"HADB"."LOCATION_INDEX_nnnnnnnn_RANGE_02"
アーカイブファイルに格納されているデータのアーカイブレンジ列の値の下限値を管理しています。
RANGE_MIN
- (凡例)
-
−:該当しません。
- 注
-
nnnnnnnnは,アーカイブマルチチャンク表の表IDを16進数に変換した8桁の文字列です。
ロケーション表,およびロケーション表のインデクスのスキーマ名はHADBです。
-
(l) STORAGE FORMAT {ROW|COLUMN} 【共通】
定義する表の表データの格納形式を指定します。
- ROW:
-
表データの格納形式がローストア形式の表を定義する場合に指定します。ROWを指定した場合,表はローストア表として定義されます。
- COLUMN:
-
表データの格納形式がカラムストア形式の表を定義する場合に指定します。COLUMNを指定した場合,表はカラムストア表として定義されます。
STORAGE FORMATの指定を省略した場合,ROWが仮定されます。
- メモ
-
-
ローストア表,ローストア形式,カラムストア表,カラムストア形式については,マニュアルHADB システム構築・運用ガイドのローストア表とカラムストア表を参照してください。
-
このオプションの指定を,表格納形式指定といいます。
-
(3) 実行時に必要な権限
CREATE TABLE文を実行する場合,CONNECT権限およびスキーマ定義権限が必要になります。
また,参照制約(外部キー)を定義する場合は,被参照表に対するREFERENCES権限が必要になります。
(4) 規則
-
自分(HADBサーバに接続中の認可識別子のHADBユーザ)が所有するスキーマに対してだけ実表を定義できます。ほかのHADBユーザが所有するスキーマに対しては実表を定義できません。
-
システム内で合計4,096個(ディクショナリ表(実表)およびシステム表(実表)は除く)まで実表を定義できます。
-
1つのDBエリアに格納できる実表は200個までです。
-
1つの表に対して1,000個まで列を定義できます。
-
実表の列の長さの合計(行長)が,次に示す条件式を満たすように列を定義してください。
-
実表がローストア表の場合
ROWSZ(行長)≦ページサイズ−56
-
実表がカラムストア表の場合
ROWSZ(行長)≦ページサイズ−80
ROWSZ(行長)を求める計算式については,マニュアルHADB システム構築・運用ガイドの行の種別ごとの格納ページ数の求め方を参照してください。
-
-
チャンク指定をした場合,主キーを定義することはできません。また,主キーを定義した場合,チャンク指定はできません。
-
B-treeインデクスを定義できない列には,主キーを定義することはできません。
-
主キーを定義する場合,次の条件を満たす必要があります。次の条件を満たさない場合は,主キーを定義できません。
-
主キーを構成する列が1列の場合
主キーを構成する列の定義長※1≦MIN{(a÷3)−128,4036} (単位:バイト)
-
主キーを構成する列が2列以上の場合
主キーを構成する列の定義長の合計※2≦MIN{(a÷3)−128,4036} (単位:バイト)
a:主キーに対応するB-treeインデクスを格納するDBエリアのページサイズ
- 注※1
-
列の定義長については,「表3‒5 単一列インデクスを構成する列の長さ」を参照してください。
- 注※2
-
各列の定義長については,「表3‒6 複数列インデクスを構成する列の長さ」を参照して,主キーを構成する列の定義長の合計を求めてください。
-
-
トランザクションの開始後に定義された表を,そのトランザクションからアクセスすることはできません。
(5) 例題
例題1~例題6は,ローストア表の定義例です。例題7~例題8は,カラムストア表の定義例です。
- 例題1(FIX表でない実表を定義する場合)
-
店舗表(SHOPSLIST)を定義します。店舗表の列構成と未使用領域の比率などは,次のとおりとします。
-
店舗コード(SHOP_CODE):CHAR(8)
-
地域コード(RGN_CODE):CHAR(6)
-
店舗名(SHOP_NAME):VARCHAR(20)
-
店舗電話番号(TEL_NO):CHAR(10)
-
店舗住所(ADDRESS):VARCHAR(300)
-
すべての列に非ナル値制約を定義する
-
店舗住所(ADDRESS)の列のデータを分岐して格納する
-
店舗表をDBエリア(DBAREA01)に格納する
-
データページ内の未使用領域の比率を40%とする
-
チャンク数の最大値を100とする
CREATE TABLE "SHOPSLIST" ("SHOP_CODE" CHAR(8) NOT NULL, "RGN_CODE" CHAR(6) NOT NULL, "SHOP_NAME" VARCHAR(20) NOT NULL, "TEL_NO" CHAR(10) NOT NULL, "ADDRESS" VARCHAR(300) NOT NULL BRANCH YES) IN "DBAREA01" PCTFREE=40 CHUNK=100
-
- 例題2(FIX表を定義する場合)
-
販売履歴表(SALESLIST)を定義します。販売履歴表の列構成と未使用領域の比率などは,次のとおりとします。
-
顧客ID(USERID):CHAR(6)
-
商品コード(PUR-CODE):CHAR(4)
-
販売個数(PUR-NUM):SMALLINT
-
購入日(PUR-DATE):DATE
-
購入日(PUR-DATE)列にDEFAULT句を指定して,列の既定値を設定する
-
販売履歴表をDBエリア(DBAREA01)に格納する
-
データページ内の未使用領域の比率を20%とする
-
行長が固定のため,FIXを指定する
-
チャンク数の最大値を200とする
CREATE FIX TABLE "SALESLIST" ("USERID" CHAR(6), "PUR-CODE" CHAR(4), "PUR-NUM" SMALLINT, "PUR-DATE" DATE DEFAULT CURRENT_DATE) IN "DBAREA01" PCTFREE=20 CHUNK=200
-
- 例題3(主キーを定義した実表を定義する場合)
-
販売履歴表(SALESLIST)を定義します。販売履歴表の列構成と未使用領域の比率などは,次のとおりとします。
-
顧客ID(USERID):CHAR(6)
-
商品コード(PUR-CODE):CHAR(4)
-
販売個数(PUR-NUM):SMALLINT
-
購入日(PUR-DATE):DATE
-
販売履歴表をDBエリア(DBAREA01)に格納する
-
データページ内の未使用領域の比率を20%とする
-
行長が固定のため,FIXを指定する
-
主キーを定義する(顧客ID列(USERID)を主キーの構成列とする)
-
主キーに対応するB-treeインデクスをDBエリア(DBAREA02)に格納する
-
主キーに対応するB-treeインデクスのインデクスページ内の未使用領域の比率を20パーセントとする
CREATE FIX TABLE "SALESLIST" ("USERID" CHAR(6), "PUR-CODE" CHAR(4), "PUR-NUM" SMALLINT, "PUR-DATE" DATE, CONSTRAINT "PK-USERID" PRIMARY KEY ("USERID" ASC) IN "DBAREA02" PCTFREE=20) IN "DBAREA01" PCTFREE=20
下線部分が主キーの定義(一意性制約定義)の指定です。
-
- 例題4(主キーを定義した実表を定義する場合)
-
店舗表(SHOPSLIST)を定義します。店舗表の列構成と未使用領域の比率などは,次のとおりとします。
-
店舗コード(SHOP_CODE):CHAR(8)
-
地域コード(RGN_CODE):CHAR(6)
-
店舗名(SHOP_NAME):VARCHAR(20)
-
店舗電話番号(TEL_NO):CHAR(10)
-
店舗住所(ADDRESS):VARCHAR(300)
-
店舗住所(ADDRESS)の列のデータを分岐して格納する
-
店舗表をDBエリア(DBAREA01)に格納する
-
データページ内の未使用領域の比率を40%とする
-
主キーを定義する(店舗コード列(SHOP_CODE)および地域コード列(RGN_CODE)を主キーの構成列とする)
-
主キーに対応するB-treeインデクスをDBエリア(DBAREA02)に格納する
-
主キーに対応するB-treeインデクスのインデクスページ内の未使用領域の比率を20パーセントとする
CREATE TABLE "SHOPSLIST" ("SHOP_CODE" CHAR(8), "RGN_CODE" CHAR(6), "SHOP_NAME" VARCHAR(20), "TEL_NO" CHAR(10), "ADDRESS" VARCHAR(300) BRANCH YES, CONSTRAINT "PK-CODE" PRIMARY KEY ("SHOP_CODE" ASC,"RGN_CODE" ASC) IN "DBAREA02" PCTFREE=20) IN "DBAREA01" PCTFREE=40
下線部分が主キーの定義(一意性制約定義)の指定です。
-
- 例題5(外部キーを定義した実表を定義する場合)
-
店舗表(SHOPSLIST)および従業員表(EMPLOYEE)を定義します。主キーおよび外部キーの定義は,次のとおりとします。
-
店舗表(SHOPSLIST)に主キーを定義します。主キーを構成する列は,店舗表(SHOPSLIST)のSHOP_CODE列およびRGN_CODE列です。
-
従業員表(EMPLOYEE)に外部キーを定義します。外部キーを構成する列は,従業員表(EMPLOYEE)のSHOP_CODE列およびRGN_CODE列です。
■店舗表(SHOPSLIST)
CREATE TABLE "SHOPSLIST" ("SHOP_CODE" CHAR(8), "RGN_CODE" CHAR(6), "SHOP_NAME" VARCHAR(20), "TEL_NO" CHAR(10), "ADDRESS" VARCHAR(300) BRANCH YES, CONSTRAINT "PK-CODE" PRIMARY KEY ("SHOP_CODE" ASC,"RGN_CODE" ASC) IN "DBAREA02" PCTFREE=20) IN "DBAREA01" PCTFREE=40
下線部分が主キーの定義の指定です。
■従業員表(EMPLOYEE)
CREATE TABLE "EMPLOYEE" ("EMPLOYEE_CODE" CHAR(8), "FIRST_NAME" VARCHAR(8), "FIRST_NAME_YOMI" VARCHAR(16), "FAMILY_NAME" VARCHAR(8), "FAMILY_NAME_YOMI" VARCHAR(16), "SHOP_CODE" CHAR(8), "RGN_CODE" CHAR(6), "EMPLOYEE_TYPE" CHAR(1), "TEL_NO" CHAR(10), "ADDRESS" VARCHAR(300) BRANCH YES, CONSTRAINT "PK-EMPLOYEE_CODE" PRIMARY KEY ("EMPLOYEE_CODE" ASC) IN "DBAREA02" PCTFREE=20, CONSTRAINT "FK-SHOP_CODE" FOREIGN KEY ("SHOP_CODE","RGN_CODE") REFERENCES "SHOPSLIST" DISABLE) IN "DBAREA01" PCTFREE=40
下線部分が外部キーの定義(参照制約定義)の指定です。
-
- 例題6(アーカイブマルチチャンク表を定義する場合)
-
レシート表(RECEIPT)をアーカイブマルチチャンク表として定義します。チャンクに関する指定は,次のとおりとします。
-
チャンク数の最大値を120とする
-
RECORD_DAY列をアーカイブレンジ列とする
-
/mnt/nfs/archivedirをアーカイブディレクトリとする
CREATE TABLE "RECEIPT" ("RID" INTEGER, "SHOP_CODE" CHAR(8), "RGN_CODE" CHAR(6), "EMPLOYEE_CODE" CHAR(8), "CUSTOMER_CODE" CHAR(8), "RECORD_DAY" DATE, "ITEM_CODE" CHAR(8), "ITEM_PRICE" INTEGER) IN "DBAREA01" PCTFREE=30 CHUNK=120 ARCHIVABLE RANGECOLUMN="RECORD_DAY" IN "DBAREA02" ARCHIVEDIR='/mnt/nfs/archivedir'
下線部分がアーカイブマルチチャンク表固有の指定です。
-
- 例題7(カラムストア表を定義する場合)
-
レシート表(RECEIPT)をカラムストア表として定義します。
CREATE TABLE "RECEIPT" ("RID" INTEGER, "SHOP_CODE" CHAR(8), "RGN_CODE" CHAR(6), "EMPLOYEE_CODE" CHAR(8), "CUSTOMER_CODE" CHAR(8), "RECORD_DAY" DATE, "ITEM_CODE" CHAR(8), "ITEM_PRICE" INTEGER) IN "DBAREA01" CHUNK=120 STORAGE FORMAT COLUMN
下線部分がカラムストア表固有の指定です。
- 例題8(配列型の列を定義した表を定義する場合)
-
配列型の列を定義したレシート表(RECEIPT)を定義します。
CREATE TABLE "RECEIPT" ("RID" INTEGER, "SHOP_CODE" CHAR(8), "AREA_CODE" CHAR(6), "EMPLOYEE_CODE" CHAR(8), "CUSTOMER_CODE" CHAR(8), "RECORD_DAY" DATE, "ITEM_CODE" CHAR(8) ARRAY[20], ...1 "ITEM_PRICE" INTEGER) IN "DBAREA01" CHUNK=120 STORAGE FORMAT COLUMN ...2
[説明]
-
商品コード列(ITEM_CODE)を配列型の列として定義します。要素データ型をCHAR(8),最大要素数を20とします。
-
配列型の列を定義した表は,カラムストア表として定義する必要があります。
-