ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

トップダウンアプローチとボトムアップアプローチによる違い

2007-03-25 19:16:24 | 開発ネタ

 前に、佐藤正美氏のデータ収集の方法と、正規化の手法では違いがでるというケースを書いたけど、それについて書くのと、きのう、トップダウンアプローチについて書いたけど、具体的に書いていないので、今回は、それもふくめて、書いてみたいと思います。




■考える内容

 ターンアラウンド伝票というものについて考えて見ます。

 これは、受注時に、伝票を書くと、カーボンが後ろに入っているので、いっぺんに納品書などもかけてしまうものです。
 なんでターンアラウンド伝票って言うかって言うと、この伝票、納品先に行き、納品伝票とかが切り取られて、また帰ってくる(ターンアラウンドしてくる)ので、ターンアラウンド伝票と呼ばれます。

 このターンアラウンド伝票の仕様については、業界ごとに決まっていて、統一伝票と呼ばれます。

 さて、今回は、統一伝票そのものを考えるのではなく、佐藤氏の以下のページ
3P形式の伝票
http://www.sdi-net.co.jp/FAQ117.htm

で取り上げられている3P伝票について考えて見ましょう。つまり、


受注伝票には
{受注番号、顧客番号、品目番号、受注数、受注日}

出荷伝票には
{出荷番号(受注番号と同じ)、顧客番号、品目番号、受注数、出荷日}

請求伝票には
{請求書番号(受注番号と同じ)、顧客番号、品目番号、受注数、請求日、請求金額}


が書かれているとします。ここで、受注番号、顧客番号、品目番号のところには、下にカーボンが入っていて、まったく同じ値が書き込まれます。
また、受注番号がかかれるところに、出荷伝票では出荷番号、請求伝票では請求番号と書かれているため、受注番号、出荷番号、請求番号は、まったく同じ番号になるものとします。

 なお、今回は特注品で、1受注品目1枚の伝票とします



■佐藤氏の方法の場合

これについては、さきほどのところ
3P形式の伝票
http://www.sdi-net.co.jp/FAQ117.htm

に書かれているので、こちらを参照してください。




■ボトムアップアプローチでは

帳票をもとにエンティティを作成する、ボトムアップアプローチでは、以下のようになります。

●第一正規形で

品目番号、受注数、

が繰り返しになるので、これを切り出します。

受注伝票には
{受注番号、顧客番号、受注日}

受注明細
{受注番号、明細番号、品目番号、受注数}

となります。出荷、請求でも同じなのですが、逆に言うとおなじなんで、省略します。

●第二正規形で
 結局、受注番号をキーとして、出荷や請求の名前も連動して動いてしまうので、

受注伝票には
{受注番号、顧客番号、受注日、出荷日、請求日、請求金額}

受注明細
{受注番号、明細番号、品目番号、受注数}

ということになります。出荷伝票や、請求伝票は、受注テーブルを検索してつくることになります。




■トップダウンアプローチ(1:見たままを書く)

 では、トップダウンアプローチで、みたままを各方法だとどうなるか。

 みたままでいうと、伝票は3枚あるのですから、3つ独自のエンティティということになります。そーするとテーブルは3つ+第一正規形で分離した明細です。

受注エンティティ
{受注番号、顧客番号、品目番号、受注数、受注日}

出荷エンティティ
{出荷番号(受注番号と同じ)、出荷日}

請求エンティティ
{請求書番号(受注番号と同じ)、請求日、請求金額}

受注明細エンティティ
{受注番号、明細番号、品目番号、受注数}

の形になります。
 このとき、受注明細と、出荷明細、請求明細のエンティティが一緒なので、まとめていますが、実際に、この伝票で言っているのは、書き始めるときに、一緒(カーボンコピーするから)っていうだけで、その後、書き換えられるかもしれません。なので、まとめられるかどうかは、あとでヒアリングしてみないといけません。




