誰にでもできる!システム開発  RSSを登録する

73%は失敗と言われている、システム開発プロジェクトを成功させるためのテクニックや考え方をお届けします。新人エンジニアが失敗しやすいポイントも詳しく解説しています。

現在休刊中です    
解除

規約に同意して

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/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
現在休刊中です
解除

規約に同意して

最近の記事

上へ戻る