2008/12/08
【誰にでもできる!システム開発】データベースの正規化
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
『誰にでもできる!システム開発』 2008/12/08 号
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ご愛読、ありがとうございます。
このメールマガジンは、システム開発を始めたばかりの方、これから始める
方向けに、筆者が日頃から心がけていることをお話しています。
扱う内容については、テクニックと考え方を半分ずつで構成しています。
思っていた内容と違う、つまらない、読む気力が無くなったという方、
購読解除はこちらからできます。
http://www.mag2.com/m/0000263428.html
著者プロフィール
http://www.shiga-it-office.com/mailmagazine/writer.html
事務所概要
http://www.shiga-it-office.com/profile.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■第26回 データベースの正規化
────────────────────────────────────
前回、データベースの正規化について触れましたので、今回は具体的に正規
化をやってみたいと思います。
サンプルとして、平成16年春期ソフトウェア開発技術者試験・午前69問目の
帳票を使います。
試験勉強をされている方は、読みながら考えてみてください。
<問題>
図は,営業所別顧客別取引明細票の出力様式である。この帳票から得られる
関係データベースの表のうちで第3正規形のものはどれか。ここで,取引番
号は顧客ごとの連番とし,値引き額は商品別の値引き率に単価と数量を乗じ
て求めるものとする。
------------------------------------------------------------------
営業所別顧客別取引明細票 取引日付:YYYY-MM-DD
営業所コード:XXX
顧客番号:XXX
営業所名:XXX 顧客名:XXX 顧客業種コード:XXX 業種名:XXX
取引番号 商品コード 商品名 数量 単価 値引き額 金額
XXXX XXXX XXXX XX XX XXXX XXXX
〜 〜 〜 〜 〜 〜 〜
XXXX XXXX XXXX XX XX XXXX XXXX
金額計:XXXXX 値引き額計:XXX 消費税:XXX 当日取引額:XXX
------------------------------------------------------------------
ア 顧客(顧客番号,顧客名,顧客業種コード,業種名)
イ 商品(商品コード,商品名,単価,値引き率)
ウ 取引(顧客番号,金額計,値引き額計,消費税,当日取引額)
エ 取引明細(取引番号,商品コード,数量,金額)
●非正規形、第1正規形
この問題の帳票は、非正規形です。
というのも、取引番号から金額までの項目が、複数行繰り返されているから
です。
テーブルにしてみると、以下のようになります。行数はN件とします。
(取引日付、営業所コード、顧客番号、営業所名、顧客名、顧客業種コード
、業種名、取引番号1、…、取引番号N、商品コード1、…、商品コードN
、商品名1、…、商品名N、数量1、…、数量N、単価1、…、単価N、値
引き額1、…、値引き額N、金額1、…、金額N、金額計、値引き額計、消
費税、当日取引額)
繰り返し項目があるため、横ならびにするとまとまりが無いですよね。
この繰り返しを排除した形が、第1正規形となります。
まずは、繰り返し部分だけ分割してみます。
・取引
(取引日付、営業所コード、顧客番号、営業所名、顧客名、顧客業種コード
、業種名、金額計、値引き額計、消費税、当日取引額)
・取引明細
(取引番号、商品コード、商品名、数量、単価、値引き額、金額)
問題文から、取引明細の金額、値引き額は計算で求められるとありますので
削除し、値引き率を追加します。
・取引明細
(取引番号、商品コード、商品名、数量、単価、値引き率)
候補キーは、取引表{取引日付、営業所コード、顧客番号}となります。
取引明細の取引番号は、取引に対する連番とのことですので、取引明細表に
取引表の候補キー項目を追加します。
・取引明細
(取引日付、営業所コード、顧客番号、取引番号、商品コード、商品名、数
量、単価、値引き率)
●第2正規形
第2正規形にするためには、候補キーの一部に関数従属する項目を別表に分
割します。
取引表の候補キーは{取引日付、営業所コード、顧客番号}ですが、その一
部の営業所コードに対して営業所名、顧客番号に対して顧客名、顧客業種コ
ード、業種名が決まりますので、これを分割します。
・取引
(取引日付、営業所コード、顧客番号、金額計、値引き額計、消費税、当日
取引額)
・営業所
(営業所コード、営業所名)
・顧客
(顧客番号、顧客名、顧客業種コード、業種名)
●第3正規形
第3正規形は、候補キー以外の項目に関数従属している項目を別表に分割し
ます。
顧客表の候補キーは{顧客番号}ですが、業種名は顧客業種コードに対して
関数従属しますので、業種表に分割します。
・顧客
(顧客番号,顧客名,業種コード)
・業種
(業種コード,業種名)
同様に、取引明細表の候補キーは{取引日付、営業所コード、顧客番号、取
引番号}ですが、(商品名、単価、値引き率)は商品コードに対して関数従
属しますので、商品表に分割します。
・取引明細
(取引日付、営業所コード、顧客番号、取引番号、商品コード、数量)
・商品
(商品コード、商品名、単価、値引き率)
まとめると、以下のようになります。
問題の解答はイですね。
・取引
(取引日付、営業所コード、顧客番号、金額計、値引き額計、消費税、当日
取引額)
・取引明細
(取引日付、営業所コード、顧客番号、取引番号、商品コード、数量)
・営業所
(営業所コード、営業所名)
・顧客
(顧客番号,顧客名,業種コード)
・業種
(業種コード,業種名)
・商品
(商品コード、商品名、単価、値引き率)
------------------------------------------------------------------------
■編集後記
最後までお読みいただき、ありがとうございました。
最近、体重の増加が止まらなくなりました。
父親の家系は太る家系なので、遺伝子の仕業かもしれません。
とは言っても、やはり健康のために太りすぎは良くないので、再び減量に挑
戦です。
以前にも何度か減量を行い、それなりに痩せたこともあったのですが、近年
では楽して痩せる方法ばかり試していたためか、効果が薄かったようです。
やはり体を動かすのが一番と思い、エアロバイクを購入しましたので、ダイ
エッターの気持ちを天津木村さんのように吟じてみたいと思います。
それでは吟じます。
通販でエアロバイクを買って〜
部屋で組み立てていると〜
なんだか痩せそうな気がする〜
あると思います!
そして、お正月が来るのが怖いです。
ご感想・ご意見・ご要望などありましたら、気軽にご連絡ください♪
では、また次回お会いしましょう!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
『誰にでもできる!システム開発』 2008/12/08 号
本日のメールマガジンを読んだ感想をお聞かせください。
お寄せいただいた感想は、メールマガジン上で紹介させていただくことが
ありますので、ご了承ください。
配信中止はこちらから↓
http://www.mag2.com/m/0000263428.html
メールアドレスの変更はこちらから↓
http://www.mag2.com/m/0000263428.html
ご意見&ご感想はこちらから↓
http://www.shiga-it-office.com/mailmagazine/ImpressionFrom.html
コンサルティングのご相談はこちらから↓
http://www.shiga-it-office.com/inquiry.html
発行元 志賀IT事務所
http://www.shiga-it-office.com/
関連メールマガジン 「誰にでもできる!インターネット活用術」
http://www.mag2.com/m/0000263426.html
関連ブログ
☆コンサル日和
http://d.hatena.ne.jp/kei_onpu/
☆爆裂!C#野郎
http://csharp.yaminabe.info/
☆10年戦える開発技術
http://10year.yaminabe.info/
☆情報処理技術者試験午前対策
http://am.yaminabe.info/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━



