データベースの正規化について質問です><教えて下さい。
伝票を正規化していく問題なのですが、
受注番号 受注日 得意先コード 得意先名 得意先住所 {商品コード 商品名 販売単価 受注数量 受注金額}
{}は繰り返しを表します。
これをまず自分で第一正規化してみて//*は主キーを表す。
*受注番号 受注日 得意先コード 得意先名 得意先住所 *商品コード 商品名 販売単価 受注数量 受注金額
になり次に第二正規化してみて
*受注番号 受注日 得意先コード 得意先名 得意先住所
*商品コード 商品名 販売単価
*受注番号 *商品コード 受注数量 受注金額
になり最後に第三正規化をして
*受注番号 受注日 得意先コード
*得意先コード 得意先名 得意先住所
*商品コード 商品名
*商品名 販売単価 //ココです。
*受注番号 *商品コード 受注数量 受注金額
となったのですが模範解答には//ココです。の部分がなく、*商品コード 商品名 販売単価 これのままで終わっていました。
自分が間違えているのでしょうか??もし間違えているなら理由を教えて下さい。長くてすいません
No.1
- 回答日時:
商品名はユニークとは限らないので、キーにするのはおかしいです。
あるいは、ご自分でも、そこをわけてるのに、
*得意先コード 得意先名
*得意先名 得意先住所
にしなかった理由を考えればわかるのでは?
No.2
- 回答日時:
> 自分が間違えているのでしょうか?
> もし間違えているなら理由を教えて下さい。
間違っています。
「*商品コード 商品名 販売単価」という表の各項目の関数従属の矢印は,
「ある商品コードに対して,商品名は一意に決まる」
「ある商品コードに対して,販売単価は一意に決まる」
の2つです。この表には推移関数従属が含まれていませんから,第三正規形への変形過程はありません。
部分関数従属性を排除する第二正規形の例
http://itpro.nikkeibp.co.jp/article/lecture/2006 …
推移関数従属性を排除した第三正規形の例
http://itpro.nikkeibp.co.jp/article/lecture/2006 …
No.3ベストアンサー
- 回答日時:
実務レベルと、学習レベルだと模範になるモデルはかわってきます。
今回は学習レベルということでよろしいですか?
実務レベルではご提示のようなデータの持ち方はありません
→受注番号 受注日 得意先コード 得意先名 得意先住所 {商品コード 商品名 販売単価 受注数量 受注金額}
(1)受注番号をプライマリとして処理するかどうか
通例、受注番号はユニークですが、特定の受注を修正する必要が出た場合
履歴の問題から受注番号を新たに振りなおす必要がでてきます。
それはビジネス的にはナンセンスなので、プライマリーなIDを別途もたせるか
枝番をつけるかのどちらかになります。
(2)得意先コードと得意先名、得意先住所は学習レベルでは正規化すべき項目ですが
実務レベルでは正規化できません。
つまり得意先の名前や住所は普遍性がなく、変わる可能性が高いからです。
逆に名前や住所がかわるたびに得意先コードを振りなおすケースもありますが
そうすると集計性がそこなわれます。場合によってはこれも枝番を発行したりする
ケースになるかもしれません。
(3)同様に商品コードは受注番号にひもづくとして、商品名は普遍性があると
みて正規化することができるかもしれません、販売単価と受注数量は受注番号
に依存するものなので正規化対象ではないでしょう。
近年の傾向から消費税も変動的なものなので、税金も受注番号ごとに持たせる
必要がでてくると思います。
(実際は期日と税テーブルで対応は可能ですが集計を簡素化するためには有効)
受注金額も集計のため持たせるのが実務的ですが、計算結果なので学習レベルでは
もたせる必要はありません。
(4)販売単価についてもマスター化できますが、ビジネスにおいては販売単価は
ころころ変わります。当然実務レベルでは個別にもつのが常識で、学習レベルでは
商品マスターに埋め込めるかもしれません。
あわせて粗利なども個別受注ごとに持たせた方が集計はしやすくなります。
総じて・・・きっちりやるなら
[販売データテーブル]
*オリジナルID 受注番号 受注日 作成日 更新日 得意先コード 得意先名(受注時) 得意先住所(受注時) 商品コード 販売単価 受注数量 受注金額税抜 税額 受注金額税込 削除フラグ
[得意先テーブル]
*得意先コード 得意先名 得意先住所
注)結局名前と住所は二重でもつことになる
[商品テーブル]
*商品コード 商品名
となり、ざっくりとするなら
[販売データテーブル]
*受注番号 受注日 得意先コード 商品コード 受注数量
[得意先テーブル]
*得意先コード 得意先名 得意先住所
[商品テーブル]
*商品コード 商品名 販売単価
みたいな持ち方になるでしょうか・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) accessについて 2 2022/05/31 16:58
- その他(買い物・ショッピング) JANコードの登録について 1 2022/07/23 14:19
- Excel(エクセル) エクセルデーターの並び替え 5 2022/08/06 09:59
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- Excel(エクセル) Excel 関数 vlookupなどの使い方について質問です。 シート1に品番、商品名、単価、発注条 6 2022/06/15 19:16
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- Amazon AmazonでSSDを返品しました。返品しても購入履歴のところは返品完了にならないのですか?? 3 2023/01/05 17:38
- Excel(エクセル) ピボットテーブルの表示変更の仕方 初心者なので、的外れな質問だったらすみません 受注日ごとに商品名と 1 2022/04/26 23:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
accessでの請求管理について
-
accessでのフォームの連携について
-
フィールド名が取得したい
-
Accessフォーム全レコードをPDF...
-
請求先
-
アクセスクエリの計算
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Oracle 2つのDate型の値の差を...
-
Accessでテーブルの値をテキス...
-
FROM の中で CASE を使えるでし...
-
Access テキスト型に対する指定...
-
作番ってどういう意味でしょうか?
-
IT用語について質問です。 以前...
-
Accessでテーブル名やクエリ名...
-
Accessのクエリでデータの入力...
-
BLOB型のPDF出力の方法
-
APN設定について教えていただけ...
-
データベースの1要素に複数デー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるフィールドの最大値を条件...
-
usingの意味がわからないのですが
-
Accessフォーム全レコードをPDF...
-
Accessの帳票フォームで重複デ...
-
Access2021 「ISNULL関数には引...
-
MS ACCESS 商品価格変更時の該...
-
アクセスのテーブルを分ける理...
-
accessでの請求管理について
-
ACCESS VBA クエリを開く
-
【Accessクエリ】存在しないデ...
-
accessでのフォームの連携について
-
SQL EXISTS演算子について
-
accessについて
-
曜日を表す項目
-
フィールド名が取得したい
-
Accessでクエリの作成、多対1対...
-
Accessについて(DLOOKUP関数、...
-
集計結果を別テーブルに更新ク...
-
Excelで重複する情報に番号を付...
-
正規化すると遅くなるというの...
おすすめ情報