35
c1101282 26 1 16

データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

データベース作成支援システム

指導教員 廣瀬雄二

東北公益文科大学公益学部

c1101282 鈴木 武久

平成 26年 1月 16日

Page 2: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部
Page 3: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

3

目 次

第 1章 背景 7

第 2章 データベースの必要性 9

2.1 データの冗長性の排除 . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.1.1 正規化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.2 プログラムとデータを独立させる . . . . . . . . . . . . . . . . . . . 12

2.3 データへの同時アクセス . . . . . . . . . . . . . . . . . . . . . . . . 12

2.4 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.4.1 データ定義言語 . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.4.2 データ操作言語 . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.4.3 データ制御言語 . . . . . . . . . . . . . . . . . . . . . . . . . 15

第 3章 データベース作成支援システムの提案 17

3.1 データベース作成支援システム . . . . . . . . . . . . . . . . . . . . 17

3.1.1 OS依存の解消 . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.1.2 同時アクセス . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.1.3 SQLの自動生成 . . . . . . . . . . . . . . . . . . . . . . . . . 18

第 4章 設計 19

4.1 DBサーバの構築 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.2 Webサーバの構築 . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.3 Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.4 CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

第 5章 実装 21

5.1 データベース作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

5.1.1 ユーザ登録 . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

5.1.2 テーブルの作成 . . . . . . . . . . . . . . . . . . . . . . . . . 21

5.1.3 データの閲覧 . . . . . . . . . . . . . . . . . . . . . . . . . . 21

5.1.4 データベースの編集 . . . . . . . . . . . . . . . . . . . . . . 22

5.2 システムの概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5.3 メールによるユーザ登録 . . . . . . . . . . . . . . . . . . . . . . . . 22

5.4 データベースを管理するプログラム . . . . . . . . . . . . . . . . . . 22

5.4.1 例外処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

5.4.2 テーブルの管理 . . . . . . . . . . . . . . . . . . . . . . . . . 23

5.5 システムの使用方法 . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Page 4: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

4

第 6章 結論 31

6.1 今後の展望 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

付 録A 35

Page 5: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

5

概要

現在、データを管理するということは生活を行う上で必要不可欠なことである。これらのデータは計算機上で管理されている。この管理を目的としたデータの集合をデータベースと呼ぶ。しかし、計算機上でデータを管理するということについて格差が生じている。ソフトウェアに対応していないOSがあること、専門言語の知識が必要だということが原因である。そのため、本来であればデータの管理に適さないソフトウェアを用いてデータを管理せざるをえない人がいるのが現状である。このような格差を解消するため、データを管理するために必要な作業を自動的に処理するデータベース作成支援システムを開発しようと考えた。これは専門知識がなくとも名簿や商品の在庫表といったデータベースを作成できるシステムである。このシステムでは利用者のOSに依存せず、利用者の必要に応じて専門言語を自動的に生成することができる。また、データをシステムを管理している計算機に格納するため、利用者の計算機に負担をかけることが無い。このシステムによって、データ管理における格差を解消したい。

Page 6: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部
Page 7: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

7

第1章 背景

近年、企業や教育機関では構成員や顧客などの名簿、小売業や卸売業などでは商品の在庫のデータなど様々なデータを取扱っている。特に、顧客の情報や商品の在庫といったデータは次々に更新されるため、計算機によって管理されている。データベース管理システム (DBMS)やスプレッドシートといったソフトウェアが使用されている。しかし、DBMSを使用するには専用の言語である SQL[1]を覚える必要がある。SQLはプログラミングの経験のない人間には敷居が高い。また、スプレッドシートもDBMSと似たような機能こそあるが、もともとは集計計算や統計分析などに使用するソフトウェアであり、データを管理することには適していない。

DBMSであるMicrosoft Access[2]を使用すればSQLの知識がなくともデータベースを作成、管理できるが、使用に当たってコストがかかる。Accessを使用したいクライアントの計算機の数だけライセンスを購入する必要があるため、人数が多くなるほど必要なコストが増える。また、サポートしているOSが Microsoft Windows[3]