■トップダウンアプローチ(業界標準から考える)

 まず、受注と出荷、請求というのは独立したエンティティと考えるのが普通です。
 というか、そもそも、受注と出荷は1:1になるとは(業界によっては)限りません。

 受注残処理というのがあって、受注した商品が在庫にない場合、とりあえず、現在ある在庫分だけを払い出し、あとからのこりの分の商品を送るというものです(一部の業界では、受注残処理はなく、在庫分だけを払い出し、残りはキャンセルとなる場合もあります)。

 この場合、1つの受注に対して、出荷はN、請求は不明となります(請求は、請求日が〆日をまたがない場合、N個にわけても1個で請求の場合もあるし、分ける場合もあります。またぐ場合、かりにいっぺんに払ったとしても(未着分も含め)、会計上は、納品した分が売上、受注残分は、前受金と分かれます)。

 まず、そこから聞くことになりますが、受注残がある場合でも、無い場合でも、以下のテーブルにしておけば安全ではあります(標準的には、このような構造になります)

受注エンティティ
{受注番号、顧客番号、品目番号、受注数、受注日}

受注明細エンティティ
{受注番号、明細番号、品目番号、受注数}

出荷エンティティ
{出荷番号、受注番号、出荷日、納品場所}

出荷明細エンティティ
{出荷番号、明細番号、品目番号、受注数}

請求エンティティ
{請求書番号、受注番号、請求日、請求金額}

請求明細エンティティ
{請求書番号、明細番号、品目番号、受注数、(請求時)単価}


受注時に出荷、請求のデータが作られますが、その後、受注残があるときのためなどで、受注分割されてもいいように、受注1に対し、出荷N,請求Mのレコードが作れるようにします(出荷-請求対応が必要な場合はN:Mになってしまうので、対応表が新規に必要になります)。

 なお、納品先と受注元が違う場合があるので、出荷エンティティの納品場所を入れています。請求明細エンティティに、単価が入っているのは、商品(品目)のマスタからとってきても、受注から請求の間に、商品の単価が変わってしまうと、受注時の単価がわからない=請求金額もわからないため、受注時に、単価を保存しておきます。




■もし、業界知識が無いと→大幅変更は、必至

 このように、業界知識があれば、受注残は?とか、納品場所と受注先は同じ?とか、気が付き、ヒアリングのときに、「現場に」聞くことができます(偉い人は、こーいうとき、理想論を言って、よくわかんないときがある)。

 で、もし、これ、ボトムアップアプローチのように、まとめちゃった後で、受注残があって、テーブル分けないといけなくなったら・・・どーなりますう??

 いきなりテーブル増えちゃうんだよ、アクセス方法変わっちゃうよ(@_@!)

 っていうことで、大幅開発変更っていうことになります。
 (いや、作り直しをしたほうが早いんじゃないかあ。。)

 今後、そういった話から、現在の開発の諸相を点描していってみたいとおもいます。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Hello World程度のデータベース(その12:概念スキーマ(10)ER図)

2007-03-25 14:06:40 | 土日シリーズ

情報処理とは何から、データベースの基本的な話(情報処理試験のデータベーススペシャリスト程度の話まで)を書く、土日のシリーズ「Hello World程度のデータベース」です。

 いままで、正規化について書いてきたりして、エンティティと属性について、分けました。今回は、それを成果物としてER図にまとめます。




■ER図

 ER図は、エンティティ(E)とリレーション(R)を書きます。。。
 けど、それだけではテーブルができないので、属性値も書きますね。

 で、書き方には、J.マーチンのER図(足の羽みたいなのがあるやつ)とかIDEF1Xとかあります。今日は、IDEF1Xで書きます。

 IDEF 1Xについては、
アイデフワンエックス(IDEF1X)―リレーショナル・データモデルの新しい表現法
ISBN:9784822290283 (482229028X)

という本があるのですが、今日の内容は、その本を参考にして書いてます。




