さまざまなデータを格納するデータベース。最も普及しているリレーショナル型データベースは、データを表形式の「テーブル」に格納して管理します。データを不整合なく格納するためには、テーブルを適切に設計し、管理していかなければなりません。
では、このテーブルはどのように管理していけばよいのでしょうか。本記事では、データベースの「テーブル」について解説します。
テーブルとは
テーブルは、データベース内でデータを格納する領域で、表形式で表します。テーブルはExcelでいうと「シート」に該当し、データベースがExcelでいう「ブック」にあたります。
1つのデータベースの中に、商品情報を登録する「商品テーブル」、顧客情報を登録する「顧客テーブル」のように、複数のテーブルを持ちます。実際には、以下のようなイメージでデータを管理します。
テーブルの設計方法
ビジネスで扱われるたくさんのデータをテーブルに正しく格納するためには、モノ(エンティティ)と関係(リレーションシップ)を考慮する必要があります。このエンティティとリレーションシップの関係を表したデータベース設計技法を「ER設計」といいます。
ER設計では、ER図にエンティティとリレーションシップを記載し、概念モデルから論理モデル、そして実際にデータを登録する物理モデルへと深堀し、テーブルを設計していきます。以下は、簡単な概念モデルのイメージです。
テーブル数が多くなるとシステム全体のデータ構成を把握するのが困難になり、設計ミスが発生するリスクとなります。ER図を記載することで、システム全体で取り扱うデータの構成を把握することができ、手戻りの防止やデータ不整合の防止に役立ちます。
テーブルのカラムとレコードとは
ここでは、テーブルを構成するレコード、カラム、フィールドについて細かく見ていきます。
レコード
レコードは、テーブルの中の行に該当し、データそのものを意味します。たとえば4件のデータを登録したとすると、データ1件=1レコードです。
カラム
カラムは、テーブルの列に該当し、属性を意味します。列ごとにデータ型が決められ、データ型にあったデータでないと、格納することができません。また、カラムごとに値を検索するための索引や、「Null値(空)は入力できない」といった制約をつけることができます。
フィールド
フィールドは、レコードの中の項目であり、データの最小単位です。Excelでいうと「セル」に該当します。実際に値が格納される部分です。
テーブルの作成
ここからは、実際にテーブルを作る方法を解説していきます。
データベースを操作するには、SQLと呼ばれるプログラミング言語を用います。今回は、Oracle Databaseを例に、実際のSQLをご紹介していきます。テーブルを作成するには、以下のSQLを実行します。
CREATE TABLE テーブル名 ( カラム1 データ型(サイズ) 制約 ,カラム2(サイズ) データ型 制約 )
テーブルを作成する「CREATE TABLE」文では、カラムごとにカラム名およびデータ型を定義します。また、カラムに対する制約もあわせて付ける場合は、含めて記載します。
今回は例として、以下のテーブルを作成します。
実際にテーブルを作成するSQLは以下のようになります。
CREATE TABLE 商品マスタ (
商品番号 CHAR(3)
,商品名 VARCHAR2(20)
,価格 NUMBER(5,0)
)
テーブル作成後の操作
続いては、作成したテーブルに対してデータを登録・更新・削除する方法をご紹介します。テーブルの作成と同じく、SQLを使ってテーブル内のデータを操作します。
5.1 レコードの追加
では、先ほど作成したテーブルにレコードを追加してみましょう。レコードを追加するには「INSERT」文を用います。
INSERT INTO テーブル名 (カラム名1, カラム名2,...) VALUES (値1, 値2,...)
登録する値がテーブルのデータ型と一致しない場合はエラーが出るため、注意しましょう。たとえば、NUMBER型(数値型)に対して文字型の値を登録しようとするとエラーになります。テーブル定義を理解しておくことが重要です。
先ほど作成した商品マスタに、商品名「お米」のデータを登録します。
今回は例として、以下のテーブルを作成します。
INSERT INTO 商品マスタ(’商品番号’, ’商品名, ’価格’) VALUES (‘001’,‘お米’,3000)
これにより、商品マスタにデータが登録されます。
INSERT文は、1レコードずつ値をいれて追加していくことも、他のテーブルから参照した結果をまとめて追加することもできます。
レコードの更新
すでに登録したレコードに対して、一部のフィールドの値を更新したい、という場合は、「UPDATE」文を用います。
UPDATE テーブル名 SET カラム名1 = 値1 WHERE 条件
大量データから特定のデータのみ値を更新した場合は、WHERE句の後に条件を記載します。この条件に該当するデータ全てが、指定した値に更新されます。WHERE句をつけなかった場合は、該当テーブルの全てのデータで指定した列に対して値が更新されます。
例として、先ほど登録したデータで価格の値を間違えており、値を更新したい場合は、以下のSQLを実行します。
UPDATE 商品マスタ SET 価格 = 3500 WHERE 商品番号=’001’
これにより、データは以下の通りに変更されます。
レコードの削除
不要なデータを削除したい、という場合は、「DELETE」文を用います。
DELETE FROM テーブル名 WHERE 条件
テーブルから特定のレコードを削除するには、WHERE句に条件を記載します。この条件に該当するレコード全てが削除されます。WHERE句をつけなかった場合は、テーブルに格納されているデータすべてが削除されます。
今回の例では、先ほど登録したデータを削除するSQLをご紹介します。
DELETE FROM 商品マスタ WHERE 商品番号=’001’
「INSERT」「UPDATE」「DELETE」文で、それぞれデータの追加、更新、削除が実行できます。ただし、これらの文を実行しても、あくまでメモリ内で処理をしただけで、まだテーブルには反映されません。「COMMIT」文を実行することで、初めて実行した結果がデータベースに反映されます。
COMMIT
もしSQLを実行した後に、UPDATEやDELETEの実行を取り消したい場合は「ROLLBACK」文を実行します。これにより、SQLの実行を取り消すことができます。ただし、COMMITを実行した後は取り消すことができませんので、ご注意ください。
ROLLBACK
レコードの閲覧
単純にデータを更新するのではなく、テーブルに格納されているデータを参照したい場合はSELECT文を用います。
SELECT カラム1, カラム2, カラム3, ... FROM テーブル WHERE 条件
今回は、先ほどデータをINSERT文で登録した直後、正しく登録できたか確認するためのSELECT文をご紹介します。
SELECT ’商品番号’, ‘商品名’, ‘価格’ FROM 商品マスタ WHERE 商品番号=’001’
上の例では全てのカラムを指定していますが、特定のカラムのみ表示することもできます。また、WHERE句で条件を指定しない場合は、該当テーブルに格納されているすべてのデータが表示されます。
テーブルの削除
作成したデータを削除したい場合は、DROP TABLE文を用います。
DROP TABLE テーブル名
CREATE TABLE文、DROP TABLE文は、データではなくテーブルそのものを作成または削除します。この場合は、COMMIT文やROLLBACK文を実行しなくとも、結果は即時反映されます。特にDROP TABLE文は、一度削除されてしまうと再作成もしくはバックアップデータから戻すしか復旧できなくなるため、十分注意しましょう。
まとめ
本記事では、データベースでデータを格納する「テーブル」の構造や設計方法、さらにテーブルに対してデータを格納するための操作方法をご紹介しました。実際にテーブルに格納されたデータを操作する方法をご理解いただけたと思います。
今回は至ってシンプルな例でしたが、SQLをつかえば複数のテーブルを扱い複雑な条件に合致するデータを抽出することも行えます。
テーブルを理解することは、データベースのデータを扱うための最初の一歩です。今回の内容を参考に、データベースの環境がある方は、実際にやってみることをおすすめします。
- カテゴリ:
- キーワード: