• ベストアンサー

正規化について

データベースを勉強していて、正規化についての問題についてお聞きしたいです。とりあえず問題をまず書いてその後自分の考えたことを述べます。以下問題です。 いま表R(A,B,C,D)があり、 Aの列の値が(a1,a2,a3,a4,a4) Bの列の値が(b1,b2,b1,b2,b3) Cの列の値が(c1,c2,c1,c3,c4) Dの列の値が(d1,d2,d1,d2,d3) となっている。 1.このとき、表Rで成り立つ関数従属を選べ。 (1)A→CD(2)B→D(3)BC→A(4)AB→CD(5)D→A 2.表Rは第一正規形であるか? 3.表Rは第二正規形であるか? 4.表Rは第三正規形ではないが、この表Rを第三正規形になるような二つの表に分割せよ。 1.について 考え方がいまいちわからないのですが、自分で考えてみて、正解は(2)のB→Dかなと思ったのですが、どうやら正解は(2)と(4)っぽいのです。 これはどのように考えたらよいのでしょうか? 社員番号、とか社員名とかいう具体的な値ならまだわかるのですが、a1とかb1とかいう値のときにどのように考えたらいいのかがわかりません。 2.について これは第一正規形でよろしいですよね? 3.について これはもし1.の正解が(2)のB→Dであった場合、R1(A,B,C),R2(B,D)と分割できるので第二正規形ではないと考えました。答えはわかりません。 4.について 第三正規形と第二正規形の違いがわからないのでぜんぜんわかりません。 以上についてわかる方いらっしゃいましたら教えてください。よろしくお願いします。

noname#24851
noname#24851

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

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.2

 なんだか、設問が無理っぽい気がするのは、PED02744同感です。  無理を承知で解くならば・・・  おそらく、設問1は消去法で解くほかないんでしょうね。  まず、(1)はa4の値の時矛盾するので×。  (2)は、矛盾なし。  (3)は、b1・c1の時矛盾します。  (4)は、矛盾なし。  (5)は、d1の時とd2の時に矛盾します。  というわけで、正解は2と4なのかな・・・(意味が考えられないから与えられたデータで矛盾があるかどうかを追及するよりしょうがないでしょう。)  というわけで、AB→CDと、B→Dの従属関係があることがわかったことにします。というか、この設問(1)で提起された以外の従属関係は「ない」と解釈しないとこの問題解けないような気がします。  第一正規形は間違いありません。  第二正規形に関しては、候補キーABの真部分集合であるBに対して、Dが従属しているので、候補キーABに対して、非候補キーのDは完全従属となっていません。よって、第二正規形ではないことになります。  第二正規形でないとすれば、当然第三正規形でもありません。  ところで、kireinooneさんのかかれるように、R1(A,B,C) R2(B,D)とすれば、第二正規形は満たします。それと同時に、推移則を適用できるパターンも存在しなくなるので、(推移則を適用するには、最低でも3カラム必要ですが、R1の候補キーは(A,B)となるので、事実上2カラムとなる)第三正規形も同時に満たす。ということになってしまいます。  でも、これって、第2正規形を満たした時点で第3正規形が自動的に成立するというのもなんだか、すごく気味が悪いです。問題としてほんとに成り立ってるのかしら?という不安を感じます。  

noname#24851
質問者

お礼

ありがとうございます。 >第二正規形を満たした時点で第三正規形が自動的に成立するといいう >のもなんだか、すごく気味が悪いです。 そうなんですか・・・。実際に出題された試験問題で、しかも前年の問題でも似たような形で出題されているのですよ。 いまいち腑に落ちないですね。ともあれご丁寧にありがとうございました。

その他の回答 (1)

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

う~ん。。設問が悪い気がしますね。 主キー候補が任意・データ個数が5つ・カラム数が4つ というのでは、 正確な判断がつかないですね。 もし、1.の答えに(4)が含まれる事が確定しているとしたら、主キーとして(A,B)にする事を考えていると思います。 そうなると、 1.について。  Bが決まれば、Dが決まるので、B→Dがいえますね。  (A,B)が決まれば(C,D)が決まるので、(A,B)→(C,D)もいえると思います。  ただし、このとき、(A,B)が決まったとき、一意の(C,D)とならないので正規化不足とわかります。 その他、詳細は参考URLをご参照ください。 ただ言える事は、設問にするには情報が足らないと思われることです。

参考URL:
http://design.first-database.com/
noname#24851
質問者

お礼

ありがとうございます。 実際に出題された試験問題なので問題に不備があるとは考えにくいのですが、ひょっとして僕の書き方が悪かったのでしょうか・・・? 実際の問題では表にして書いてあります。 参考URLは既知でした。そのサイトでは具体的なデータを使って考えているのでわかるのですが、a1とかb1とかいう値になったときにどう考えているのかわからないんです。

関連するQ&A

  • 【データベース】 正規形を答える問題

    正規形を答える問題で悩んでいます。 次のような問題です。 属性{A,B,C,D}をもつ表に対して、次の二つの従属性が見られる。 (1)A,B → C,D (2)C→B この表の正規形は何か。 第2正規形か第3正規形で迷っています。 第2正規形の条件を満たす理由は 候補キーは{A,B},{A,C}で どの候補キーも非キー属性に対して完全関数従属だからです。 その後、非キー属性が候補キーに対して推移的に関数従属していないかを考えたのですが、「おそらくしていない…」というくらいで第3正規形であると確証ができません。 確証ができない理由が一つあります。 実際の業務でこのテーブルをつくるときに、 {A,C}→D, C→Bを利用して、  ACD とCBの二つの表に分けると思うからです。 うまく分けられるってことは第2正規形だからかな…と考えてしまいます。 アドバイスいただけないでしょうか… よろしくお願いします。

  • データベースの関係の正規化の問題です

    データベース設計者が関係R(A,B,C,D,E, F,G) に対し,次の関数従属性を定義した.ここで,関係R は第1 正規形として与えられたものとする.関係R の第3 正規形はどれか? 関数従属性: A → D, C→E, C → G, EG → F (A) {A,B,C,D}, {E, F,G} (B) {A,B,C}, {D,E,G}, {F} (C) {A,B,C,D,E,G}, {D, F} (D) {A,B,C,D,E,G}, {E, F,G} (E) None of these ご回答よろしくお願いいたします。

  • 正規直交基底

    (問題) 3つのベクトルa=(1,1,1,1) b=(1,-1,1,-1) c=(1,1,-1,-1)がある。(表記が違いますが、列ベクトルです) 1.a,b,cが互いに直交していることを示せ。 2.a,b,cの正規直交基底を求めよ。 3.a,bc,の全てに直交するベクトルを1つ求めよ。 というものなのですが。疑問点があるので答えて頂ければ幸いです。 1.の直交を示すことはそれぞれ内積a・b a・c b・cが0であることから示せます。(これは正しいと思います) 2.の正規直交基底なのですが、これは互いに直交しているため、それぞれの大きさを1になるように正規化すれば良く、複雑な計算は必要ないですよね? また、問題は四次元のベクトルですが、3つだけで正規直交基底と言えるのですか? R^4の正規直交基底と問題2が示す正規直交基底は別物ですか? また、3で全てに直交するベクトルを1つ求めよとありますが、このベクトルを正規化すれば、 それらを全て合わせてR^4の正規直交基底ということでよろしいのですか? ちなみに全てに直交するベクトルdは(1,-1,-1,1)となりました。 質問を煩雑に羅列してしまい申し訳ないですが解答よろしくおねがいします。

  • Excelでxとyの値を求めたい

    下記の表を作り、C列に値を入れたら、D、E列にx、yの値が出るようにしたいと思います。     A           B          C          D          E 1 x*0.2+3.2                 3.7       =(C1-3.2)/0.2 2 x*0.4+2.9     y*0.2+3.0      7.5 xだけの場合は数式でなんとかなりました。 問題は、xとyの場合です。 2行目は、A2+B2がC列の値になっています。 C2に7.5を入力したら、D2とE2にxとyの答えを出したいのですが、 別の表にあるxの値「+5.0、+2.5、0、-5.0、-10」、yの値「+3.0、+1.5、0、-7.5、-15」から 答えを選びたいのです。(ここではD2は2.5、E2が1.5が正解になります) よい方法がありましたらアドバイスをお願いします。

  • Excel 値の有無

      A  B  C  D 1    10  20 2    10 3    20 4 このような表があります。 B,C列両方に値があればC列の値をA列に、B,C列どちらかに値があれば、その値をA列に、両方なければA列に空白を返したいです。   A  B  C  D 1  20 10 20 2  10 10 3  20 20 4 A列にどのような式をいれればいいのでしょうか?

  • EXCEL

    A-B-C-D-E-F-G 1-A-W-A-1-B- 2-B-A-N-2-C- 3-C-K-A-3-B- 4-D-A-I-4-E- 5-E-R-X-5-A- 例えば,エクセルで表のようになっている場合に, 列AにF1の値(表の場合は文字B)で検索をかけ,検索に該当した行(表の場合では行2)の列Dの値をG1に表示する方法はあるでしょうか?? 簡単に言うと,列Gに自動的にFに対応するDの数値を入力したいのです.自動的に列Gを下の表のようにすることは可能でしょうか? A-B-C-D-E-F-G 1-A-W-A-1-B-2 2-B-A-N-2-C-3 3-C-K-A-3-B-2 4-D-A-I-4-E-5 5-E-R-X-5-A-4 投稿すると文字がずれてしまって表が見難くてすいません. どなたか,ご教授よろしくお願いします.

  • また正規形について。

    http://www.techscore.com/tech/sql/16_02.html のURLの下の方の表 受注番号、商品番号、納入業者 12345  001   業者 A 12345  002   業者 B 12346  001   業者 A 12347  001   業者 D において、 ****以下引用**** このとき、非主キー列「納入業者」は「受注番号」と「商品番号」から決まりますので、(受注番号、商品番号) →納入業者は関数従属の関係が成立しています。よって、このテーブルは第二正規形の条件を満たしていると言えます。(中略) ****引用終わり**** とありますが、私には 商品番号→納入業者 という関数従属関係があるきがするのですが違うのでしょうか?なので第二正規形の時点で、 (商品番号、納入業者)という表が新たに分離される気がするのですが… さらに、 http://www.st.rim.or.jp/~ryoma/tips/seikika.htm のURLの同じくボイスコッド正規形で扱われ表、 商品コード、仕入先コード、担当者コード 000120001 111 401 000120001 112 402 000120002 111 401 000120002 150 403 仕入先コード、仕入先名 001 東京商店 002 大阪商会 003 名古屋流通 で、 *引用* 商品コード、仕入先コード、担当者コードを属性とする上の表は、繰り返し部分を持たず、また商品コード+仕入先コード、あるいは商品コード+担当者コードをキーとすることができ、かつ推移従属の関係が存在しないため、第三正規形です。 *終* とありますが、主キーを【商品コード、仕入先コード】と決めたとき、非候補キーである担当者コードは仕入先コードに関数従属している気が(私は)してしまうので第二正規形へ変形した時点で(仕入先コード、担当者コード)という表が分離されていると思うのですが。 以上の解釈で間違っている考えがあればご指摘ください。

    • ベストアンサー
    • MySQL
  • Excelについて質問です。

    Excelについて質問です。 下記の表1を表2のように、 B列で同じ値のものは1つのセルにまとめ、 C列は、B列でまとめられた分を「、」で降順に並べたいのですが、 関数などを使って、簡単にできる方法はありますでしょうか。 <表1> A列  B列 A   100 B   50 B   30 B   60 C   40 C   70 D   90 <表2> A列  B列 A   100 B   30,50,60 C   40,70 D   90

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

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

  • 基底の正規直交化

    3次元空間R^3の基底( 1, -1, 0 ),( 2, 1, 1 ),( 1, 2, 3 )を正規直交化せよ という問題なんですがどうするのでしょうか? ↓途中までといてみました。途中式や公式、計算が間違ってるかもしれませんが・・・・ a =( 1, -1, 0 ), b = ( 2, 1, 1 ),c = ( 1, 2, 3 )として それぞれの正規直交成分をe1,e2,e3とおきます。 最初に |a| = √2から e1 = a / |a| = √2( 1, -1, 0 ) 次にb~(bチルダ) = b - <b,e1>e1(<>は内積です)より(←ここの式が違う?) b~ = ( 2, 1, 1 ) - ( 1, -1, 0) = ( 1, 2, 1 ) よって e2 = b~/|b~| = 1 / √6 ( 1, 2, 1 ) さらにc~ = c - <c,e1>e2 - <c,e2>e1から(←ここの式が違う?) ・・・・・・・・・・・・・ (ここでc~の値がむちゃくちゃになったのでかきません・・・・) よってe3 = c~/|c~| = ? という感じです。