第3正規化について

このQ&Aのポイント
  • 第3正規化についての質問なのですが、理解できないので質問させて頂きます。
  • "t_携帯"というテーブルがあり、[台数CD]フィールドの扱いがよく理解できなくて困っています。
  • Aさんが携帯を1台所持している場合、Aさんは[台数CD]フィールド'1'を持ち、2台所持しているBさんは'1'と'2'を持ち、2台目以降の携帯情報が繰り返しとなるので第1正規化するのは分かるのですが、それ以降の第3正規化までの手順とマスタ分けがよく分かりません。
回答を見る
  • ベストアンサー

第3正規化について

第3正規化について いつもお世話になっております。 第3正規化についての質問なのですが、理解できないので質問させて頂きます。 "t_携帯"というテーブルがあり、 [社員CD](一意) [氏名] [性別] [台数CD] [製造番号](一意) [メーカー名] [型名] [記憶媒体] [認証ID](一意?) [PASS] というフィールドがそれぞれ存在し、 [台数CD]フィールドの扱いがよく理解できなくて困っています。 例えばAさんが携帯を1台所持している場合、Aさんは[台数CD]フィールド'1'を持ち、 2台所持しているBさんは'1'と'2'を持ち、2台目以降の携帯情報が繰り返しとなるので 第1正規化するのは分かるのですが、それ以降の第3正規化までの手順と マスタ分けがよく分かりません。 ご教授の程、宜しくお願いします。

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

  • ベストアンサー
  • sppla
  • ベストアンサー率51% (185/360)
回答No.3

>「主キーにできるならば」というのはどういった意味合いなのでしょうか? 型名にどういうデータが入るのかわからなかったからです。 私も携帯電話くらいは持っていますが、あまり機種に興味はないので・・・ さすがに同じキャリアでは別々の機種に同じ型名はつけないだろうと思いますが、ドコモとauなど別のキャリアで型名がかぶることがあるかどうかがわからなかったのです。 もし被る可能性があるなら、理屈の上では「社員CD+型名+製造番号」では一意にはならなくなるから主キーにはできないということです。(現実には別キャリアで型名が被ることがあっても製造番号まで一致する可能性は極めて低いので問題ないとは思いますが)

matthew5
質問者

お礼

何度も回答して頂き、ありがとうございました。 おかげさまでかなり理解することができました。 現在、ACCESSで携帯管理ができないかと上司から言われておりまして、 DB・ACCESS初心者ではありますが奮闘している最中です…。 複数台の携帯を所有する社員に関しては、社員CD+製造番号+型名でユニークになりそうなので、なんとか頑張ってみます。 ACCESSの機能であるとか、実際に値を入れたりする段階でたぶんまた分からなくなりそうですが、ご縁がありましたら懲りずに宜しくお願い致します。

その他の回答 (2)

  • sppla
  • ベストアンサー率51% (185/360)
回答No.2

No1ですが追加です。 私の例では第3正規化の説明のために「(非キー項目の)型番が決まればメーカー名は決まる」という設定にしていますが、ご質問のテーブルでは第3正規化の手順が必要かどうかは分かりません。 「メーカー名」「型名」あたりの検索や集計の用途次第ではコード+名称として外部のマスタ化した方がいいとは思いますが、単なる参考としてコメント的に扱うならそこまでする必要はないと思います。 また「台数CD」フィールドですが、これには“ある社員の何台目の携帯電話か?”という意味は持たせない方がよいでしょう。ただの同一社員CD内での各携帯を区別する記号的(数字そのものには意味がない)として扱った方がいいです。(レコード追加時は、フィールドサイズが十分あれば現在の最大値+1を設定するとか、ストアドプロシージャ等で各社員CDでの最小の空き番号を探して設定するとかそんな感じです。もしくは社員CD+型名+製造番号を主キーにできるならばそちらがいいかもしれません。) 理由は、複数台の携帯を持っている社員に関しレコードの削除を行う場合に、例えば「台数CD」が3まである社員の1番目のレコードを削除するときに、他のレコードの「台数CD」を2→1、3→2に修正する手間をかけるか?という点です。 各社員の保有携帯台数の把握はSQLでCountを使えばいいでしょう。

matthew5
質問者

補足

spplaさん、早速のご返事ありがとうございます。 先程、最初に頂いた回答に補足をつけさせて頂いたのですが、 "この投稿はサポートで内容を確認中です" となり(何かの番号がひっかかっている?)、表示されていませんでした。 > もしくは社員CD+型名+製造番号を主キーにできるならばそちらがいいかもしれません。 この説明ですが、こうするための理由は理解できたのですが、 「主キーにできるならば」というのはどういった意味合いなのでしょうか?

  • sppla
  • ベストアンサー率51% (185/360)
回答No.1

正規化はテーブルの各項目の意味を正しく把握していないとできませんので、ご質問のテーブルではなく私の方で用意したもので説明させていただきます。 ■テーブル「t_携帯」の項目名および項目内容。 社員CD:携帯を使用する社員の社員番号(各社員に対して一意なコード) 氏名:携帯を使用する社員の氏名。 性別:携帯を使用する社員の性別。 台数CD:各社員の持つ何台目の携帯電話機かを識別する番号。 型番:携帯電話の機種を示す型番。(auだとW62CAとかそういうやつです。) メーカー名:携帯電話機を製造したメーカーの名称。(型番が決まるとメーカー名を決まるものとする。) 製造番号:携帯電話の製造番号。(同一型番内では重複はない。) このテーブルは、社員CD+台数CDで各レコードを一意に識別できるものとします。(つまり社員CD+台数CDが主キーです。) ■正規化のおさらい。(おおざっぱに書いています) ・第1正規化:(行と列で表現する)テーブルの形にすること。 ・第2正規化:主キーの一部分に従属する項目を外に切りだす。 ・第3正規化:主キー以外の項目に従属する項目を外に切りだす。 ■以下正規化の説明 ・この例ではテーブルの形になっているのですでに第1正規形である。 ・主キーの一部分(社員CD)が決まれば「氏名」「性別」は決まるので、これらの項目を外部のマスタに持たせることにする。(第2正規化) ・主キー以外の項目である「型番」が決まれば「メーカー名」は決まるので、この項目を外部のマスタに持たせることにする。(第3正規化) ■結果的にできるテーブル 「t_携帯」 社員CD、台数CD、型番、製造番号 「t_社員マスタ」 社員CD、氏名、性別 「t_機種マスタ」 型番、メーカー名 以上です。

matthew5
質問者

補足

spplaさん、早速のご返事ありがとうございます。 詳細に説明して頂き、とても理解することができました。 > このテーブルは、社員CD+台数CDで各レコードを一意に識別できるものとします。 > (つまり社員CD+台数CDが主キーです。) この部分は分かりました。 > ■結果的にできるテーブル > 「t_携帯」 > 社員CD、台数CD、型番、製造番号 結果的にできた「t_携帯」に値を入れたとすると 社員CD、台数CD、型番、製造番号 0001、1、W62CA、CA0001 0002、1、W62DA、DA0001 0002、2、W62CA、CA0002 0003、2、W62EA、CE0001 となったとしても(見難くてすいません)、社員CD+台数CDの二つで 主キーとなるので、DBとしては特に問題はないわけですよね? というのも、上記のように二つのフィールドを主キーとする概念が初めてでして・・・。 「t_社員マスタ」の主キーである社員CDが「t_携帯」の主キーの一部のみを参照しているので、 台数CDには特に外部参照がかからなくてもよいという解釈で宜しいのでしょうか?