のみであるといった問題もあるため、気軽に使用することが出来ない。資金を用意できる大きな企業や公共機関であれば問題はないかもしれないが、小さな企業や民間でデータベースを用いたデータの管理をしたいといった場合には知識や技術、コストといった面で敷居が高くなる。このような問題を解決することはできないだろうかと考え、データベースの作成を支援するためのアプリケーションを開発した。

Page 8: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部
Page 9: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

9

第2章 データベースの必要性

そもそもなぜデータをDBMSによって管理する必要があるのだろうか。データをDBMSによって管理することによって得られる利点は以下の通りである。

• データの冗長性を排除することが可能

• プログラムとデータを独立させることが可能

• データへの同時アクセスが可能

データの冗長性を排除するための手段として正規化がある。これを用いることによって、データの無駄をなくし、データベースの管理がスムーズになる。プログラムとデータを独立させることで、プログラムが何らかの理由で破壊されたり、消失したりしてもデータが守られる。データへの同時アクセスにより、多人数でのデータの管理や閲覧が可能となる。

2.1 データの冗長性の排除

データベースは特定のテーマに沿ったデータを集めて管理し、容易に検索・抽出などの処理を高速で行なうことができる。データベースによるデータの管理にはデータを正規化しておく必要がある。

2.1.1 正規化

正規化とはデータを特定のルールにしたがって変形し、利用しやすいものにすることである。店舗の在庫管理を例に、正規化について説明していく。

非正規形

表 2.1: 非正規形

フルホン フルチョコ 100円 10個 フルヨーグルト 126円 8個

林永 林チョコ 98円 5個 林ヨーグルト 130円 8個

表 2.1のように全く整理されていない状態のデータを非正規形と呼ぶ。計算機は一つの項目に複数のデータが格納されていても複数のデータが格納されていること

Page 10: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

10 第 2章 データベースの必要性

を認識できない。表 2.1の場合では、二列目と三列目にそれぞれ商品名、価格、個数と複数のデータが格納されている。また、二列目と三列目では同じ項目が繰りかえし出ている。同じ列に同じ項目が存在した場合に、計算機は同じ項目だと認識することができない。このような冗長性を排除して計算機が処理を行いやすいようにすることが、データベースにおける正規化となる。

第 1正規化

表 2.2: 繰りかえしの排除

企業名 商品名 価格 在庫

フルホン フルチョコ 100 10

フルホン フルヨーグルト 126 8

林永 林チョコ 98 5

林永 林ヨーグルト 130 8

第一正規化では表 2.2のように繰り返しを排除する。一つの項目に入れるデータを一つにし項目の数を定めることで、同じ項目が繰りかえすことを防ぐことができる。また、将来的に変更する可能性があるデータにはコードを与える。例えば名簿の管理をする場合に、同姓同名の人物がいたとき同一人物なのか別人なのか計算機は名前だけでは判断できない。名前にコードを与えておくことで、同姓同名の人物がいたとしても、コードが違えば別人だと判別できる。また、もし名前が変わったとしてもコードは変わらないため同一人物だとわかる。このようなコードのことを主キーと呼ぶ。正規化では、一つの行に必ず一つは一意となるデータがなければならない。表 2.3が第一正規形の表となる。

表 2.3: 第一正規形

企業コード 企業名 業種コード 業種名 商品コード 商品名 価格 在庫

1111 フルホン a111 食料品 111 フルチョコ 100 10

1111 フルホン a111 食料品 112 フルヨーグルト 126 8

1112 林永 a111 食料品 113 林チョコ 98 5

1112 林永 a111 食料品 114 林ヨーグルト 130 8

第 2正規化

