データベースの基礎知識
データベースとはどういったもののことを指すのでしょうか。現在の社会ではあらゆるところにデータベースが活用されています。辞書から顧客名簿、検索エンジンなどなど、データベースが関わると思われるものは多岐にわたりますが、それら全てをデータベースと呼べるわけではありません。
データベースとは
データベースとは、情報(データ)の集合体です。しかし単なる集合体ではデータベースではありません。そのデータの集合体の情報を、追加したり削除したり検索したり加工したりという操作が、一元的に管理できるように予めまとめておかれたデータ集合体の管理システムを「データベース」と呼びます。データ集合体を管理するための基礎(ベース)となるものです。
データベースは、きちんと整理陳列されて運用されている図書館のようなものです。そこに管理のシステムがなく本がでたらめに置いてあるだけであれば、それはもう図書館とは呼べないように、単なるデータの集合体でそこに管理システムがなければデータベースとは呼べません。
データベースの作り方の基本
さて、データベースがいかなるものか分かったところで、今度はデータベースの作り方の基本を学びましょう。もちろん実際の作成はソフト上での作業が多く、それは個別のソフトの仕様によるので多岐膨大なものです。
しかし、データベースの作成においては、ソフト上の個別具体的な作業以前の、どういったデータベースをつくり、どう活用するのか、といった根本の部分が重要になっています。データベースの基礎を理解していない方だと、プログラミングには精通していても的外れな設計にしてしまうことも。
作成する目的を明確にする
まずは、データベースを作成する目的を明確にしておきます。たとえば、顧客名簿の管理や蔵書データの閲覧、ネット通販の運営などです。また、そこで実現されるべきことは何かということを考えます。書籍のネット通販だとしたら、サイトから買い物をする人が本を探しやすくスムーズに購入ができるということなどになるでしょう。
またデーターベースを使用するユーザーが複数いる場合は、ユーザーごとにどういったデータが必要かも考えていきます。上記の例の書籍のネット通販であれば、個別の顧客が買い物のために使うということのほか、通販運営側が管理のために使うといったことがあるでしょう。
そして、データベースの使われ方を想定しながら、どのようなデータが必要なのかを考えていきます。まずは大きな基礎となるデータから考えていき、次に細部を考えていくのが、そのデータベースの目的の根本を見失わない進め方でしょう。
書籍通販の例
まず「本」というデータがあり、「顧客」というデータがあるでしょう。そこに、顧客が注文するというアクションによって「注文履歴」というデータが生じる、といった具合です。本の出版社や顧客の年齢といったデータも最終的には必要となります。
付随する細かなデータに関しては後からにして、大きな基礎となるデータから細部へ向かって進めていくという鉄則に沿って考えていきましょう。
テーブルの作成
計画図として、必要なデータと流れが整理できたら、これをテーブルと呼ばれる表のかたちに落とし込んでいきます。例えば、下のようなかたちになります。
学生
学生ID | 学生氏名 | 年齢 | 学部 |
0001 | 山田太郎 | 22 | 文学 |
0002 | 佐藤実 | 20 | 工学 |
0003 | 田中花子 | 18 | 理学 |
学部
学部 |
文学 |
法学 |
理学 |
工学 |
このテーブルで「学籍ID」列は「主キー」と呼ばれるもので、テーブルに必ず一つは存在しないといけないものです。データを識別するために設定します。
学生氏名は同姓同名がありえますから、主キーには使えません。学籍IDは同じものはないということで、主キーとすることができます。主キーとして設定できるものがなければ、それ自体には意味がない「1、2、3、4…」などを代理キーを設けます。
「学部」列は「外部キー」と呼ばれるものにあたります。二つのテーブルをつなぐものです。この場合、学生テーブルと学部テーブルをつなぎます。
外部キーはテーブル間に親と子の関係をつくっています。学部テーブルが親で、学生テーブルが子です。学部テーブルに登録されていない学部は、学生テーブルに存在してはいけません。また、子に対して複数の親が存在してもいけません。
正規化
テーブルの設定ができたら、次はそのテーブルを「正規化」していきます。正規化とはテーブルを分解して冗長性をなくしていくことです。
正規化を行うにあたって、「従属」ということが重要となっています。XによってYが一意に定まることを、XにYが従属しているといい、「X→Y」と書きます。
第1正規形は、一つのセルに一つの値が存在するテーブルのことをいいます。たとえば、保護者テーブルとして下のようなテーブルがあるとき、
保護者
学籍ID | 学生氏名 | 保護者氏名 |
000A | 鈴木次郎 | 鈴木太郎
鈴木花子 |
000B | 田中里子 | 佐藤まさる |
000C | 大木豊 | 大木富子 |
これを第1正規形に正規化すると、
保護者
学籍ID | 学生氏名 | 保護者氏名1 | 保護者氏名2 |
000A | 鈴木次郎 | 鈴木太郎 | 鈴木花子 |
000B | 田中里子 | 佐藤まさる | |
000C | 大木豊 | 大木富子 |
となります。
第2正規形は、主キーに対して列が従属しているテーブルのことをいいます。たとえば、学生テーブルとして下のようなテーブル(大学IDと学生IDが主キー)があるとき、
学生
大学ID | 大学名 | 学生ID | 学生氏名 | 学部ID | 学部名 |
C001 | 大山大学 | 0001 | 川口はじめ | D004 | 工学 |
C002 | 都大学 | 0002 | 北川豊子 | D001 | 文学 |
C001 | 大山大学 | 0003 | 下村潤 | D002 | 法学 |
このテーブルは第1正規形にはなっています。しかし、学生IDがどのような形であっても、大学名は大学IDで決まってしまいます。この状態は、大学名が主キーである学生IDに従属していません。
これを第2正規形に正規化すると、
学生
大学ID | 学生ID | 学生氏名 | 学部ID | 学部名 |
C001 | 0001 | 川口はじめ | D004 | 工学 |
C002 | 0002 | 北川豊子 | D001 | 文学 |
C001 | 0003 | 下村潤 | D002 | 法学 |
大学
大学ID | 大学名 |
C001 | 大山大学 |
C002 | 都大学 |
といったように、主キーの一部と従属だった列を新たなテーブルに分解します。
第3正規形は、主キーに対して全ての属性が従属であり、「推移的関数従属」も存在していないテーブルのことです。推移的関数従属とは、段階的な従属関係のことです。具体例で説明していきましょう。先ほどの学生テーブルと大学テーブルです。
学生
大学ID | 学生ID | 学生氏名 | 学部ID | 学部名 |
C001 | 0001 | 川口はじめ | D004 | 工学 |
C002 | 0002 | 北川豊子 | D001 | 文学 |
C001 | 0003 | 下村潤 | D002 | 法学 |
大学
大学ID | 大学名 |
C001 | 大山大学 |
C002 | 都大学 |
このテーブルは第2正規形にはなっています。しかし「学生ID→学部ID」かつ「学部ID→学部名」となっているため、「学生ID→学部ID→学部名」となっており、段階的な従属関係つまり推移的関数従属が存在するため、第3正規形にはなっていません。
これを第3正規形に正規化すると、
学生
大学ID | 学生ID | 学生氏名 | 学部ID | 学部名 |
C001 | 0001 | 川口はじめ | D004 | 工学 |
C002 | 0002 | 北川豊子 | D001 | 文学 |
C001 | 0003 | 下村潤 | D002 | 法学 |
大学
大学ID | 大学名 |
C001 | 大山大学 |
C002 | 都大学 |
学部
学部ID | 学部名 |
D001 | 文学 |
D002 | 法学 |
D003 | 理学 |
D004 | 工学 |
3つのテーブルに分解されることになります。
データベースソフトの選び方
さて、企業であれ個人の学習のためであれ、データベースを作成する際、データベースソフトを使用します。数あるソフトの中から、どうやって状況に合ったソフトを選んだらよいのか、考えていきましょう。
使用用途や規模を考える
まずはどういった環境、用途、規模で使われるデータベースなのかを考える必要があります。扱う情報量はどれくらいか、同時に操作する人間は何人くらいなのか、求められる信頼性や効率はどれくらいのものなのか、精査する必要があるでしょう。それに応じたソフトを、予算面も考慮して選ばなくてはなりません。
予算が許せばいくらでも高機能なデータベースソフトを使えばよいというものでもありません。高機能なソフトはそれだけ多くの設定を必要とし、運営にも高度なエンジニアが必要とされます。本来エンジニアでないような人間が扱うのであれば、高機能よりも扱いやすさを基準に選ぶ必要があります。
また、会計、在庫管理などの用途によって、業種ごとにカスタマイズされたパッケージも販売されています。用途と予算によっては、それらも選択肢に入ってくるでしょう。
サポートやセキュリティを確認
セキュリティやサポートに関しても、確認しておきましょう。たとえば顧客情報の流出は、企業にとって信頼を失う大きな痛手です。コストや運用の仕方との兼ね合いで、どのレベルのセキュリティを確保するのか探っておく必要があります。また、導入や運用に関してのサポート体制も各社で異なるので、その面も考慮しての選択となります。
まとめ
以上、データベースの基礎となる考え方から、入門的なデータベースソフトの紹介までを見てきました。とくにデータベースの根本的な設計の考え方に関しては、重要な部分となります。ソフトによる実践的な作成を進めて習熟していくなかでも、再三立ち戻って確認する価値の大きな部分です。こちらの記事を入り口に、深めていっていただければと思います。