データベース 第2部 データベース 3 データベースの定義とデータの制御・投入


 

3 データベースの定義とデータの制御・投入

3.1 データベースの定義

データベースを利用するためには、まずデータベースの設計に基づいて、データベースの定義を行う必要があります。具体的には、各種のスキーマを定義することでデータベースは定義されます。

ここでは、次の表を例にして、説明していきます。

なお、Access の例も表示していますが、ここでは Access2010(古くてすいません)です。



アイコンをクリックして、「保存」してください。


受注
受注番号
(5文字)
受注年月日
(西暦年/月/日)
顧客番号
(4文字)
受注合計
(8桁数値)
 
000012024/04/011001
\640,000
000022024/04/021006
\518,000
000032024/04/021003
\600,000
000042024/04/051001
\3,000
 
テキスト型
フィールドサイズ 5
日付/時刻型テキスト型
フィールドサイズ 4
通貨型Accessでの定義例
CHAR(5)DATECHAR(4)NUMBER(8)Oracleでの定義例

受注明細
受注番号
(5文字)
商品番号
(3文字)
数量
(3桁数値)
受注小計
(7桁数値)
 
00001A01
2
\400,000
00001G02
3
\240,000
00002A11
10
\500,000
00002S05
2
\6,000
00003A01
3
\600,000
00004S05
1
\3,000
 
テキスト型
フィールドサイズ 5
テキスト型
フィールドサイズ 3
数値型
フィールドサイズ 整数型
通貨型Accessでの定義例
CHAR(4)CHAR(3)NUMBER(3)NUMBER(7)Oracleでの定義例

顧客
顧客番号
(4文字)
顧客名
(10文字)
住所
(20文字)
電話番号
(13文字)
 
1001株式会社冨田貿易東京都港区芝浦1-X-XX03-3256-XXXX
1003宇宙商事株式会社東京都足立区神明22-XX03-5126-XXXX
1006有限会社吉野物産大阪府大阪市中央区城見23-XX06-6112-XXXX
1010広島商店株式会社広島県広島市中区基町5-XX 
 
テキスト型
フィールドサイズ 4
テキスト型
フィールドサイズ 10
テキスト型
フィールドサイズ 20
テキスト型
フィールドサイズ 13
Accessでの定義例
CHAR(4)NVARCHAR2(10)NVARCHAR2(20)CHAR(13)Oracleでの定義例

商品
商品番号
(3文字)
商品名
(10文字)
単価
(7桁数値)
 
A01テレビ(液晶大型)
\200,000
A11テレビ(液晶小型)
\50,000
G02DVDレコーダ
\80,000
S05ラジオ
\3,000
Z01冷蔵庫
\150,000
Z11エアコン
\98,000
 
テキスト型
フィールドサイズ 3
テキスト型
フィールドサイズ 10
通貨型Accessでの定義例
CHAR(3)NVARCHAR2(10)NUMBER(7)Oracleでの定義例

3.2 スキーマの定義

データベースを利用するためには、まずデータベースの設計に基づいて、データベースの定義を行う必要があります。具体的には、各種のスキーマを定義することでデータベースは定義されます。

(1) スキーマとは

データベースの定義情報をスキーマというが、スキーマはデータ定義言語のスキーマ定義命令によって指定されます。スキーマの定義は、表の定義・ビューの定義および権限の定義からなります。

スキーマに関する定義情報はDBMSの機能により、DD/D(Database Dictionary/Directory; データディクショナリ/データディレクトリ)に自動的に登録されます。

(2) 認可識別子

スキーマを定義する際には、まず誰がスキーマを定義するかを明確にし、その人を識別できるようにする必要があります。そのため、スキーマ認可識別子を利用する。認可識別子を持つ利用者は、スキーマ内で作成された表やビューに対して処理権限を持ちます。また、認可識別子を持たない人はデータベースにアクセスできないため、認可識別子はデータベースの保護機能も担っていることになります。ネットワークシステムにおける対話型処理の場合、認可識別子はユーザIDを兼ねる場合が多くあります。