表 2.3の場合、企業コードが決まれば企業名が決まる。しかし、企業コードが決まっても、商品名、在庫数は決まらない。そのため企業コードと企業名だけをまとめた、企業コードが主キーとなる企業コード表というテーブルを新たに作成する。

Page 11: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

2.1. データの冗長性の排除 11

商品コードが決まると商品名、価格がわかるので、商品コードが主キーとなる商品コード表というテーブルを作成する。

表 2.4: 企業コード表

企業コード 企業名 業種コード 業種名

1111 フルホン a111 食料品

1112 林永 a111 食料品

表 2.5: 商品コード表

商品コード 商品 価格

111 フルチョコ 100

112 フルヨーグルト 126

113 林チョコ 98

114 林ヨーグルト 130

表を分離したあとに残った項目と、分離した表の主キーとなるものを取り出したテーブルを作成して第二正規化は完了する。今回の例では、残った項目は在庫、それぞれのテーブルの主キーが企業コードと商品コードなので表 2.6を作成する。

表 2.6: 在庫管理表

企業コード 商品コード 在庫

1111 111 10

1111 112 8

1112 113 5

1112 114 8

第二正規形ではテーブルの数を増やすことで、テーブルごとの列の数を減らし、第一正規化されたデータよりもデータの管理を単純化する。

第 3正規化

第三正規化では、主キー以外の項目に関数従属する項目を分離し、新しくテーブルを作成する。それによってさらにテーブルの数を増やし、第二正規化されたデータよりも管理を簡単にすることができる。今回の場合では、企業コード表の業種コードは分離できる。新たにできたものが表 4.1、表 2.8である。第三正規化までに作成したテーブルは在庫管理表、商品コード表、企業コード表、

業種コード表の 4つとなる。普段データを管理するときはそれぞれのテーブルのデー

Page 12: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

12 第 2章 データベースの必要性

表 2.7: 企業コード表

企業コード 企業名

1111 フルホン

1112 林永

表 2.8: 業種コード表

業種コード 業種名

a111 食料品

タを変更すればよい。データを閲覧したいときは主キーやそれ以外のキーを参照して各テーブルをつなげる。

2.2 プログラムとデータを独立させる

プログラムが消失した場合、プログラム自身にデータを管理させていると、データが消失したり、使用できるように復元することが困難となる。プログラムが破壊されても DBMSにデータを格納しておけば、データそのものは守られる。たとえば、計算機Aで名簿を管理するプログラムを作成する。データは計算機Bのサーバに格納する。こうしておけば計算機Aが何らかの要因で壊れたとしてもデータは計算機 Bにあるため、データは守られる。

2.3 データへの同時アクセス

file

Aの計算機

Bの計算機

file

移動させる必要がある

図 2.1:スプレッドシートによるデータ管理

スプレッドシートでデータの管理をする場合はデータをファイルとして保存しなければならない。そのため、BがAのデータを見たい場合は図 2.1のようにファイ

Page 13: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

2.4. SQL 13

ルをAからBに送る必要がある。データが頻繁に変更される場合はその都度ファイルのやりとりをしなければならないという問題がある。

DB

DBMS

Aの計算機

Bの計算機

端末

図 2.2:DBMSによるデータ管理

Aの計算機(ライセンスあり)

Bの計算機(ライセンスなし)

DB

図 2.3:Microsoft Accessによるデータ管理

図 2.2のようにDBMSを用いれば、AとBは同一のデータベースにそれぞれの計算機でアクセスすることができる。そのため、ファイルのやりとりをする手間を省くことができる。Microsoft Accessでも同じことが可能だが、図 2.3のようにライセンスを持っている利用者しかデータベースにアクセスすることができない。

2.4 SQL

DBMSでは SQL[1]というデータベース言語を使用する。SQLとはDBMSのデータベース内のデータの操作や定義を行うためのデータベース言語である。データベース言語はデータ定義言語、データ操作言語、データ制御言語の 3つに分けられる。それぞれの言語について PostgreSQLの SQL文を例に説明する。