■IDEF 1XのER図

 で、そのER図は、こんな感じになります。


 エンティティ名が、ボックスの上に入ります。
 ボックスの中に線が引いてあって、線の上に主キーを書きます。主キーは1つの場合もありますし、2つ3つが組み合わせって入ることもあります。で、組み合わせっているとき、それが、外部キー(他のものの主キー)だった場合は、うしろに(FK)とつけます。

 線の下に属性名を書きます。属性中、外部キーがあれば、うしろにFKと書きます。
 ちなみに、属性名にFKが来る場合というのは、関係はあるが、相手がなくても存在できるときに、あり得ます。

 で、関係については線でかきます。
 そして、その関係の内容(動詞句)を書きます。

 1対Nの関係にあるとき、Nのほうに黒丸をつけます。
 で、問題は1対Nの関係かどうかの見分け方なのですが、まず、1対Nの、1のほうは、主キーが入っているエンティティのほうです。Nのほうが外部キーが入っているエンティティのほうです。
 1対1であれば、Nのほうのエンティティに、主キーの入っているレコードは1件しかないです。1対Nの場合は、いくつかあり得ます。1対0は、1件もないということです。

 ただし、1対1だったら、テーブルを分ける必要は無いですし(第二正規形)、常に1対0っていうのは、関係ないってことです(^^;)なので、普通は1対1~Nのような形になります。それをわざわざ表現する場合は、黒丸のしたに、以下の文字を書いて示します(上記の本の140ページ)
黒丸のみ  1対0~N
黒丸にP  1対1~N
黒丸にZ  1対0~1
黒丸に数字 1対数字(1対3とか)


 なお、N対Mというのも考えられます(両方を黒丸でかきます)。このとき、お互いの主キーが、それぞれの外部キーになっているケースなのですが、これは、RDBには、ありません。というか、作れませんので、1対Nになるように、お互いの主キーを組み合わせたテーブルを作ります(下記の例だと、在庫がそう)。
 なお、これは、第一正規形のときに、処理される(1対Nにされる)と思います。




■ER図の例

で、これをまとめて書くと、こんなかんじ


在庫をあらわしたものです。
なお、在庫というのは存在しない、それは入庫と出庫の履歴である
という説もありますが、現実問題、会社設立から今日までの入出庫をとって
おくことはできないので、現実的には、このように在庫テーブルが存在します。

それと、動詞句ですが、しらじらしい動詞句になってしまったりする
っていうか、よくわかんない動詞句になってしまったりもするので、
省略することも多いかも。。




■汎化-スーパークラスについて

 汎化は、以下の図のように、丸に棒線をかいて、よこに、各クラスにわける基準を書きます。






っていうことで、概念スキーマ構造の操作の成果物である、ER図も描いたことで、概念スキーマはおしまいです。次は、この概念スキーマをデータベースに作る内部スキーマのお話です。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

松下、hi-hoをIIJに売却、ネット事業撤退へ!!

2007-03-25 01:40:23 | Weblog

ここのニュース
松下、ネット事業撤退へ IIJに売却
http://www.toonippo.co.jp/news_kyo/news/20070324010002001.asp

によると(以下斜体は上記ニュースより引用)

松下電器産業が、インターネット接続サービス事業「パナソニック hi-ho(ハイホー)」を、ネット通信大手のインターネットイニシアティブ(IIJ)に売却する方向で最終調整に入ったことが24日、分かった。松下は昨年にもケーブルテレビ事業を売却。成長が見込めないネット事業から完全に撤退し、主力の薄型テレビなど家電事業に集中する。


じゃあ、hi-hoの人は、いままでどおりなのか?っていうと


売却が成立すればIIJが引き継ぎ、自社のサービスに移行させる見込みだ。

とのことらしい。。うーん、これから、どーなるんでしょうね。。

って、ウィリアムのいたずらは、hi-hoに、入ってないので、
かんけいないけど(^^;)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする