Symfoware(R) Server RDBユーザーズガイド データベース定義編 - FUJITSU -
目次 索引 前ページ次ページ

上へ第2章 データベースの作成
上へ2.7 格納構造の定義

2.7.4 表のDSI定義

表のDSIの定義は、CREATE DSIを使用して行います。表のDSI定は、表のDSO定義に従ってデータベーススペースの割付けを行います。

以下に表のDSI定義の例を示します。

表のDSI定義

■DSI

DSI名は、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。なお、DSI名は、データベース内で一意です。

■DSO名

CREATE DSO文で指定した表のDSO名を指定します。

表の分割運用を行わない場合は、1つのDSO定義に対して1つのDSIだけを定義します。一方、表の分割運用を行う場合、分割キー値を指定した複数個のDSI定義が必要となります。表の分割運用を行う場合のDSI定義では、存在するデータをすべて網羅するだけのDSI定義が必要です。

■分割キー

表の分割運用を行う場合に、分割条件の具体的な値を指定します。

分割キー値は、表のDSO定義の分割条件に指定した仮値リストの“?”に対する値を、定数で指定します。分割条件に複数の“?”が存在する場合には、その出現順序にあわせて、定数をコンマで区切り指定します。分割条件に指定した“?”の個数と、定数の個数は同じでなければなりません。

ある行(データ)の格納先が、複数のDSIとなるような分割キー値の指定はできません。

分割条件にBETWEENで複数の列を指定した場合、DSIで指定する分割値は複数列の値を連結して1の値として評価します。

分割条件が(年度,月) BETWEEN (?,?) AND (?,?)で、DSIの分割値に(2002,4,2003,3)を指定した場合、このDSIのデータ格納範囲は以下となります。例えば、(2002,12)は範囲内のデータとなります。
2002年4月2003年3月 

“年度”と“月”を連結して“年月”として評価します。

image

例えば、分割条件として(支店コード,製品番号) BETWEEN (?,?) AND (?,?)を指定しても、DSIのデータ格納範囲として“支店コードの範囲 かつ 製品番号の範囲”とはならないので注意してください。

image

分割キー値に指定可能な定数の記述形式を表:分割キー値に指定可能な定数の記述形式に示します。

[表:分割キー値に指定可能な定数の記述形]

対応する列の属性

分割キー値に指定可能な定数の記述形式

SMALLINT

-32768〜32767(小数点なし)

INTEGER

-2147483648〜2147483647(小数点なし)

NUMERIC(p,q)

整数部(小数点の左側)の数字の数はp-q以下
小数部(小数点の右側)の数字の数はq以下
(注)

DECIMAL(p,q)

CHARACTER(n)

文字数がn以下の文字列定数

NATIONAL CHARACTER(n)

文字数がn以下の日本語文字列定数

DATE

年から日までの10文字の日付

TIME

時から秒までの8文字の時刻

TIMESTAMP

年から秒までの19文字の時刻印

INTERVAL 開始日時フィールド TO 終了日時フィールド

各フィールドの指定により、年〜月、日〜時刻の時間隔を格納(詳細は“表:分割キー値に指定可能な時間隔型の記述形式”を参照)

n : 文字数
p : 精度
q : 位取り

注)定数が小数点を含まない場合はすべて整数部となります。

[表:分割キーに指定可能な時間隔の記述形式]

型種類

開始日時フィールド

終了日時フィールド

指定の意味

年・月型

YEAR(p)

桁数pの年を表す時間隔

MONTH

桁数pの年と月を表す時間隔

MONTH(p)

桁数pの月を表す時間隔

日・時型

DAY(p)

SECOND

桁数pの日と時間から秒を表す時間隔

MINUTE

桁数pの日と時間から分を表す時間隔

HOUR

桁数pの日と時間を表す時間隔

桁数pの日を表す時間隔

HOUR(p)

SECOND

桁数pの時間と分から秒を表す時間隔

MINUTE

桁数pの時間と分を表す時間隔

桁数pの時間を表す時間隔

MINUTE(p)

SECOND

桁数pの分と秒を表す時間隔

桁数pの分を表す時間隔

SECOND(p)

桁数pの秒を表す時間隔

p : 開始日時フィールドの精度(1〜9の整数を指定)

■スペース割付

表のDSIに対して物理的なスペースの割付けを指定します。

データを物理的に格納するデータベーススペース名、およびデータベーススペース中に、このDSI用に獲得する格納領域の大きさを指定します。獲得された格納領域は、DSO定義で指定されたページ長によりアクセスされます。

■データベーススペース名

実際にデータを格納する、物理的なデータベーススペース名を指定します。

