システム開発 さらにテーブルを正規化する。

システム開発 では、データベースの設計が上手くいっていると、プログラミングもスムーズに進みます。

前回、テーブル設計を見直したことで、「利用者」と「書籍」の両テーブルに、データが繰り返し入力されるフィールドができました。

そこで今回は、正規化の復習を兼ねて、もう一度考えてみましょう。

どんなテーブルに分けて、どのようにフィールドを変更すれば、テーブルを正規化できるでしょうか。

ヒントは、テーブルにまとめる時のコツと同じで、
「繰り返し入力する可能性のあるものは、別のテーブルに分ける」
ことです。


【1】利用者テーブルでは、「性別」が繰り返し入力されています。

system-12.gif


【2】書籍テーブルでは、「著者」と「出版社」は同じデータが入力される可能性があります。

system-13.gif

・同じ著者が、何冊も本を書くことがある
・同じ出版社から、たくさんの本が出版される

今回はレコード数が少ないので、実際には重複していませんが、「重複する可能性」があるなら、別のテーブルにすることを検討します。


それでは実際にテーブルを正規化してみましょう。

【3】性別は別のテーブルに分け、性別CDで参照できるようにします。

system-19.gif


【4】著者と出版社も別のテーブルに分け、それぞれ CD で参照できるようにします。

system-18.gif


【5】貸出履歴テーブルに変更はありません。

・貸出履歴
system-14.gif

これでテーブルの正規化が完了しました。

テーブルを正規化することで、同じデータを何度も入力する手間が省け、入力ミスも防げます。また保存時の容量も少なくて済みます。


【解説】
最終的な各テーブルの関係をまとめると、以下の図のようになります。

system-25.gif

この図の関係がわかれば、リレーショナルデータベースを理解することができます。掴んで欲しいポイントを以下にまとめます。

(1)「貸出履歴」テーブルがメインで、他のテーブルは、データを参照するために使われています。

(2)利用者や書籍のテーブルからも、さらに他のテーブルを参照している点に注目してください。

(3)貸出履歴テーブルの利用者CDを変更するだけで、氏名や性別は、自動的に変わります。CD が変われば、参照するデータが変わるわけですから、当然ですよね。

(4)同様に、貸出履歴テーブルの書籍CDを変更すると、タイトルや著者、出版社が自動的に変わります。

(5)逆に、利用者テーブルの変更点や、書籍テーブルの変更点は、すぐにクエリに反映されます。貸出履歴テーブル側では、何も変更する必要はありません。

つまり、利用者の氏名の修正や、書籍のタイトルの修正は、一箇所だけで済むということです。

スポンサードリンク

スポンサードリンク






システム開発実践講座 TOPへ