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

第2章 データベースの作成> 2.6 論理構造の定義

2.6.3 表定義

実表の定義は、CREATE TABLEを使用して行います。

表定義で定義する事項を以下に示します。

在庫管理データベースの実表の定義の例を以下に示します。スキーマSTOCKSに属する在庫表を定義するものとします。

在庫表を定義するCREATE TABLE文
CREATE TABLE  STOCKS.在庫表  ( 製品番号   SMALLINT  NOT NULL,
                       ↑         ↑         ↑        ↑
                      表名       列名      データ型   列の制約
                                             ↑
                                           表要素

                              製品名     NATIONAL CHARACTER(10)  NOT NULL,
                                ↑                 ↑                ↑
                               列名             データ型          列の制約
                                                   ↑
                                                 表要素

                              在庫数量   INTEGER,
                                 ↑         ↑
                                列名      データ型
                                       ↑ 
                                     表要素

                              倉庫番号   SMALLINT,
                                 ↑          ↑
                                列名       データ型
                                        ↑
                                      表要素

                              PRIMARY KEY(製品番号) )
                                        ↑
                                表に対する一意性制約
                                        ↑
                                      表要素

                              COMMENT '在庫品とその数量, 格納倉庫の表'
                                                ↑
                                             注釈定義

■表

実表につける名前を指定します。表名には、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。表名は、スキーマ内で一意です。ほかのスキーマに同じ表名の表が定義されていてもかまいません。

スキーマ定義の要素として表定義を記述する場合、スキーマ名で修飾して表名を記述するときは、スキーマ定義で指定したスキーマ名と同じ名前を指定しなければなりません。スキーマ名での修飾を省略して表名を記述するときは、スキーマ定義で指定したスキーマ名で修飾したとみなされます。

表名は、データ操作のSQL文において、操作の対象となる表を指定するために使用します。

例1

いろいろな表名の例
CREATE TABLE  STOCK ( … )      (1)
CREATE TABLE  A1234 ( … )      (2)
CREATE TABLE  在庫表( … )      (3)
CREATE TABLE  ストック( … )    (4)
CREATE TABLE  すとっく( … )    (5)
CREATE TABLE  STOCK( … )  (6)
CREATE TABLE  stock( … )  (7)
CREATE TABLE  A1234( … )  (8)
CREATE TABLE  a1234( … )  (9)

(3)〜(9)は、日本語の表名です。(6)〜(9)は、(1)または(2)と混同しやすいので、使用しないことをお勧めします。

例2

誤った表名指定
CREATE SCHEMA   STOCKS
CREATE TABLE  S.在庫表 ( ... )  ←  スキーマ名がSTOCKSではありません。

例3

正しい表名指定
CREATE SCHEMA   STOCKS
CREATE TABLE  STOCKS.在庫表 ( ... )  ←  スキーマ名が一致しています。
CREATE TABLE  発注表 ( ... )         ←  スキーマ名省略。スキーマ名は
                                         STOCKSになります。

■列の定

表を構成する各列について、以下の事項を定義します。

列の定義には、列名と列のデータ型の指定が必要です。ほかの事項は必要に応じて指定します。

◆列

列につける名前を指定します。列名には、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。列名は、表内で一意です。

いろいろな列名の例
CREATE TABLE S1.STOCK  ( PNO       SMALLINT … )   (1)
CREATE TABLE S1.STOCK  ( COL1      SMALLINT … )   (2)
CREATE TABLE S1.STOCK  ( 製品番号  SMALLINT … )   (3)
CREATE TABLE S1.STOCK  ( セイヒン  SMALLINT … )   (4)
CREATE TABLE S1.STOCK  ( せいひん  SMALLINT … )   (5)
CREATE TABLE S1.STOCK  ( PNO    SMALLINT … )   (6)
CREATE TABLE S1.STOCK  ( pno    SMALLINT … )   (7)
CREATE TABLE S1.STOCK  ( COL1  SMALLINT … )   (8)

(3)〜(8)は、日本語の列名です。(6)〜(8)は、(1)または(2)と混同しやすいので、使用しないことをお勧めします。

◆列のデータ

列のデータ型を指定します。格納するデータの種類およびデータの大きさ(長さ)によってデータ型を決めます。

指定できるデータ型の詳細については、“SQLリファレンス”を参照してください。

例1

在庫表の製品名のデータ型を固定長10桁の文字列とする
CREATE TABLE  STOCKS.在庫表   (製品名  CHARACTER(10) … )

例2

例1と同じ定義
CREATE TABLE  STOCKS.在庫表   (製品名  CHAR(10) … )

例3

在庫表の製品名のデータ型を可変長10桁の文字列とする
CREATE TABLE  STOCKS.在庫表   (製品名  CHARACTER VARYING(10) … )

例4

例3と同じ定義
CREATE TABLE  STOCKS.在庫表   (製品名  VARCHAR(10) … )

例5

在庫表の製品名のデータ型を固定長10桁の各国語文字列とする
CREATE TABLE  STOCKS.在庫表   (製品名  NATIONAL CHARACTER(10)  … )

例6

在庫表の製品名のデータ型を可変長10桁の各国語文字列とする
CREATE TABLE  STOCKS.在庫表   (製品名  NCHAR VARYING(10) … )

例7

在庫表の製品名のデータ型を可変長1桁の各国語文字列とする
CREATE TABLE  STOCKS.在庫表   (製品名  NCHAR VARYING … )

例8

在庫表の在庫数量のデータ型を桁数10、小数点以下2桁の外部10進数とする
CREATE TABLE  STOCKS.在庫表   (在庫数量  NUMERIC(10,2) … )

例9

在庫表の在庫数量のデータ型を桁数10、小数点以下2桁の内部10進数とする
CREATE TABLE  STOCKS.在庫表   (在庫数量  DECIMAL(10,2) … )

例10

在庫表の在庫数量のデータ型を以下の整数とする
−231〜231−1の整数
CREATE TABLE  STOCKS.在庫表   (在庫数量  INTEGER … )
−215〜215−1の整数
CREATE TABLE  STOCKS.在庫表   (在庫数量  SMALLINT … )

例11

在庫表の在庫数量のデータ型を精度22の概数とする
CREATE TABLE  STOCKS.在庫表   (在庫数量  FLOAT(22) … )

例12

在庫表の在庫数量のデータ型を倍精度の概数とする
CREATE TABLE  STOCKS.在庫表   (在庫数量  DOUBLE PRECISION … )

◆既定

列の値に対する省略値を指定できます。表に行を挿入するとき、該当列の値が指定されていない場合に、列に設定する値を指定します。

既定値として指定できる値には、定数、ログイン名(SolarisおよびLinuxの場合)またはログオン名(Windows(R) 2000およびWindows Server(R) 2003の場合)、NULL値、現在の日付、現在の時刻、現在の時刻印および順序があります。

例1

在庫表の列“製品番号”の列定義の例
CREATE TABLE STOCKS.在庫表 ( 製品番号 INTEGER  DEFAULT 10
                                                  ↑
                                              既定値指定
                              :
                             )

例2

在庫表の列“製品番号”に対して、順序を使用した場合の列定義の例
CREATE TABLE STOCKS.在庫表 ( 製品番号 INTEGER  DEFAULT STOCKS.順序1.NEXTVAL
                                                         ↑
                                                     既定値指定
                              :
                             )

◆列の制

列に対して、格納されるデータについての制約を指定できます。データ型指定のうしろに指定します。列の制約には以下の2つがあります。

NOT NULL制:
列のデータにNULLを許さない場合、NOT NULLを指定します。
一意性制:
列のデータに同じ値が重複して存在することを許さない場合、UNIQUEまたはPRIMARY KEYを指定します。

一意性制約については、あとで詳しく説明します。