スケーラブルログ運を行う場合、データを複数のデータベーススペースに格納するときは、同じロググループ内のデータベーススペース名を指定します。スケーラブルログ運用は、Symfoware Server Enterprise Extended EditionおよびSymfoware Server Enterprise Editionで使用できます。

■割付け

割付け量には、データベーススペース中に獲得する格納領域の大きさを、符号なし整数と単位記号(KまたはM)の組合せで指定します。単位記号Kはキロバイト、単位記号Mはメガバイトを示します。

表のDSIによるデータベーススペースへの格納の単位は、表のDSO定義での分割条件と、分割キー値の指定により決定されます。以下に使用例を示します。

例1

分割条件で指定した“?”の個数と分割値指定の定数の個数の関係
分割条件:WHERE (取引先)= (?)
分割値 :USING (61)    ↑
         ↑    仮値 = 1
        定数 = 1

分割条件:WHERE (取引先)BETWEEN (?) AND (?)
分割値 :USING (61,71)        ↑
          ↑        仮値 = 2
          定数 = 2

分割条件:WHERE (製品名,倉庫番号)= (?,?)
分割値 :USING (N'テレビ',2)     ↑
           ↑       仮値 = 2
          定数 = 2

分割条件:WHERE (年度,月)BETWEEN (?,?) AND (?,?)
分割値 :USING (2002,4,2003,3)      ↑
           ↑        仮値 = 4
         定数 = 4
   :

備考.定数の個数と分割条件に指定した“?”は同数です。

例2

在庫表を製品名と倉庫番号の値で分割格納し、在庫表に対するテレビのDSIを作成します。
CREATE DSO 在庫表DSO         -- 在庫表のDSO
    FROM STOCKS.在庫表
    TYPE SEQUENTIAL(PAGESIZE(4),
            ORDER(1))
    WHERE (製品名,倉庫番号) = (?,?)  -- 製品名と倉庫番号で
                     -- データ分割
CREATE DSI 在庫表DSIテレビ2     -- 倉庫番号2の在庫表のDSI
    DSO   在庫表DSO
    USING  (N'テレビ',2)       -- 製品名テレビ、倉庫番号2
    ALLOCATE DATA ON DBSP_1 SIZE 280K -- の在庫表

例3

発注表を取引先の地区別にデータ分割し、発注表に対する関西地区のDSIを作成します。発注表の発注先番号は地区別に割り振られており、70から79の範囲は、関西地区の会社を表しているものとします。
CREATE DSO 発注表DSO           -- 発注表のDSO
    FROM STOCKS.発注表
    TYPE RANDOM ( PAGESIZE1(4),
           PAGESIZE2(4),
           CLUSTER (取引先, 取引製品))
    WHERE (取引先) BETWEEN (?) AND (?)   -- 取引先の番号別に
                       -- データ分割配置

CREATE DSI 関西発注表DSI      -- 関西に所在の会社用の
    DSO   発注表DSO      -- 発注表のDSI
    USING  (70,79)         -- 70番台は関西所在の会社
    ALLOCATE PRIME   ON DBSP_2 SIZE 200K,
        OVERFLOW ON DBSP_2 SIZE 80K

例4

在庫表を製品名と倉庫番号の値で分割格納し、在庫表に対する製品名がテレビと冷蔵庫のDSIを作成します。なお、分割条件を製品名と倉庫番号とし、分割値の指定を複数指定するものとします。
CREATE DSO 在庫表DSO          -- 在庫表のDSO
    FROM STOCKS.在庫表
    TYPE SEQUENTIAL ( PAGESIZE(4),
             ORDER(0))
    WHERE (製品名,倉庫番号) = (?,?)   -- 製品名と倉庫番号で
                      -- データ分割

CREATE DSI 在庫表DSI電化製品      -- 倉庫番号2と1の
    DSO   在庫表DSO        -- 在庫表のDSI
    USING (N'テレビ',2),(N'冷蔵庫',1)  -- 製品名テレビと冷蔵庫
    ALLOCATE DATA ON DBSP_1 SIZE 280K  -- の在庫表

例5

売上表を年と月にデータ分割し、売上表に対する2002年度と2003年度の下半期の売上数量のDSIを作成します。なお、分割値の指定を複数指定するものとします。
CREATE DSO 売上表DSO             -- 売上表のDSO
    FROM STOCKS.売上表
    TYPE SEQUENTIAL ( PAGESIZE(4), ORDER(0))
    WHERE (年度,月) BETWEEN (?,?) AND (?,?)  -- 年度と月で
                         -- データ分割

CREATE DSI 下半期DSI             -- 2002年度と2003年度
    DSO   売上表DSO           -- の下半期のDSI   
    USING  (2002,10,2003,3),(2003,10,2004,3) -- 年度と月の売上表
    ALLOCATE DATA ON DBSP_2 SIZE 280K

image


目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2003