2.4.1 データ定義言語

データ定義言語とは計算機の利用者あるいはアプリケーションソフトウェアが、計算機のデータを定義する言語である。SQLでは関係データベースの構造を定義する。

Page 14: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

14 第 2章 データベースの必要性

CREATE … 新しいデータべースやテーブルを作成することができる。テーブルを作成するときは項目名と項目の型を入力する。項目に格納したいデータが数の場合は integer、文字の場合は textを項目の型に入力する。下の例では sampleというテーブルを新しく作成している。✓ ✏->CREATE TABLE sample(id integer ,name text, age integer);

✒ ✑

DROP … 既存のデータベースやテーブルを削除することができる。下の例ではsampleというテーブルを削除することができる。✓ ✏->DROP TABLE sample;

✒ ✑

2.4.2 データ操作言語

データ操作言語とは計算機の利用者あるいはアプリケーションソフトウェアが、計算機のデータベースに対してデータの検索・新規登録・削除・更新を行うためのデータベース言語である。データ操作言語は文の最初の単語によって示される機能を持っている。

SELECT … テーブルのデータを検索することができる。下の例では sampleというテーブルのデータを検索することができる。✓ ✏->SELECT * FROM sample;

✒ ✑

INSERT … テーブルにデータを新規登録することができる。下の例では sample

というテーブルにデータを新規登録している。✓ ✏->INSERT into sample values(’0001’,’公益太朗’,’18’);

✒ ✑

UPDATE … テーブルのデータを更新するすることができる。下の例では idの項目のデータが 0001の行の nameの項目のデータを公益次郎に更新している。✓ ✏->UPDATE sample SET name = ’公益次郎’ WHERE id = ’0001’;

✒ ✑

DELETE … テーブルのデータを削除することができる。下の例では idの項目のデータが 0001の行を削除している。✓ ✏->DELETE FROM sample WHERE id = ’0001’ ;

✒ ✑

Page 15: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

2.4. SQL 15

2.4.3 データ制御言語

データ制御言語とは計算機のデータベースにおいてデータに対するアクセス制御を行うためのデータベース言語である。

GRANT … 特定のデータベース利用者に特定の作業を行う権限を与えることができる。下の例では user というデータベース利用者に sample というテーブルへINSERT、つまりデータの新規登録をする権限を与えている。✓ ✏->GRANT INSERT ON sample TO user;

✒ ✑

REVOKE … 特定のデータベース利用者から権限を剥奪することができる。下の例では userというデータベース利用者から sampleというテーブルへの INSERT、つまりデータの新規登録をする権限を剥奪している。✓ ✏->REVOKE INSERT ON sample FROM user;

✒ ✑

Page 16: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部
Page 17: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

17

第3章 データベース作成支援システムの提案

DBMSを用いれば名簿や顧客、商品といったデータを管理することができる。しかし、使用するためには SQLやプログラミングの知識を独自に学ばなければならない。また、そういった知識の必要がないソフトウェアではコストがかかるということや、サポートを受けられない OSがあるという問題がある。そのため、小さな企業や民間では気軽に使用することが出来ない。データを管理するために使用されているソフトウェアの問題点をまとめる。OSに

依存するソフトウェアでは利用者が限定される。スプレッドシートによるデータの管理では、特定のデータに複数の利用者が別々

の計算機で、別々の場所からアクセスすることができない。DBMSは端末で起動し、SQLという専用言語を使用してデータを管理するため専

門知識が必要となる。利用者はこの知識を、独自に学ばなければならない。これらの問題点を解決するために必要なことは以下の 3点である。

• OS依存の解消

• 同時アクセスが可能

• SQLの自動生成

これらの問題点を解消するためにデータベース作成支援システムを提案する。

3.1 データベース作成支援システム

上で挙げた 3点を満たす条件を書く

3.1.1 OS依存の解消

利用者の計算機で起動させるプログラムでは利用者の OSの違いに対応できないため、OS依存が解消できない。

