http://www.netlaputa.ne.jp/~hijk/study/ae/datnom.html#A01
ここのサイトなどにあるように繰り返しを無くすとあるのですが、第一になっても繰り返しがなくなったように感じません。
何が繰り返しているのか、もしくは繰り返しとは何か、確実に何か勘違いしています。
今は上のサイトの図では繰り返してるのは
商品明細ではなくて受注番号から担当営業名のところが繰り返し出てきているように感じています。
何とか判るように教えてください
http://www.hatena.ne.jp/1091460292#
実は非正規形から第一正規形への変換が全く違った考えをしていました。 http://www.netlaputa.ne.jp/~hijk/study/ae/datnom.html#A01 ここのサイトなどにあるように繰り返.. - 人力検索はてな
URLはダミーです。
ここで問題となっている繰り返しと言うのは、一つのレコードの中での繰り返しということだと思います。
正規化されていないと
受注番号〜担当営業名、商品明細1、商品明細2、商品明細3…
と言うレコードになります。商品明細が繰り返し登場していますね。
このレコードと同じ情報をあらわすのに、
受注番号〜担当営業名を一つのレコードにし、商品明細1、商品明細2…をそれぞれ一つのレコードにするのが第一正規形への変換だと思います。
得意先番号から得意先名が、担当営業番号から担当営業名が自動的に求められるので、これもある意味繰り返しと言えますが、繰り返し度が低い(なにそれって感じですが)ので、さらに正規化したいときだけ第二、第三正規形で対応する、と言うことではないでしょうか。
まずは「一つのレコードの中での同じ項目の繰り返し」をなくすことが重要だってことだと思います。
繰り返しはなくならなくていいのです
第1正規化は、むしろ冗長性は増します
正規化によって、おなじレコードの中に複数のデータが存在するのを無くす処理が第1正規化です。
ですから、上のサイトで繰り返し出てきているのは問題ありません。
URLの先をご覧になると分かりやすいと思います
非正規系から第一正規系にするときは、<b>同一レコード内</b>での繰り返し(複数要素列挙)をなくすようにすることがポイントです。そこで、明細部を別のテーブル(B)に分けてあります。対象のデータは、正規化の結果、Aテーブルに1レコード、Bテーブルにnレコードという形に分離されます。
受注番号→担当営業者名のところは下の図にも書いてあるとおり、推移関数従属になっていますので、ここは第二から第三にするときに分離します。
たとえば、こちら参照。具体的にテーブルの中身の例も出てますし。
ご質問文中のサイトを拝見しましたが、この「繰り返し」は、商品明細(xn)の*列*グループを指していますね。
商品の種類に応じて、商品番号, 商品名, 単価, 数量, 金額 の5列がセットで右に伸びていっています(右端の「…」がそれを指していると思われます)。
商品番号1, 商品名1, 単価1, 数量1, 金額1, 商品番号2, 商品名2, 単価2, 数量2, 金額2, ..., 金額n といったかんじに、列数は、取り扱う商品の種類に応じて増えていきます。
このような固定列テーブルに対する挑戦のようなデータ構造を、なんとか固定列テーブルにしてしまうのが、第一正規化です。
第一正規化ができあがった段階では「受注番号から担当営業名のところが繰り返し出てきている」ような*行*が出ています。
って、ご質問文中のサイト、第二正規化の説明が間違ってるように思います。
Yahoo! JAPAN
1個の受注番号に複数の商品明細を「繰り返し」くっつけたのが表Xですよね。
それに対して、1個の受注番号に商品明細を「1個だけ」くっつけたのが表Bです。
もともと受注番号に「1個だけ」くっついていた担当営業名などは別の表Aにまとめてます。(これで繰り返しがなくなりました!)
コメント(1件)
遅くなりましたが皆さんどうもありがとうございました
一軒づつのコメントをかけなくて申し訳ありませんでした
みなさんの意見は大変参考になりました
今後ともよろしくお願いいたします。