• ベストアンサー

正規形の定義

第二正規形と第三正規形の定義を教えてください。 どの文献を参考にしても「候補キー」や「主キー」という語を用いて説明がしてあります。が、私はそのあたりからさっぱりわからないので、とても理解しづらいです。もっと噛み砕いた、わかりやすい表現での定義を求めています。どうか、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

おっしゃるとおり正規化はメチャ判りにくいです。難しい言葉を機関銃のごとく連発して、専門家しかわからない様にしています。判ってしまえば、何てことないのですが。正規化で苦労した被害者のひとりとして、できるだけ、わかりやすい言葉で説明してみたいと思います。 実例として参考URLをご覧ください。 非正規形を見てください。商品明細が繰り返しになっています。(繰り返しているように見えませんが、商品明細が複数行あります) まず、繰り返しを排除したものが第一正規形です。実は第一正規形は2つあって、参考URLにあるのは第一正規形(その2)です。ここには有りませんが第一正規形(その1)は非正規形と同じ形で商品明細が1個だけついた形です。 混乱されるかもしれませんが、どちらも繰り返しを排除していると言う意味でまさに、第一正規形なのです。・・・・ここまでは蛇足です。 次に第一正規形を見てください。この中に親分が何人いるでしょうか。親分と言うのは何人か子分がいて、親分が右と言えば子分は右を向くのです。 実は第一正規形(その2)ではわかりにくいので第一正規形(その1)で説明します。 親分は受注番号と商品番号です。ところが数量と金額だけはひとりの親分だけの子分ではありません。実は受注番号と商品番号という2人の親分を持つのです。このとき「受注番号と商品番号」を複合キーと言います。 第二正規形は全ての親分と複合キーを元に表の編成を行ないます。 次に第三正規形です。第二正規形では実は親分-子分-孫分の関係が残っています。これを分離していきます。つまり、親分-子分、子分-孫分と言う別の表に分離します。大家族を核家族化するわけですね。 お分かりいただけたでしょうか。わかりにくければ、補足ください。 原点に戻って、蛇足の第二段。 主キーとは親分または複合キーの事です。 候補キーとは主キー、または主キーの代名詞、または主キーの代理が出来るもの。 本当は逆で候補キーの中から一番いいのを選んで主キーとするのです。 (候補キーが次郎長、清水の親分、清水次郎長、街道一の男伊達の4つあるときどれを主キーとしてもいいのですね) ところが学生番号、学生氏名の場合、同姓同名がなければどちらでもいいですが、同姓同名を考えるなら学生番号を主キーにするほうがいいのです。 最後ですが、親分または複合キーであって、かつ、ただ一人(表の中のただ1行)を特定できる。それが主キーなのです。

参考URL:
http://www.netlaputa.ne.jp/~hijk/study/ae/datnom.html
toto31
質問者

お礼