CGIプログラムの起動はサーバ側の計算機で行われるため、利用者の計算機のOS

に関係なく動作する。そのため、CGIプログラムによって SQLを自動生成し利用者にデータを管理してもらう。

Page 18: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

18 第 3章 データベース作成支援システムの提案

3.1.2 同時アクセス

DBMS、CGIプログラムからDBMSに接続することが可能。DBMSはサーバを立ち上げれば、アクセス権限のあるユーザのみサーバに接続することができる。

3.1.3 SQLの自動生成

CGIプログラムに用途ごとに必要な SQL文を仕込んでおき、データそのものだけ入力すればデータベースを作成し、管理することができる。CGIプログラムにすることで、プログラムが自動的に SQLでデータベースに命令を送信をするためデータベース作成者は視覚的にデータベースを管理することが可能となる。

DBAの計算機

Bの計算機

本システム

ブラウザ

図 3.1:データベース作成支援システム

これ以降、データベース作成支援システムの使用者をクライアントと呼ぶ。このシステムによってクライアントはクライアントの知識や技術、使用しているOS に左右されず、無料でデータベースを管理することが可能となる。また、データベースはシステム管理者の計算機に保存されるため、クライアントの計算機に負担を掛けることもない。つまり、クライアントは最低限の接続環境さえあればデータベースを管理することが可能である。

Page 19: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

19

第4章 設計

データベース作成支援システムの開発環境は以下の通りである。

表 4.1: 開発環境

用途 名称 バージョン

OS OpenBSD 5.3

DBMS PostgreSQL 9.1.2

Webサーバ apache-httpd 1.26

プログラング言語 Ruby 1.9.3

サーバとなる計算機のOSにOpenBSD[6]を使用する。OpenBSDはBSD系列のオープンソースのOSである。Theo de Raadtの開始したプロジェクトによって作成された。正しい思想と先制的なセキュリティを目的としている。

本システム

クライアントA(Windows)

クライアントB(linux)

サーバ計算機(OpenBSD)

データベース( PostgreSQL)

図 4.1:システム概要

4.1 DBサーバの構築

PostgreSQLはオープンソースの DBMSである。BSDライセンスによるフリーソフトウェアであり、UnixやWindowsなどのOSをサポートしている。UnixではApacheなどのWebサーバと連携させて使用されている。端末で起動してDBサーバにアクセスする他、プログラムからDBサーバにアクセスすることが可能である。データベース言語に SQLを使用している。

Page 20: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

20 第 4章 設計

4.2 Webサーバの構築

本研究で使用しているOpenBSDには apache-httpdが付属している。これを使用してWebサーバを構築する。

4.3 Ruby

Ruby[7]はまつもとゆきひろが開発した、手軽さとシンプルな文法が特徴のオブジェクト指向のスクリプト言語である。作成したプログラムをコンパイルする必要がないためコードを書いた後すぐにプログラムを実行することができる。そのため、コンパイルが必要なプログラミング言語と比較して、大きなプログラムでも修正が容易に行なうことができるというメリットがある。PostgreSQLの DBサーバにアクセスすることもでき、CGIによってWeb上でRubyプログラムを起動することができる。

4.4 CGI

CGIはWebサーバがWebブラウザからの要求によってプログラムを起動するための仕組みである。プログラムの起動はサーバ側の計算機によって行われるため、クライアントの計算機のOSに依存することなく起動することができる。

Page 21: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

21

第5章 実装

データベース作成支援システムは名簿や在庫管理表を作成するためのアプリケーションである。システムを誰でも利用できてしまうと、データの安全性が保たれないため、ユーザ登録されているクライアントのみが利用できるものとする。

DBMSを利用し、名簿を作成するためには、データベースを作成する機能、テーブルを作成する機能、テーブルのデータを編集する機能が必要である。また、登録されているユーザしか利用できないため、ユーザ認証を行う機能も必要である。