関連するQ&A

  • リカバリCDを紛失したので

    WinrowsXP Home搭載のDELL製PCを所持しています。 再インストールしたいのですが、リカバリCDを紛失してしまいました。 もう一台の正規ライセンスのXP HomeのCDはあるので、本体に張られているプロダクトキーで再インストールできないかと考えていますが、可能なのでしょうか? 所持している正規ライセンスはプリインストールではなく、箱売りの製品版です。

  • エクセルの関数を使ってグループ分けをしたい

    機材の貸し出しの管理表を作っているのですが、期間と台数でにより グループ分け(仕分け)をしたいと思います。 関数を使ってできないか教えてください。  条件 ① 台数により3つのグループに分けたい     3台まで A,5台まで B、10台まで Cとする     ② 貸出期間により3つのグループに分けたい     3カ月まで 1、6カ月まで 2、12カ月まで 3     ③上の2つの条件で9通りの結果(表示)をさせる     たとえば、 機材3台を6カ月貸出の場合 ”A2”と表示     するようなこと   皆さんの知恵をかしてください。

  • コンポジット一意インデックスとは?

    趣味でPHPとMYSQLをいじってる大学生です。 先日はこちらで助けて頂いてとても助かりました。 ご返答いただきました皆様ありがとうございました。 単発の質問で申し訳ないのですが インデックスの指定をする際に疑問点がでてきたので 質問させて下さい。 タイトルにもあげたのですが、 コンポジット一意インデックスというのは インデックス(インデックスの名前はkeyの値) で複数カラムにインデックス指定するということだと思いますが 一意はユニークというのは 任意の挿入されるレコードは、2つの場合に限定すると 2のカラムを見ると他のレコードとかぶらないというか 要するに2つのフィールドをあわせて考えて、 ユニークであるという理解でよいでしょうか? 言葉がおもいつきませんが 例えば宝くじの  組  番号 購入者 ...etc  A組 0001 B組 0001 A組 0023 C組 ・・・ のようなデータを扱う際に 組と番号にコンポジット一意インデックスを割り振るといいというという理解でいいでしょうか? その理解が正しいか間違っているか? 教えていただけると幸いです。 そして、この理解で正しいのならば もしも 番号=0002 など、2つのフィールドのうち1つで検索した場合だとインデックスは役割を果たすのでしょうか? コンポじゃないと機能しないのか?ということです。 コンポじゃないと機能しないのであれば3つのインデックス つまり、(組,番号[コンポ]),(組),(番号) を作成するのが正しいのでしょうか? よろしくお願い致します。

  • 正規表現で画像を置換

    <img src="http://domain.com/test1/sample1/20090226234426-P1150071_s.jpg" width="160" height="120" alt="TEST" /> となっているものを、 <a href="http://domain.com/test1/sample1/20090226234426-P1150071_s.jpg">画像</a> と置換したいのですが、正規表現がいまいち理解できませんでしたので、 質問させていただきました。 PC用のコンテンツから携帯に移植する際に内容の圧縮の意味を込めて、作る必要がありましたので、お手数ですがよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • どうすれば良いか分かりません。

    どうするべきか悩んでいます。 私の知り合い(Aさん)に、 日本で購入した 携帯やタブレットを海外へ売る、 仕事をしている方がいます。 ただ携帯やタブレットは、1人につき 所持?契約?で きる台数が限られて いる為 その方に頼まれて、6月頃 docomoの新機種2台 iPhone2台 iPad2台 を私の名前と口座で契約しました。 そのあとすぐに、Aさんの口座に変更 し、解約もするし、違法なことでは ないので なにも心配はいらないとの事でした 。 ただ、かなり心配でしたし怖かった ので 7月に一度連絡したんですが返事がな く 8月に連絡すると、メールが届かず 電話も繋がらなくなってしまいまし た。 契約時に、お金のトラブルにはなり たくないので くれぐれもお願いします、 いたので信じてはいるんですが 今日もSoftBankとdocomoから(特にS oftBankから) 請求の催促がかなり来ています。 私自身、物を所持しているわけでは ないので、今どうなっているかも分 からないし とにかく不安でたまりません…。 私の判断が間違っていたんだろう、 と今はとても後悔しています。 今後どうすれば良いか、何かアドバイス があればお願いします。 やはり私が、今来ている請求を支払わなければ、いけないのでしょうか

  • ”正規プロダクトキー”を買うリスクはありますか?

    ヤフオクで、 ★Office Professional Plus 2021正規プロダクトキー [日本語/認証保証/永久/ライセンスキー/Word/Excel/Pro]   即決 998円(税 0 円) という商品が載っています。 このものを買うリスクはありますか? 特に、以下の説明は、信用できますか? ●PC構成に変更がない限り永久にお使い頂けます。 ---[商品説明]--- ●こちらの商品はマイクロソフトから発行された、正規プロダクトキーです。 ●公式ページからダウンロード、認証頂くことができます。 32Bit/64Bit共通 おまけでISOファイルのダウンロード先もご案内しております。 ●Office365のようなサブスクリプション商品ではございませんので、無期限、無制限でご利用頂けます。 ●Windows10以降のOSでご利用頂くことができます。 ●1つのプロダクトキーにつき1台のPCのみ有効となりますので、複数のPCへインストールされる際は、PC台数分のプロダクトキーをご落札ください。 ●PC構成に変更がない限り永久にお使い頂けます。この値段のものですので再インストールは保証はできません。あらかじめご了承ください。 ---[ご注意事項]--- ※こちらの商品はプロダクトキーとインストールマニュアルとなり、商品現物の発送はございませんので予めご理解、ご了承ください。 ※商品受け取り後3日以内にインストールと認証を完了させて下さい。 ※万が一オンライン認証不可だった場合は電話認証を行います。インストールIDをお知らせいただければこちらで作業代行いたします。 ※3日を過ぎますと、認証保証の受付は出来かねますので疑問点があればまずは一報ご連絡ください。 ※かんたん決済以外の支払いは対応いたしません。

  • エクセルの関数

    質問させていただきます。 旅行のバスの台数を計算します。 A1~20までに、はじめから1~20までの数値が入っています。これがバス台数となります。 B1から、バスが運行する度にその日の日付を入力します。 日付が入っているところまでが実際のバスの台数となります。 たとえば、B列の日付がA列の13まで入力されたら、バスの台数は13台ということになります。 それを、C1に自動で入るようなことはできますでしょうか? B列のある場所に値が入ったら、A列のここをイコールとしてC1に出すような。でも常にB列の一番下を参照させないといけないんですよね。 説明が下手で申し訳ありません。 ご理解頂けましたらご教授お願い致します。

  • office20xxを買う必要がでてきました。理由は現在使っているof

    office20xxを買う必要がでてきました。理由は現在使っているoffice2000が新規購入したデルのxpのPCで正常に動かないことがわかったからです。デルはoffice2007以降なら動作確認をしているとのことですが、必ずしもそれ以前が動かないわけではないと思います。 インストールしたい台数は3台で同時に使用します。 このような場合、 ・どのバージョンのofficeを ・いくつ 購入すればよいのでしょうか?ボリュームライセンスというのもあるらしいのですね。またアクティベーションなる制限もあるらしくよくわからず困っています。 いままでoffice2000を不満なく使えてきているので高機能である必要は感じてません。安くて正規に3台インストールして使えるタイプを教えてください。PCはつい最近買った高性能のものなのでどのバージョンのオフィスでもスペック的には問題ないと思います。 よろしくお願いします。

  • 現在HT-03Aを基本料金のみ(1000円)で電話用としてのみ所持して

    現在HT-03Aを基本料金のみ(1000円)で電話用としてのみ所持しています(購入時割引を利用したため手放すとお金がかかる) しかし携帯メールがないと何かと不便でもう一台普通の携帯を持ちたいなぁと考えています その場合メール機能しか使えなくてもいいのでなるべく安くあげたいのですがいい方法があれば教えてください(オークションで買うなど) よろしくお願いします

  • ADOでのUPDATEメソッドについて

    ADOでのUPDATEメソッドについて いつもお世話になっております。 首題についてですが フォーム「携帯管理_F」を作成し、連結テキストボックスを 配置(全フィールド)してテーブル"t_携帯"が参照できるようにしています。 "t_携帯" [社員CD](重複あり) [氏名] [性別] [台数CD] フォーム上のコンボボックスを更新にした際に非連結テキストボックスinp_社員CD の中身をUPDATEメソッドにわたそうとしたのですが、 rs.Update "[社員CD]='" & Me!inp_社員CD & "'" にすると 「実行時エラー'3001'引数が間違った型、許容範囲外、または競合しています。」 と出てしまいます。 また、 rs.Fields("社員CD").Value = "' & Me!inp_社員CD & '" rs.Update とすると社員CDに「' & Me!inp_社員CD & '」が入ってしまいます。 どなたか良い更新の方法をご存知であればご教授願います。