スキーマ認可識別子は、データ定義言語の CREATE SCHEMA 文で指定します。


スキーマ(認可識別子)の定義
CREATE SCHEMA
   AUTHORIZATION 認可識別子
    

3.3 表の定義

実際のデータは表に格納されるが、表は行と列からなる二次元の構造を持つ。表は、後述するビュー(仮想表)に対し、「実在表」ともいわれる。表は複数存在してもよいが、各表を表名によって識別するため、同一表名は避けます。

(1) 表名

データベースの定義情報をスキーマといいますが、スキーマはデータ定義言語のスキーマ定義命令によって指定されます。スキーマの定義は、表の定義・ビューの定義および権限の定義からなります。

表の定義は、データ定義言語の CREATE TABLE 文で指定します。


表の定義
CREATE TABLE 表名
    

ACCESSでは …
次のような手順で表(テーブル)を作成する。
  1. メニュー「作成」-「テーブルデザイン」をクリックする。
  2. メニュー「ファイル」-「上書き保存」をクリックし、名前を入力して保存する。

(2) データ型

表は行(タプル)と列(属性)から成り立っているが、表を定義するには属性(データ型)を定義します。


データ型の定義
  列名 データ型
    

SQLで定義できるデータ型は下表のようになります。ただし、各メーカが提供しているSQLにより機能を拡張しているものもあるので、注意する必要があります。


データ型(一部)
データ型定義備考
ACCESSOracle
文字列型固定長テキスト型CHAR、NCHARCHARは、JIS8やShift-JISコード
NCHARは、Unicode(UTF-8)
可変長VARCHAR2、NVARCHAR2VARCHAR2は、JIS8やShift-JISコード
NVARCHAR2は、Unicode(UTF-8)
数値型1バイト長整数数値型
フィールドサイズ
バイト型
NUMBER例:NUMBER(2) 2桁整数
2バイト長整数数値型
フィールドサイズ
整数型
例:NUMBER(4) 4桁整数
4バイト長整数数値型
フィールドサイズ
長整数型
例:NUMBER(9) 9桁整数
単精度実数数値型
フィールドサイズ
単精度浮動小数点型
BINARY_FLOAT
NUMBER
BINARY_FLOATは 10gから
例:NUMBER(4,1) ±0.1~±999.9
倍精度実数数値型
フィールドサイズ
倍精度浮動小数点型
BINARY_DOUBLE
NUMBER
BINARY_DOUBLEは 10gから
例:NUMBER(10,3) ±0.001~±9999999.999
固定小数点数数値型
フィールドサイズ
十進型
NUMBER(NUMBERは整数でも実数でも固定小数点数として持つ)
通貨型通貨型-
日付/時刻型日付/時刻型DATE
TIMESTAMP
DATEは秒まで
TIMESTAMPはミリ秒まで(9iから)

ACCESSでは …
次のような手順で表(テーブル)に列を作成する。
  1. ナビゲーションウィンドウ「テーブル」で、列を作成したい表を右クリックし、表示されたメニューの「デザインビュー」をクリックする。
  2. 表示された「デザインビュー」で、「フィールド名」、「データ型」などを入力する(「フィールド名」が「列名」)。
    なお、「データ型」がテキスト型や数値型の場合は、さらに「フィールドプロパティ」の「フィールドサイズ」に文字数や数値のサイズと型を設定する。

データベースではデータ型の定義において、「空白値(null value)」を設定することもできます。空白値とは、値を持たないか、もしくは値がまだ決まっていないものをいいます。データ型を定義する際には、空白値を許すか、許さないかを決め、キー項目のように空白値を許さない場合は、「NOT NULL」と指定します。後述しますが、空白値は検索条件としても利用できます。