5.1 データベース作成

実際に本システムを利用する流れをもとに説明していく。

5.1.1 ユーザ登録

ブラウザからユーザ登録を行うが、重複登録やイタズラによる登録を防ぐために指定のアドレスにメールを送信してもらい、クライアントにユーザ登録に必要なパスワードを発行する。ブラウザにはメールを送信したアドレスとメールに記載されたパスワードを入力する。入力した情報が一致した場合はユーザ登録のページに進む。

5.1.2 テーブルの作成

本研究第 2章で説明したように DBMSでデータを管理するためにはテーブルを複数作成する必要がある。テーブルの作成のためにはテーブル名、テーブルの項目数、項目名、項目のデータ型を決める必要がある。テーブル名、テーブルの項目名はクライアントが自由に決めることができる。テーブルの項目数は本システムでは10個までとする。データ型には複数あるが、対象が DBMSの使用経験のない者かつ、作成するデータベースが名簿や商品表などであるため文字列には text型、数字には integer 型を使用する。

5.1.3 データの閲覧

作成したデータを閲覧する機能。それぞれのテーブルのデータを閲覧したり、検索をする機能。検索については項目とデータの内容から行う。

Page 22: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

22 第 5章 実装

5.1.4 データベースの編集

必要のなくなったデータベースやテーブルを削除したり、別のデータベースで管理したいデータがあるときに新規でデータベースを作成する機能。新規作成、削除は名前を入力するだけでできるものとする。

5.2 システムの概要

本システムによって、クライアントはWebに接続できる環境があれば、データベースを作成することができる。また、クライアントの計算機にデータを保存する必要がない。クライアントの計算機の OSに依存せず、同じデータを複数のクライアントで管理でき、かつ SQLの知識の必要がないシステムを構築することが可能である。

本システム

データベース( PostgreSQL)

ブラウザ

ユーザ名

データベース名

パスワード

送信

クライアント

一致

不一致

図 5.1:本システムへのアクセスの流れ

5.3 メールによるユーザ登録

qmailサーバでメールの送受信を行う。メールを受信したら自動的にパスワードを生成する。パスワードは 1から 9までの数字とアルファベットの大文字と小文字からランダムで 8文字が選択させる。このパスワードが記されたメールをメール送信者へ送り返す。そして、メール送信者のアドレスと生成したパスワードを記したテキストファイルが作成される。メール送信者は本システムのログインページで受け取ったパスワードとメールアドレスを入力する。入力したデータとテキストファイルの内容が一致した場合にユーザ登録のページに進むことができる。アドレスを直接する場合、入力誤入力の恐れがあるのでQRコードを作成し、ユーザの新規登録のページに掲載する。

5.4 データベースを管理するプログラム

クライアントがDBMSを使用する際には SQLを使う必要がない。実際にDBMS

に命令を送るのはデータベース作成支援システムの役割である。本システムの各機能のプログラムを説明していく。また、本システムはDBMSに SQLで命令を送信し、帰ってきたデータをクライアントのブラウザに送信するプログラムである。

Page 23: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

5.4. データベースを管理するプログラム 23

5.4.1 例外処理

DBMSに命令を送るとき、クライアントが存在しないデータやテーブル、データベース名を入力することや、DBサーバが落ちることなど予期しない問題が発生する場合がある。プログラムでそういった問題を判別することはできないため、例外処理を施す。

✓ ✏

begin

実行されるプログラム本システムでは SQL文の送信を行なう

rescue

問題が発生した場合の処理else

問題が発生しなかった場合の処理end✒ ✑

上記のようにプログラムを書くことで予期せぬ問題が発生した場合もプログラムが動作を中断することなく実行される。

5.4.2 テーブルの管理

テーブルを作成するために必要な項目数と項目名の決定を行うプログラムは以下の通りである。

Page 24: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

24 第 5章 実装

✓ ✏

print"<p>テーブル名:#{name}</p>"