在庫表の製品番号の列定義の例を以下に示します。製品番号は次のように規定するものとします。

在庫表の列“製品番号”の列定義の例
CREATE TABLE  STOCKS.在庫表  ( 製品番号  INTEGER
                                         NOT NULL
                                         PRIMARY KEY
                              :
                             )

◆列の注釈定

列に対して、文字列または各国語文字列で注釈を指定することができます。最大256バイトの文字列を指定することができます。文字列と各国語文字列の両方を注釈として指定することもできます。注釈が不要な場合は、指定を省略します。以下に例を示します。

在庫表の“製品番号”列に注釈を指定
CREATE TABLE  STOCKS.在庫表  ( 製品番号 SMALLINT … COMMENT 'PRODUCT-NO' )
                                                             ↑
                                                          注釈定義

■一意性制

表中のいくつかの列の組合せに対しての制約(表制)として一意性制約があります。あるいは、列制約として表の1つの列に対して指定される一意性制約もあります。

一意性制約を指定すると、指定された列または列の組は、同じ値を重複してもつことはできません。指定された列の値または列の組の値は、表中で一意に決定されます。一意性制約はUNIQUEまたはPRIMARY KEYにより指定します。

◆UNIQUE

指定された列または列の組の値について、表の中で同一の値をもつ行が存在することを許さない場合に指定します。指定形式は次のとおりです。

UNIQUE (列名 [ {, 列名} …] )

UNIQUEを指定した列については、列定義においてNOT NULLを指定しておかなければなりません。

“製品番号と製品名の両方がともに一致する行があってはならない”という制約を指定した在庫表を定義する例を以下に示します。

列の組に対して表制約を指定する例
CREATE TABLE  STOCKS.在庫表 (…,

                     UNIQUE( 製品番号 , 製品名 )← 表に対する一意性制約
                                ↑        ↑
                               列名      列名

この例のような一意性制約が指定された在庫表には、“図:一意性制約に違反するデータの例”の[3]と[4]のような行を同時に含むことはできません。“図:一意性制約に違反するデータの例”の場合、[3]と[4]の行は、製品番号が両者とも“123”であり、かつ、製品名が両者とも“冷蔵庫”であるため、一意性制約違反となります。[1]と[2]の行は製品名が一致しますが製品番号は異なるので、一意性制約違反にはなりません。同様に[5]と[6]の行および[7]と[8]の行も一意性制約違反にはなりません。なお、一意性制約が、製品番号にだけ指定されている場合には、“図:一意性制約に違反するデータの例”の[3]、[4]および[5]、[6]の行は一意性制約違反となります。

[図:一意性制約に違反するデータの例]

◆PRIMARY KEY

表の中でその行を一意に決定する列または列の組を主キといいます。主キーに指定された列または列の組には、表の中で同一の値をもつ行を含むことはできません。指定形式は次のとおりです。

PRIMARY KEY (列名 [ {, 列名} …] )

PRIMARY KEYを指定した列については、列定義においてNOT NULLを指定しておかなければなりません。PRIMARY KEYは表定義中で一度しか指定できません。

在庫表の製品番号に関する一意性制約を表制約で指定する例を以下に示します。

表制約による製品番号の一意性制約の指定例
CREATE TABLE  STOCKS.在庫表 (…,

                     PRIMARY KEY ( 製品番号 )← 表に対する一意性制約
                                      ↑
                                     列名

■表の注釈定

表に対して、文字列または各国語文字列で注釈を指定することができます。最大256バイトの文字列を指定することができます。文字列と各国語文字列の両方を注釈として指定することもできます。注釈が不要な場合は、指定を省略します。以下に例を示します。

在庫表に、文字列の注釈を指定
CREATE TABLE  STOCKS.在庫表  ( 製品番号   SMALLINT  NOT NULL, …
                               COMMENT '在庫品とその数量, 格納倉庫の表')
                                                 ↑
                                              注釈定義

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

All Rights Reserved, Copyright(C) 富士通株式会社 2007-2008