ACCESSでは …
次のような手順で、空白値を許さない列を設定する。
  1. ナビゲーションウィンドウ「テーブル」で、列を作成したい表を右クリックし、表示されたメニューの「デザインビュー」をクリックする。
  2. 表示されたで、「デザインビュー」で、空白値を許さない「フィールド名」をクリックする。
  3. 「フィールドプロパティ」の「値要求」を「はい」に設定する。

(3) 基本キー(PRIMARY KEY)

表の中で、レコードキー項目となる属性を基本キー(Access では主キー)として指定します。SQLでは、PRIMARY KEY 句で定義します。

基本キーの定義
  PRIMARY KEY (列名)
    

ACCESSでは …
次のような手順で主キー(基本キー)を指定する。
  1. ナビゲーションウィンドウ「テーブル」で、列を作成したい表を右クリックし、表示されたメニューの「デザインビュー」をクリックする。
  2. 表示された「デザインビュー」で、主キーにしたいフィールド名の左側のグレー部分(カーソルが → に変わる部分)をクリックする。
    複数のフォールドを主キーにしたい場合は、2つ目以降のフィールドに対して「Ctrl」キーを押しながらグレー部分をクリックする。
  3. メニュー「デザイン」-「主キー」をクリックする(グレー部分に「鍵」が表示される)。

(4) 外部キー(FOREIGN KEY)

外部キーとは、ある表では基本キーとして使用されませんが、他の表では基本キーとして使用されているデータ項目です。SQLでは、FOREIGN KEY 句で定義し、その後にどの表で基本キーとして使用されるかを指定します。

外部キーの定義
  FOREIGN KEY (列名)
    REFERENCES 表名
    

例えば、「3.1 データベースの定義」に示した四つの表を定義すると、次のようになります。

なお、右上には Access の QBE方式での定義方法を示しています。

 フィールド名データ型フィールドサイズ
 受注番号テキスト型  5
 受注年月日日付/時刻型 
 顧客番号テキスト型  4
 受注合計通貨型 

●受注

CREATE TABLE 受注 (
  受注番号   CHAR(5)     NOT NULL,
  受注年月日 DATE        NOT NULL,
  顧客番号   CHAR(4)     NOT NULL,
  受注合計   NUMBER(8)   NOT NULL,
  PRIMARY KEY (受注番号),
  FOREIGN KEY (顧客番号) REFERENCES 顧客
)
    
 フィールド名データ型フィールドサイズ
 受注番号テキスト型  5
 商品番号テキスト型  3
 数量数値型 整数型
 受注小計通貨型 

●受注明細

CREATE TABLE 受注明細 (
  受注番号   CHAR(5)     NOT NULL,
  商品番号   CHAR(3)     NOT NULL,
  数量       NUMBER(3)   NOT NULL,
  受注小計   NUMBER(7)   NOT NULL,
  PRIMARY KEY (受注番号, 行番号),
  FOREIGN KEY (受注番号) REFERENCES 受注,
  FOREIGN KEY (商品番号) REFERENCES 商品
)
    
 フィールド名データ型フィールドサイズ
 顧客番号テキスト型  4
 顧客名テキスト型 10
 住所テキスト型 20
 電話番号テキスト型 13

●顧客

CREATE TABLE 顧客 (
  顧客番号 CHAR(4)       NOT NULL,
  顧客名   NVARCHAR2(10) NOT NULL,
  住所 NVARCHAR2(20) NOT NULL,
  電話番号 NVARCHAR2(13),
  PRIMARY KEY (顧客番号)
)
    
 フィールド名データ型フィールドサイズ
 商品番号テキスト型  3
 商品名テキスト型 10
 単価通貨型 

●商品

CREATE TABLE 商品 (
  商品番号   CHAR(3)       NOT NULL,
  商品名     NVARCHAR2(10) NOT NULL,
  単価       NUMBER(7)     NOT NULL,
  PRIMARY KEY (商品番号)
)
    

3.4 ビューの特性と定義

(1) ビューの特性

ビューとは、視点という意味で、実在表の一部分を取り出したもの、または複数の表から必要なデータ項目を結合して、あたかも一つの表であるかのように見せる仮想の表のことです。関係データモデル型のデータモデルと比べて優れている点の一つは、このビューを使用していることであり、時と場合により自在に作成できるため、定型業務のみならず、不定型業務にも対応できます。

ビューに対しては、一定の制限のもとではあるが、表と同じようにいろいろなデータ操作を行うことができます。例えば、ビューに対して照会、変更の処理を表と同様に行うことができる。ただし、複数の表をもとに作成したビューに対しては、変更処理はできません。また、元の表にデータ変更があった場合、その変更結果を直ちにビューに反映することができます。

ビューの利用によって、次のようなことが可能となります。

使いやすさの向上
表から必要な列だけを取り出して新しい表(ビュー)を作ることによって、表のデータが見やすくなる。また、複数の表を結合して新しい表を作っておくこともできる。これらのビューに対するデータ操作のSQL文は、元の表のSQL文に比べて簡単になる。
データの利用範囲を制限することによる安全確保
特定の列あるいは行からなるビューを作り、そのビューに対するアクセス権限を与えることにより利用範囲を制限することができ、セキュリティを確保できる。
データからの独立性の向上
元の表の定義が変更(例えば、列の追加、表の分割)されてもビューに対する操作命令を変更する必要がない。

(2) ビューの定義

ビューの定義では、ビュー名を付ける必要があるが、この名前は同一スキーマ内の表名および他のビュー名と区別できるようにします。

SQLでは、ビュー定義を CREATE VIEW 文により指定します。

ビューの定義
    CREATE VIEW ビュー名
      AS SELECT 列名 FROM 表名 
    

例えば、「[顧客]から、[顧客番号]と[顧客名]だけで構成せれる顧客名表というビューを定義する」は、次のようになります。

ビューの定義
    CREATE VIEW 顧客名
      AS SELECT 顧客番号, 顧客名 FROM 顧客
    

ACCESSでは …
ビューがないので、照会処理で使用する SELECT文をクエリとして保存し代用する。

3.5 データの制御

データの制御とは、処理権限を付与することにより、データベースを操作できる人を限定することです。

データベースにおいて表を利用する回数が多くなると、故意や事故でデータが破壊されることがあります。このようなことを防ぐため、表の使用者を制限し、処理権限を持たせます。

処理権限には、次の5種類があります。

なお、表の作成者にはこの五つの権限がすべて自動的に与えられます。また、ALL PRIVILEGES と指定すると、全権限を付与するという意味になります。反対に、付与していた権限を取り消す場合には、REVOKE 文で指定します。

権限を特定の人に渡すとき、SQLでは GRANT 文を用いて定義します。


処理権限の付与
    GRANT 権限 ON 表名 TO 認可識別子
    

3.6 データの投入

データベースを定義した後は、実際に定義した表にデータを投入しなければなりません。

データの投入方法としては、次の三つの方法があります。

(1) 対話式

この方式では、独立言語方式の会話型SQLにより、1行ずつデータを投入していきます。詳しくは後述しますが、SQLのINSERT文で指定します。

ただし、この方式は1行ずつ投入するため、大量のデータを投入する場合には向いていません。

(2) 親言語方式

この方式では、親言語方式の埋込み型SQLにより、別に準備したデータを投入していく。その場合、あらかじめSQL文(INSERT文)を組み込んだデータ投入量プログラムを用意する必要があります。

親言語方式は、別に準備したデータを加工したり、ある条件のもとでデータを選択したりしながらデータを投入する場合などに向いています。

(3) ユーティリティプログラム方式

この方式では、データ投入用のユーティリティプログラムを利用して、別に準備したデータを投入していきます。この方式は、準備したデータに何の加工もせずに、大量のデータをただ単に投入する場合に向いています。