print"<table><tr>カラム名の入力と型名の選択</tr><tr><td></td><td>

カラム名</td><td>型の指定</td></tr>"

print"<form method=\"POST\" action=\"./create2.rb\"><br>"

while i <= a

printf("<tr><td>カラム%d:</td><td><input name=\"%d_text\"

size=\"40\"></td><td><select name=\"%d_type\"><option>integer

<option>text</td></tr>",i,i,i)

i += 1

end

print"<input name=\"a_hidden\" type=\"hidden\" value=\"#{user}

\">"

print"<input name=\"b_hidden\" type=\"hidden\" value=\"#{db}

\">"

print"<input name=\"v_password\" type=\"hidden\" value=\"#{pass}

\">"

print"<input name=\"c_hidden\" type=\"hidden\" value=\"#{name}

\">"

printf"<input name=\"d_hidden\" type=\"hidden\" value=\"%d

\">",a

print"</table><input type=\"submit\" value=\"OK\"></form><br>"

✒ ✑

編集ページでテーブル名と項目数を選択する。項目の数まで入力窓がでるのでそこに項目名を入力する。また、入力窓のとなりに項目の型の選択欄があるので使用したい型を選択する。これでテーブル名と項目数、項目の型が決定される。

✓ ✏

conn = PGconn.connect(pghost,pgport,pgoptions,pgtty,dbname,dbuser

,passwd)

tuple = conn.exec(

"create table テーブル名 (項目名 項目型);"

)

✒ ✑

作成したテーブルにはデータを追加していく必要がある。データを追加したいテーブルを選択すると項目数分の入力窓が用意される。そこに追加したいデータを入力するだけでデータの追加が行えるプログラムを作成した。

Page 25: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

5.4. データベースを管理するプログラム 25

✓ ✏

conn = PGconn.connect(pghost,pgport,pgoptions,pgtty,dbname,dbuser

,passwd)

tuple = conn.exec(

"select tablename from pg_tables where table

owner =’ユーザ名’ order by tablename;"

)

tuple .each{|line|

line.each do |col|

printf"<option>%s",col[1]

end

}✒ ✑

実際には上記のように SQL文でクライアントの持つテーブルの一覧をデータベースに請求しているが、クライアントはドロップメニューからテーブル名を選択するだけでよい。

✓ ✏

conn = PGconn.connect(pghost,pgport,pgoptions,pgtty,dbname,dbuser

,passwd)

tuple = conn.exec("INSERT INTO テーブル名 VALUES(’ 追加したいデータ’);")

✒ ✑

データの変更はテーブルのデータ一覧と列ごとに編集ボタンが用意されているため、編集したい列を選択する。選択した列のデータがそれぞれ入力窓の中にでてくるので、変更を加えた後にOKボタンを押すとデータの変更が完了する。

Page 26: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

26 第 5章 実装

✓ ✏conn = PGconn.connect(pghost,pgport,pgoptions,pgtty,dbname,dbuser

,passwd)

tuple = conn.exec(

"select * from #{up};"

)

tuple .each{|line|

print"<tr>"

print"<form method=\"POST\" action=\"./update2.rb\">"

line.each do |col|

printf"<td><input name=\"text_%d\" type=\"text\" value=\"%s\"

size=\"20\"></td>",i,col[1]

ball[i] = col[1]

i+=1

a+=1

end

print"</tr>"

}

print"<input name=\"a_hidden\" type=\"hidden\" value=\"#{user}\">

<input name=\"b_hidden\" type=\"hidden\" value=\"#{db}\">

<input name=\"c_hidden\" type=\"hidden\" value=\"#{up}\">

<input name=\"v_password\" type=\"hidden\" value=\"#{pass}\">"

print"<input name=\"d_hidden\" type=\"hidden\" value=\"#{a}\">"

print"</table>"

print"<input type=\"submit\" value=\"編集\"></form>"

✒ ✑

データの削除は列ごとに行う。DBMSではデータを削除する場合、該当するデータの項目名とデータを照合して削除する。そのため同じ行に同一のデータがある場合全て削除してしまう。よって、主キーを参照してデータの削除を行う。これは主キーは必ず一意なデータでなければならないという決まりがあるためである。

✓ ✏

conn = PGconn.connect(pghost,pgport,pgoptions,pgtty,dbname,dbuser

,passwd)

tuple = conn.exec(

"delete from テーブル名 where 列名 = 主キーとなるデータ;"

)

✒ ✑

Page 27: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

5.5. システムの使用方法 27

5.5 システムの使用方法

データベース作成支援システムでは、ログイン画面でユーザ名とデータベース名、パスワードを入力することでデータベースにアクセスすることができる。

図 5.2:ログイン画面

データベース支援システムにログインできると図 5.3のページに入る。クライアントはこのページからデータベースの編集、テーブルの編集、データの閲覧を選択して作業を開始する。

図 5.3:メイン画面

図 5.4が閲覧画面である。各テーブルのデータの一覧が表示される。また、検索フォームがあり、項目名を指定し、データを入力することで必要なデータだけを表示させることができる。図 5.5が検索を行った結果である。

Page 28: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

28 第 5章 実装

図 5.4:閲覧画面

図 5.5:検索結果画面

図 5.6がテーブルの新規作成の画面である。クライアントはテーブル名と項目の数を指定し、項目名と項目の型を決定する。項目の型は、項目に格納するデータが文字列の場合は textを、数字の場合は integerを選択する。全て選択、入力が終わるとテーブルの新規作成が完了する。

Page 29: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

5.5. システムの使用方法 29

図 5.6:テーブル作成画面

Page 30: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部
Page 31: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

31

第6章 結論

今回作成したシステムにより、簡単な名簿や在庫管理表を作成することができた。DBサーバを立ち上げ、サーバ側にデータを格納することでクライアントの計算機に負担をかけることがなく、CGIプログラムがPostgreSQLに自動的に SQLで命令を送信してくれるため、SQLを知らないクライアントでもデータベースを管理することができる。ただし、データベースを管理する際に正規化の知識だけは必要不可欠なため、クライアントには正規化の知識が求められる。

6.1 今後の展望

クライアントが SQLを使用せずにデータベースを管理できるシステムを作成するという目標を達成することができた。しかし、正規化という専門知識だけはどうしても必要となる。正規化についても、初めて知るクライアントにとっては複雑な処理をする必要があり、進んで行いたいものではない。データの正規化を補助するような仕組みを考える必要がある。

Page 32: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部
Page 33: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

33

参考文献

[1] 株式会社インセプト."SQL とは【Structured Query Language】-IT 用語辞典 e-Words".http://e-words.jp/w/SQL.html,(2014-01-14).

[2] Micrrosoft. Access 2010 - Office.com".http://office.microsoft.com/

ja-jp/access/,(2014-01-14).

[3] Micrrosoft Windows.".http://windows.microsoft.com/ja-jp/windows/home,

(2014-01-14).

[4] Oracle"Hardware and Software, Engineered to Work Together.".http://

www.oracle.com/index.html/,(2014-01-14).

[5] The PostgreSQL Global Development Group ."PostgreSQL:The world’s most

advanced open source database".http://www.postgresql.org/,(2014-01-14).

[6] OpenBSD."OpenBSD".http://www.openbsd.org/,(2014-01-14).

[7] Rubyコミュニティ."オブジェクト指向スクリプト言語 Ruby".http://www.ruby

-lang.org/ja/,(2014-01-14).

Page 34: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部
Page 35: データベース作成支援システム - koeki-prj.orgyuuji/seminar/c1101282.pdf · データベース作成支援システム 指導教員廣瀬雄二 東北公益文科大学公益学部

35

付 録A

次ページ以降からデータべース支援システムのソースを記載する。