![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
第3正規化について
いつもお世話になっております。
第3正規化についての質問なのですが、理解できないので質問させて頂きます。
"t_携帯"というテーブルがあり、
[社員CD](一意)
[氏名]
[性別]
[台数CD]
[製造番号](一意)
[メーカー名]
[型名]
[記憶媒体]
[認証ID](一意?)
[PASS]
というフィールドがそれぞれ存在し、
[台数CD]フィールドの扱いがよく理解できなくて困っています。
例えばAさんが携帯を1台所持している場合、Aさんは[台数CD]フィールド'1'を持ち、
2台所持しているBさんは'1'と'2'を持ち、2台目以降の携帯情報が繰り返しとなるので
第1正規化するのは分かるのですが、それ以降の第3正規化までの手順と
マスタ分けがよく分かりません。
ご教授の程、宜しくお願いします。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_05.png?5a7ff87)
No.3ベストアンサー
- 回答日時:
>「主キーにできるならば」というのはどういった意味合いなのでしょうか?
型名にどういうデータが入るのかわからなかったからです。
私も携帯電話くらいは持っていますが、あまり機種に興味はないので・・・
さすがに同じキャリアでは別々の機種に同じ型名はつけないだろうと思いますが、ドコモとauなど別のキャリアで型名がかぶることがあるかどうかがわからなかったのです。
もし被る可能性があるなら、理屈の上では「社員CD+型名+製造番号」では一意にはならなくなるから主キーにはできないということです。(現実には別キャリアで型名が被ることがあっても製造番号まで一致する可能性は極めて低いので問題ないとは思いますが)
何度も回答して頂き、ありがとうございました。
おかげさまでかなり理解することができました。
現在、ACCESSで携帯管理ができないかと上司から言われておりまして、
DB・ACCESS初心者ではありますが奮闘している最中です…。
複数台の携帯を所有する社員に関しては、社員CD+製造番号+型名でユニークになりそうなので、なんとか頑張ってみます。
ACCESSの機能であるとか、実際に値を入れたりする段階でたぶんまた分からなくなりそうですが、ご縁がありましたら懲りずに宜しくお願い致します。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_05.png?5a7ff87)
No.2
- 回答日時:
No1ですが追加です。
私の例では第3正規化の説明のために「(非キー項目の)型番が決まればメーカー名は決まる」という設定にしていますが、ご質問のテーブルでは第3正規化の手順が必要かどうかは分かりません。
「メーカー名」「型名」あたりの検索や集計の用途次第ではコード+名称として外部のマスタ化した方がいいとは思いますが、単なる参考としてコメント的に扱うならそこまでする必要はないと思います。
また「台数CD」フィールドですが、これには“ある社員の何台目の携帯電話か?”という意味は持たせない方がよいでしょう。ただの同一社員CD内での各携帯を区別する記号的(数字そのものには意味がない)として扱った方がいいです。(レコード追加時は、フィールドサイズが十分あれば現在の最大値+1を設定するとか、ストアドプロシージャ等で各社員CDでの最小の空き番号を探して設定するとかそんな感じです。もしくは社員CD+型名+製造番号を主キーにできるならばそちらがいいかもしれません。)
理由は、複数台の携帯を持っている社員に関しレコードの削除を行う場合に、例えば「台数CD」が3まである社員の1番目のレコードを削除するときに、他のレコードの「台数CD」を2→1、3→2に修正する手間をかけるか?という点です。
各社員の保有携帯台数の把握はSQLでCountを使えばいいでしょう。
この回答への補足
spplaさん、早速のご返事ありがとうございます。
先程、最初に頂いた回答に補足をつけさせて頂いたのですが、
"この投稿はサポートで内容を確認中です"
となり(何かの番号がひっかかっている?)、表示されていませんでした。
> もしくは社員CD+型名+製造番号を主キーにできるならばそちらがいいかもしれません。
この説明ですが、こうするための理由は理解できたのですが、
「主キーにできるならば」というのはどういった意味合いなのでしょうか?
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_05.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- その他(セキュリティ) IDと暗証番号・パスワードの管理の画期的かつ簡単便利な方法を考案した。他人に検証してもらう方法は? 5 2023/02/08 08:49
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(悩み相談・人生相談) 一生フリーターか正社員か他人の意見で軸がぶれまくる自分にうんざりしています。 6 2023/07/21 20:38
- 政治 マイナンバーカードは、インドでは大成功しています。自民党はインド人に負けましたね? 3 2023/06/29 15:53
- その他(データベース) accessについて 2 2022/05/31 16:58
- iPhone(アイフォーン) いつでもカエドキプログラム 外部バッテリーについて 3 2023/08/20 08:35
- その他(社会・学校・職場) 非正規で生きていく人生について 6 2023/04/27 22:33
- Yahoo!メール YahooIDをパスワード形式にしただけなのに、利用規約違反とされて電話番号が使えなくなりました 3 2023/03/25 04:08
- Yahoo!メール Yahooアカウントにログインできなくなって困っています。 2 2023/05/16 02:28
- 正社員 コロナ渦の最中。非正規は減って正社員は増えたそうですが、最低賃金の正社員が増えているそうです。 2 2022/07/02 20:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
第3正規化について
-
Accessから主キーの無いOracle...
-
MDB→SQL Server Expressの移行
-
第1正規形→第2正規形
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
Accessでテーブル名やクエリ名...
-
Accessクエリーで両方のテーブ...
-
Access VBAでクエリーのレコー...
-
主キーはオートナンバー型のID...
-
ORACLEでLONG項目からCHAR項目...
-
Accessでテーブルの値をテキス...
-
Accessレコードの追加や変更が...
-
Oracle 2つのDate型の値の差を...
-
Accessのクエリでデータの入力...
-
Accessのフィールド数が255しか...
-
Oracleのビュー作成時に「指定...
-
2つのテーブルを比較して一致し...
-
関連がある複数のテキストファ...
-
異なるサーバのDBデータ同士を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
db2でisnumericは使えないので...
-
日本語のテーブル名、カラム名...
-
Accessから主キーの無いOracle...
-
検索時にヒットしない
-
ACCESS2000:主キーに半角と全...
-
各カテゴリの件数の計算方法に...
-
DB設計に要する見積もりについて
-
「正規形」のよみかた
-
データベースでの質問です。
-
ORACLEでダミー行を作成したい
-
テーブル設計の際の縦持ちについて
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
Oracle 2つのDate型の値の差を...
-
Access テキスト型に対する指定...
-
Accessでテーブルの値をテキス...
-
Accessでコードを入れると名前...
-
変数が選択リストにありません
おすすめ情報