第3正規化について
いつもお世話になっております。
第3正規化についての質問なのですが、理解できないので質問させて頂きます。
"t_携帯"というテーブルがあり、
[社員CD](一意)
[氏名]
[性別]
[台数CD]
[製造番号](一意)
[メーカー名]
[型名]
[記憶媒体]
[認証ID](一意?)
[PASS]
というフィールドがそれぞれ存在し、
[台数CD]フィールドの扱いがよく理解できなくて困っています。
例えばAさんが携帯を1台所持している場合、Aさんは[台数CD]フィールド'1'を持ち、
2台所持しているBさんは'1'と'2'を持ち、2台目以降の携帯情報が繰り返しとなるので
第1正規化するのは分かるのですが、それ以降の第3正規化までの手順と
マスタ分けがよく分かりません。
ご教授の程、宜しくお願いします。
No.3ベストアンサー
- 回答日時:
>「主キーにできるならば」というのはどういった意味合いなのでしょうか?
型名にどういうデータが入るのかわからなかったからです。
私も携帯電話くらいは持っていますが、あまり機種に興味はないので・・・
さすがに同じキャリアでは別々の機種に同じ型名はつけないだろうと思いますが、ドコモとauなど別のキャリアで型名がかぶることがあるかどうかがわからなかったのです。
もし被る可能性があるなら、理屈の上では「社員CD+型名+製造番号」では一意にはならなくなるから主キーにはできないということです。(現実には別キャリアで型名が被ることがあっても製造番号まで一致する可能性は極めて低いので問題ないとは思いますが)
何度も回答して頂き、ありがとうございました。
おかげさまでかなり理解することができました。
現在、ACCESSで携帯管理ができないかと上司から言われておりまして、
DB・ACCESS初心者ではありますが奮闘している最中です…。
複数台の携帯を所有する社員に関しては、社員CD+製造番号+型名でユニークになりそうなので、なんとか頑張ってみます。
ACCESSの機能であるとか、実際に値を入れたりする段階でたぶんまた分からなくなりそうですが、ご縁がありましたら懲りずに宜しくお願い致します。
No.2
- 回答日時:
No1ですが追加です。
私の例では第3正規化の説明のために「(非キー項目の)型番が決まればメーカー名は決まる」という設定にしていますが、ご質問のテーブルでは第3正規化の手順が必要かどうかは分かりません。
「メーカー名」「型名」あたりの検索や集計の用途次第ではコード+名称として外部のマスタ化した方がいいとは思いますが、単なる参考としてコメント的に扱うならそこまでする必要はないと思います。
また「台数CD」フィールドですが、これには“ある社員の何台目の携帯電話か?”という意味は持たせない方がよいでしょう。ただの同一社員CD内での各携帯を区別する記号的(数字そのものには意味がない)として扱った方がいいです。(レコード追加時は、フィールドサイズが十分あれば現在の最大値+1を設定するとか、ストアドプロシージャ等で各社員CDでの最小の空き番号を探して設定するとかそんな感じです。もしくは社員CD+型名+製造番号を主キーにできるならばそちらがいいかもしれません。)
理由は、複数台の携帯を持っている社員に関しレコードの削除を行う場合に、例えば「台数CD」が3まである社員の1番目のレコードを削除するときに、他のレコードの「台数CD」を2→1、3→2に修正する手間をかけるか?という点です。
各社員の保有携帯台数の把握はSQLでCountを使えばいいでしょう。
この回答への補足
spplaさん、早速のご返事ありがとうございます。
先程、最初に頂いた回答に補足をつけさせて頂いたのですが、
"この投稿はサポートで内容を確認中です"
となり(何かの番号がひっかかっている?)、表示されていませんでした。
> もしくは社員CD+型名+製造番号を主キーにできるならばそちらがいいかもしれません。
この説明ですが、こうするための理由は理解できたのですが、
「主キーにできるならば」というのはどういった意味合いなのでしょうか?
No.1
- 回答日時:
正規化はテーブルの各項目の意味を正しく把握していないとできませんので、ご質問のテーブルではなく私の方で用意したもので説明させていただきます。
■テーブル「t_携帯」の項目名および項目内容。
社員CD:携帯を使用する社員の社員番号(各社員に対して一意なコード)
氏名:携帯を使用する社員の氏名。
性別:携帯を使用する社員の性別。
台数CD:各社員の持つ何台目の携帯電話機かを識別する番号。
型番:携帯電話の機種を示す型番。(auだとW62CAとかそういうやつです。)
メーカー名:携帯電話機を製造したメーカーの名称。(型番が決まるとメーカー名を決まるものとする。)
製造番号:携帯電話の製造番号。(同一型番内では重複はない。)
このテーブルは、社員CD+台数CDで各レコードを一意に識別できるものとします。(つまり社員CD+台数CDが主キーです。)
■正規化のおさらい。(おおざっぱに書いています)
・第1正規化:(行と列で表現する)テーブルの形にすること。
・第2正規化:主キーの一部分に従属する項目を外に切りだす。
・第3正規化:主キー以外の項目に従属する項目を外に切りだす。
■以下正規化の説明
・この例ではテーブルの形になっているのですでに第1正規形である。
・主キーの一部分(社員CD)が決まれば「氏名」「性別」は決まるので、これらの項目を外部のマスタに持たせることにする。(第2正規化)
・主キー以外の項目である「型番」が決まれば「メーカー名」は決まるので、この項目を外部のマスタに持たせることにする。(第3正規化)
■結果的にできるテーブル
「t_携帯」
社員CD、台数CD、型番、製造番号
「t_社員マスタ」
社員CD、氏名、性別
「t_機種マスタ」
型番、メーカー名
以上です。
この回答への補足
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日本語のテーブル名、カラム名...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
ACCESSのクエリで集計で、先頭...
-
Accessでコードを入れると名前...
-
異なるサーバのDBデータ同士を...
-
テーブルの存在チェックについて
-
2つのテーブルAとBをマージ...
-
SQLServer2005のSQL文での別名...
-
FROM の中で CASE を使えるでし...
-
Access テキスト型に対する指定...
-
Accessでテーブルの値をテキス...
-
Accessフォームにクロス集計ク...
-
データがある場合のカラムの削除
-
アンドロイド おサイフケータイ...
-
INSERT INTO ステートメントに...
-
Vbaでアクセスからエクセルにリ...
-
ACCESSでの改行コード
-
Oracle 2つのDate型の値の差を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
db2でisnumericは使えないので...
-
日本語のテーブル名、カラム名...
-
Accessから主キーの無いOracle...
-
検索時にヒットしない
-
DB設計に要する見積もりについて
-
インデックスのアルゴリズムとB...
-
ACCESS2000:主キーに半角と全...
-
ORACLEでダミー行を作成したい
-
第二正規形化のサンプルについ...
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
セルの右クリックで出る項目を...
-
Access テキスト型に対する指定...
-
Accessでテーブル名やクエリ名...
-
Oracle 2つのDate型の値の差を...
-
ACCESSのクエリで集計で、先頭...
-
変数が選択リストにありません
-
Accessのフィールド数が255しか...
-
Accessでテーブルの値をテキス...
おすすめ情報