PR

リレーショナルデータベース入門(リレーションの意義と必要性)

VLOOKUP関数を用いたリレーションの説明 Web開発
記事内に広告が含まれています。
スポンサーリンク

 前回の記事では、データベースの概要についてご紹介しました。この記事では、その中のリレーショナルデータベース(関係データベース)について詳しくご紹介します。

スポンサーリンク
スポンサーリンク

リレーションの意義

  前回の記事では、リレーショナルデータベースについて以下のように解説しています。

データをテーブルと呼ばれる表形式で管理し、テーブル間のリレーション(関係)を定義します。

 この「リレーション」について、リレーションとは何なのか、なぜリレーションが必要なのかを具体例と共に解説したいと思います。

リレーションが無いとどうなるか

以下のような大学の教務システムをベースにしたデータベースを例に考えてみます。

情報セキュリティ特論とWebアプリ開発概論の科目IDが重複していました。情報セキュリティ特論の科目IDは、「1012」と読み替えてください。

 一見すると、何ら問題の無いデータベースのように見えますが、実は重大な問題があります。

 このデータベースが作成された段階で、「Webアプリ開発概論」の講義を担当する教員が決まっておらず、新しく「20001」という教員IDを割り当てたまでは良かったのですが、肝心な担当教員名が分からないため、「不明」になっています。

 数日後、「教授 花子」先生が新たに着任され、無事に「Webアプリ開発概論」の講義を担当していただけることになりました。ここで、担当教員の欄を「不明」から「教授 花子」に更新する必要があるのですが、ID 1~5の5行分を更新しなければなりません。

 今回は、簡単のために5行分しかデータを作成していませんが、実際の大学では数百人程度の受講生がいることも想定されます。この場合は、数百行分のデータ更新作業が発生し、更新漏れや入力ミスのリスクが高まることは容易に想像できます。

情報セキュリティ特論とWebアプリ開発概論の科目IDが重複していました。情報セキュリティ特論の科目IDは、「1012」と読み替えてください。

 膨大な時間を割いて更新作業を行った上に、「誤字脱字をした」、「更新した箇所と更新し忘れたともなれば、せっかくシステムで効率化している意味がありません。上記のデータベースの例は、実用に耐えない悪い例なのです。
では、どうすれば良かったのでしょうか?

 端的に言えば、適切にテーブル(表)を分割せず、1つのテーブルにカラム(列)を作りすぎたことが今回のトラブルの原因です。

テーブルを分割する

 実際のデータベース設計・運用においては、規則に基づいて適切にテーブルを分割することが重要です。今回の例では、次のようにテーブルを4分割します。

 このような構造にしておけば、教員ID「20001」に紐づく教員名を「未定」から「教授 花子」に1ヶ所更新するだけで、関係する全てのレコードが実質的に更新されたことになります。
科目IDから担当教員IDを参照し、さらに担当教員IDに紐づく教員名が参照される仕組みになっています。

疑似的な検証

 上記の説明だけでは、何となく釈然としない部分もあるかと思いますので、表計算ソフトを使ってこのリレーションを疑似的に検証してみたいと思います。
補足説明の項目にはなりますが、結果的に表計算ソフトのちょっとした裏技紹介になりましたので、ぜひ最後までご覧ください。

検証用に、担当教員というカラムを一時的に復活させ、VLOOKUP関数を使ってリレーションを検証します。

D21セルには、以下のように関数を入力し、D30セルまでコピーします。

=VLOOKUP(VLOOKUP(C21;C$17:F$18;4);C$13:D$14;2)

リレーションを二重に(科目IDに紐づく教員IDを参照し、さらに教員IDに紐づく教員名を参照)しているため、VLOOKUP関数をネスト(入れ子)にします。
ネストの内側「VLOOKUP(C21;C17:F18;4)」は、C21セルの科目IDを参照し、それに紐づく教員IDを返しています。

ここで、D13セルを「未定」から「教授 花子」に書き換えると、それに伴ってD21~D25セルが自動的に「未定」から「教授 花子」に更新されました!

いかがでしたか?

リレーショナルデータベースにおけるリレーションの意義と必要性について、理解の助けになったら幸いです。

スポンサーリンク
スポンサーリンク
Web開発
シェアする
しばをフォローする
タイトルとURLをコピーしました