ご丁寧な解答をくださって、どうもありがとうございました。 もう一度、自分の中で順を追って整理してみたいと思います。 また何か機会があれば、そのときはよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 「第1正規化」の定義について

    はじめまして。 今までなんとなくAccessを使っていたのですが、一度きちんと勉強しておこうと思い、データベースの入門から始めているところです。 そこで、どうしても解らないところがでてきてしまいました。タイトル通り「第1正規化」についてなのですが、 http://www.kogures.com/hitoshi/webtext/db-seikika/ http://www.microsoft.com/japan/office/previous/xp/suminaka/access/database/database1_3.htm 上記最初のURL内「第1正規化」の項を参照すると、第1正規化とは 「繰り返しの部分を複数のレコードにして,繰り返しを排除する操作」 とあります。 これは、 「1レコードに繰り返しデータが存在している状態」を「非正規形」とし 「1レコードに存在する繰り返しデータを全て独立したレコードに書き出す」 事をもって「第1正規化」(第1正規形)と呼んでいるようです。 (便宜的に「定義A」と呼びます) 表を主キーで分割してはいません。 一方、以下のURLを参照すると・・・ http://sql.main.jp/cont/norm/nto1.html http://d.hatena.ne.jp/end0tknr/20080830/1220044407 http://www.techscore.com/tech/sql/SQL16/16_02.html/ 最後のURL内では、非正規形の定義は同様ですが、 「主キーによる表の分割を行い繰り返しを排除する」 事によって、「第1正規化」と呼んでいます。 (定義Bと呼びます) また、上記中段のURL内では、定義Aの状態も「非正規形」であると表現しているように読み取れます。 つまり解らない事というのは、「定義A」と「定義B」のどちらが正しい「第1正規化」(第1正規形)なのか?という事です。 Webや解説書等を漁ってみると、体感で 定義A:定義B=4:6 くらいのようで、定義Bが多いものの、かなり割れています。 個人的には、「データの重複を無くし」「汎用性を持たせる」という目的からすれば定義Bを第1正規形と扱った方が良いような気はしますが、こんなに書かれ方が分かれていると、どちらを信じて良いのか迷ってしまいます。 それとも、どちらも第1正規化の範疇なのでしょうか? 仕事上後進の指導もする事になるため、極力正確な理解をしておきたいのです。 どうか、お知恵を貸していただけないでしょうか。

  • 第3正規化とは何でしょうか

    データベースの第三正規化がよく分かりません。 第二正規化との違いがよく分かりません。 第2→主キーの一部に従属する項目を分離 第3→主キーに従属しない項目を分離 という説明があったり (このテキストでは、主キーを常に複合キーとしているようであり、その複合キーの(2つとして)どちらかを主キーとする表をつくるのが2で、その複合キーのどちらとも関係しない列を主キーとする表を3としているようなのですが、そもそも主キーは複合キーとは限らないはずだと思うのですが・・) 別のテキストでは(ある基本情報技術者試験のテキスト) 第2→関数従属 第3→推移的関数従属 という説明があったりします(推移的関数従属というのをネットで調べてみましたが、その概念がここでどう当てはまるのか分かりません) このへん教えていただけませんでしょうか? あるいは、分かりやすくある程度体系的に教えているページや本があれば教えてください。

  • 正規表現であるStringの集合を定義する

    次の特徴を持つStringの集合を定義する正規表現Qはどのように表せばいいでしょうか? 1.0と1のみを使うString 2.「接頭辞」の0の数が1の数より2つ多くない 3.「接頭辞」の1の数が0の数より2つ多くない 接頭辞とはあるStringの先頭から始まる全てのsubstringのことです。例として123456789の接頭辞は"", 1, 12, 123, 1234, 12345, ..., 123456789となります。 この正規表現Qによって定義されるStringの集合の例として "", 10, 01, 0101, 1010, ... 正規表現Qで定義できない集合の例は 0011, 1100, 1110100, 10101100, ... 0011には接頭辞00が存在し、これは0の数が1の数より2つ多いので(0の数は2で1の数は0)正規表現Qでは定義できません。 これは不可能でしょうか?不可能の場合文脈自由文法で定義は可能でしょうか?

  • 参考文献の定義

    今、わたしは小論文を書いているのですが、少し困ったことがあります。それは、「参考文献の定義」です。 そのまま書き写した文章を引用文献と表記するのに対して、自分の考えを生み出すために参考にした文献を参考文献と表記することは分かっています。ただ、少し自分の表現を交えた場合、「参考文献」と表記すればよいのでしょうか?まねてもよいとするならば、どこまでまねてもよいのでしょうか?(すべてまねると引用となるので、引用文献と参考文献の境界は?) もちろん、マナーとしては人の文章をまねることは物書きとして失格ということは理解しています。ただ、ここで聞きたいのは著作権上の法律としてはどうなのかということです。もし、ご存知の方いらっしゃいましたらお教えくださいませ。よろしくお願い致します。

  • 第1正規形→第2正規形

    正規化についてお聞きしたいです。 大学の図書館の本の貸し借りのデータベースで 現在第1正規化した↓のテーブルがあるのですが 図書ID|書名|配架場所|学生証番号 | 氏名|学部|在籍期限|返却期限|貸出日 (図書IDは重複がないものとする。主キーは図書ID、学生証番号である) これを第2正規形に正規化した場合 学生証番号(主キー)|氏名|学部|在籍期限 図書ID(主キー)|書名|配架場所 学生証番号(主キー)|図書ID(主キー)|返却期限|貸出日 ↑のように3つの表に分ければ良いのでしょうか? あとこれを第3正規形にするにはどうすればいいでしょうか? 第2から第3への方法がよくわからないので、わかる方ご指導下さい。

  • 第1正規形から第2正規形へ

    正規化についてお聞きしたいです。 大学の図書館の本の貸し借りのデータベースで 現在第1正規化した↓のテーブルがあるのですが 本の貸借 学生ID|学生氏名|学部|学部棟 | 図書番号|出版社|本のタイトル 111   山田花子 経済  102B   100122  A社  経済白書  222   小林武  理学  201C   200021  D社  人間失格 555   鈴木一郎 文学  301D   103455  D社  走れメロス  555   鈴木一郎 文学  301D 204333  B社  バカの壁 666   沢井竹子 経済  102B   104444  C社  雑学無駄知識 (図書番号は重複がないものとする。) これを第2正規形に正規化した場合 学生ID(主キー)|学生氏名|学部|学部棟 学生ID(主キー)|図書番号(主キー)|出版社|本のタイトル ↑のように2つの表に分ければ良いのでしょうか? まだ完全に第2正規化を理解できていないので みなさんもし宜しければ力を貸してください。 学生ID(主キー)|学生氏名|学部|学部棟 学生ID(主キー)|図書番号(主キー)|出版社|本のタイトル

  • 正規表現について

    正規表現について 正規表現について昨日から取り組み始めたのですが、ごく簡単な説明ですでに四苦八苦しております。 下記HPを参考に始めたのですが、「^http://.+/$」の場合の「.+」の部分がよくわからずにおります。 http://www.scollabo.com/banban/php/php_15.html とりあえず、 「^http://」は、http:// から始まる場合 「/$」は / が末尾に来る場合 という理解なのですが、この私の理解で間違いはないでしょうか? 「.+」では、「 . 」は任意の1文字と説明があるのですが、ここでの 任意 とはどの部分をさす事なのかもよくわからないでいます。(/でしょうか?) リンク先HPでも本来十分解説がされているのかもしれませんが、「.+」について少しご解説をいただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現について教えてください。

    正規表現について教えてください。 JavaScriptでプログラミングを行っています。 その中で文字列に対しゼロサプレスを行いたいと思い 調べた結果、正規表現を使用する以下のコードで 実現可能なことが分かりました。 val.replace(/^0+([0-9]+.*)/, "$1") コードを記述し実行すると確かに可能なのですが 正規表現を調べてみても何故これでゼロサプレスが可能なのか よく理解できませんでした。 申し訳ありませんが初心者でも理解できるように説明して頂けないでしょうか。 宜しくお願いします。

  • |。ってなんですか? 正規表現

    正規表現の学習中です。読んでいる本の中に次の式がありました。  (?<=^|。)[^。]+。 日本語の文章の中から一文を抽出するための正規表現です。  。以外の文字がダーッと連なった後に。が来る文字列 とのことです。  [^。]は。以外の文字  +はそれが1個以上ある ですから  [^。]+ は  。以外の文字が1個以上ある という意味です。 その後に。が付きますから、  [^。]+。 だけで  。以外の文字がダーッと連なった後に。が来る文字列 ということになります。 では  (?<=^|。) の意味は何でしょう。  (?<=なんたら) は後方参照を意味しますから、 ^|。 のすぐ後に [^。]+ が続くと言いたいのでしょうか。 だとすると  ^|。 が問題です。  ^もしくは。 という意味なら、^は正規表現で記号として使われている文字ですから、  \^|。 と表現されそうなものです。 それに、。は文末でしか利用されない文字ですから、これに注目して検索を行うというのは理解できますが、^は日本語でなんら特徴を持つ文字ではありません。  ^もしくは。 という理解は間違いでしょう。 それでは^を記号として考えるとして、その前後を[]で囲んでいないから、この^は文字列の先頭を表すのでしょうか。そうすると件の正規表現は  先頭の|。のすぐ後から。以外の文字が連なった後に。が来る文字列 という意味になります。日本語の一文を抽出する正規表現という解説にかなり近づいてはいます。 しかし  |。 とは一体何? |はorを意味する記号ですが、  何とか or 。 という意味でしょうか。 でも「何とか」は「何とか」なりに何か文字表現がなされていても良さそうですし、それに  先頭の「何とか」または。のすぐ後から・・・ という解釈は意味不明。  |。 はどのように解釈すべきなのでしょうか。 お手数をお掛けします。

    • ベストアンサー
    • Perl
  • リンク先が、それぞれ第何正規化に該当するか教えて

    正規化が分かりません。 冗長性を排除したい、という意図だけは分かるのですが… 例えば、リンク先で回答されているケースは、それぞれ第何正規化に該当するのでしょうか? >個人IDがあり、住所情報を正規化するとしましょう >項目は「郵便番号」「都道府県」「市区町村」「番地」「電話番号」「メールアドレス」としますよ >個人IDを主キーとする「郵便番号テーブル」を作る >個人IDを主キーとする「都道府県テーブル」を作る >個人IDを主キーとする「市区町村テーブル」を作る ・これは第1正規化ですか? >個人IDを主キーとする「番地テーブル」を作る >個人IDを主キーとする「電話番号テーブル」を作る >個人IDを主キーとする「メールアドレステーブル」を作る ・この内容は重複しないと思うのですが、分けると、正規化したことになるのでしょうか? ・また、その場合は、第何正規化に該当するのでしょうか? ▽DBの「非正規化」について   http://okwave.jp/qa/q5776795.html

    • ベストアンサー
    • MySQL
LBT-TWS05BK 充電できない
このQ&Aのポイント
  • LBT-TWS05BKのワイヤレスイヤホンの充電ができない状況について、質問があります。
  • 12月28日に購入したLBT-TWS05BKのワイヤレスイヤホンを充電しようとしていますが、ずっと充電しても100%にならず、充電ケースに入れると右のイヤホンの光が青と紫が交互に点滅しています。
  • エレコム株式会社の製品であるLBT-TWS05BKの充電が正常に行えない状況が発生しています。ご利用のワイヤレスイヤホンを充電する際に、右のイヤホンの光が青と紫が交互に点滅し続ける現象が発生しており、充電が完了しない問題が発生しています。
回答を見る