データベースを利用するためには、まずデータベースの設計に基づいて、データベースの定義を行う必要があります。具体的には、各種のスキーマを定義することでデータベースは定義されます。
ここでは、次の表を例にして、説明していきます。
なお、Access の例も表示していますが、ここでは Access2010(古くてすいません)です。
アイコンをクリックして、「保存」してください。
| 受注番号 (5文字) | 受注年月日 (西暦年/月/日) | 顧客番号 (4文字) | 受注合計 (8桁数値) | |
|---|---|---|---|---|
| 00001 | 2024/04/01 | 1001 | \640,000 | |
| 00002 | 2024/04/02 | 1006 | \518,000 | |
| 00003 | 2024/04/02 | 1003 | \600,000 | |
| 00004 | 2024/04/05 | 1001 | \3,000 | |
| テキスト型 フィールドサイズ 5 | 日付/時刻型 | テキスト型 フィールドサイズ 4 | 通貨型 | Accessでの定義例 |
| CHAR(5) | DATE | CHAR(4) | NUMBER(8) | Oracleでの定義例 |
| 受注番号 (5文字) | 商品番号 (3文字) | 数量 (3桁数値) | 受注小計 (7桁数値) | |
|---|---|---|---|---|
| 00001 | A01 | 2 | \400,000 | |
| 00001 | G02 | 3 | \240,000 | |
| 00002 | A11 | 10 | \500,000 | |
| 00002 | S05 | 2 | \6,000 | |
| 00003 | A01 | 3 | \600,000 | |
| 00004 | S05 | 1 | \3,000 | |
| テキスト型 フィールドサイズ 5 | テキスト型 フィールドサイズ 3 | 数値型 フィールドサイズ 整数型 | 通貨型 | Accessでの定義例 |
| CHAR(4) | CHAR(3) | NUMBER(3) | NUMBER(7) | Oracleでの定義例 |
| 顧客番号 (4文字) | 顧客名 (10文字) | 住所 (20文字) | 電話番号 (13文字) | |
|---|---|---|---|---|
| 1001 | 株式会社冨田貿易 | 東京都港区芝浦1-X-XX | 03-3256-XXXX | |
| 1003 | 宇宙商事株式会社 | 東京都足立区神明22-XX | 03-5126-XXXX | |
| 1006 | 有限会社吉野物産 | 大阪府大阪市中央区城見23-XX | 06-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 | |
| G02 | DVDレコーダ | \80,000 | |
| S05 | ラジオ | \3,000 | |
| Z01 | 冷蔵庫 | \150,000 | |
| Z11 | エアコン | \98,000 | |
| テキスト型 フィールドサイズ 3 | テキスト型 フィールドサイズ 10 | 通貨型 | Accessでの定義例 |
| CHAR(3) | NVARCHAR2(10) | NUMBER(7) | Oracleでの定義例 |
データベースを利用するためには、まずデータベースの設計に基づいて、データベースの定義を行う必要があります。具体的には、各種のスキーマを定義することでデータベースは定義されます。
データベースの定義情報をスキーマというが、スキーマはデータ定義言語のスキーマ定義命令によって指定されます。スキーマの定義は、表の定義・ビューの定義および権限の定義からなります。
スキーマに関する定義情報はDBMSの機能により、DD/D(Database Dictionary/Directory; データディクショナリ/データディレクトリ)に自動的に登録されます。
スキーマを定義する際には、まず誰がスキーマを定義するかを明確にし、その人を識別できるようにする必要があります。そのため、スキーマ認可識別子を利用する。認可識別子を持つ利用者は、スキーマ内で作成された表やビューに対して処理権限を持ちます。また、認可識別子を持たない人はデータベースにアクセスできないため、認可識別子はデータベースの保護機能も担っていることになります。ネットワークシステムにおける対話型処理の場合、認可識別子はユーザIDを兼ねる場合が多くあります。
スキーマ認可識別子は、データ定義言語の CREATE SCHEMA 文で指定します。
CREATE SCHEMA
AUTHORIZATION 認可識別子
実際のデータは表に格納されるが、表は行と列からなる二次元の構造を持つ。表は、後述するビュー(仮想表)に対し、「実在表」ともいわれる。表は複数存在してもよいが、各表を表名によって識別するため、同一表名は避けます。
データベースの定義情報をスキーマといいますが、スキーマはデータ定義言語のスキーマ定義命令によって指定されます。スキーマの定義は、表の定義・ビューの定義および権限の定義からなります。
表の定義は、データ定義言語の CREATE TABLE 文で指定します。
CREATE TABLE 表名
|
ACCESSでは …
次のような手順で表(テーブル)を作成する。
|
表は行(タプル)と列(属性)から成り立っているが、表を定義するには属性(データ型)を定義します。
列名 データ型
SQLで定義できるデータ型は下表のようになります。ただし、各メーカが提供しているSQLにより機能を拡張しているものもあるので、注意する必要があります。
| データ型 | 定義 | 備考 | ||
|---|---|---|---|---|
| ACCESS | Oracle | |||
| 文字列型 | 固定長 | テキスト型 | CHAR、NCHAR | CHARは、JIS8やShift-JISコード NCHARは、Unicode(UTF-8) |
| 可変長 | VARCHAR2、NVARCHAR2 | VARCHAR2は、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では …
次のような手順で表(テーブル)に列を作成する。
|
データベースではデータ型の定義において、「空白値(null value)」を設定することもできます。空白値とは、値を持たないか、もしくは値がまだ決まっていないものをいいます。データ型を定義する際には、空白値を許すか、許さないかを決め、キー項目のように空白値を許さない場合は、「NOT NULL」と指定します。後述しますが、空白値は検索条件としても利用できます。
|
ACCESSでは …
次のような手順で、空白値を許さない列を設定する。
|
表の中で、レコードキー項目となる属性を基本キー(Access では主キー)として指定します。SQLでは、PRIMARY KEY 句で定義します。
PRIMARY KEY (列名)
|
ACCESSでは …
次のような手順で主キー(基本キー)を指定する。
|
外部キーとは、ある表では基本キーとして使用されませんが、他の表では基本キーとして使用されているデータ項目です。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 (商品番号)
)
ビューとは、視点という意味で、実在表の一部分を取り出したもの、または複数の表から必要なデータ項目を結合して、あたかも一つの表であるかのように見せる仮想の表のことです。関係データモデル型のデータモデルと比べて優れている点の一つは、このビューを使用していることであり、時と場合により自在に作成できるため、定型業務のみならず、不定型業務にも対応できます。
ビューに対しては、一定の制限のもとではあるが、表と同じようにいろいろなデータ操作を行うことができます。例えば、ビューに対して照会、変更の処理を表と同様に行うことができる。ただし、複数の表をもとに作成したビューに対しては、変更処理はできません。また、元の表にデータ変更があった場合、その変更結果を直ちにビューに反映することができます。
ビューの利用によって、次のようなことが可能となります。
ビューの定義では、ビュー名を付ける必要があるが、この名前は同一スキーマ内の表名および他のビュー名と区別できるようにします。
SQLでは、ビュー定義を CREATE VIEW 文により指定します。
CREATE VIEW ビュー名
AS SELECT 列名 FROM 表名
例えば、「[顧客]から、[顧客番号]と[顧客名]だけで構成せれる顧客名表というビューを定義する」は、次のようになります。
CREATE VIEW 顧客名
AS SELECT 顧客番号, 顧客名 FROM 顧客
|
ACCESSでは …
ビューがないので、照会処理で使用する SELECT文を |
データの制御とは、処理権限を付与することにより、データベースを操作できる人を限定することです。
データベースにおいて表を利用する回数が多くなると、故意や事故でデータが破壊されることがあります。このようなことを防ぐため、表の使用者を制限し、処理権限を持たせます。
処理権限には、次の5種類があります。
なお、表の作成者にはこの五つの権限がすべて自動的に与えられます。また、ALL PRIVILEGES と指定すると、全権限を付与するという意味になります。反対に、付与していた権限を取り消す場合には、REVOKE 文で指定します。
権限を特定の人に渡すとき、SQLでは GRANT 文を用いて定義します。
GRANT 権限 ON 表名 TO 認可識別子
データベースを定義した後は、実際に定義した表にデータを投入しなければなりません。
データの投入方法としては、次の三つの方法があります。
この方式では、独立言語方式の会話型SQLにより、1行ずつデータを投入していきます。詳しくは後述しますが、SQLのINSERT文で指定します。
ただし、この方式は1行ずつ投入するため、大量のデータを投入する場合には向いていません。
この方式では、親言語方式の埋込み型SQLにより、別に準備したデータを投入していく。その場合、あらかじめSQL文(INSERT文)を組み込んだデータ投入量プログラムを用意する必要があります。
親言語方式は、別に準備したデータを加工したり、ある条件のもとでデータを選択したりしながらデータを投入する場合などに向いています。
この方式では、データ投入用のユーティリティプログラムを利用して、別に準備したデータを投入していきます。この方式は、準備したデータに何の加工もせずに、大量のデータをただ単に投入する場合に向いています。