データベースの正規化について質問です。
「達人に学ぶDB設計徹底指南書」という本で勉強しています。
その本の演習問題についての質問です。
以下転載します。
「次のような「支社支店商品」テーブルについて考えます。主キーは「支社コード、支店コード、商品コード」です。このテーブルを可能な限り、高次に正規化してください。
答えはこちらになります。以下に示します5つのテーブルになります。(見にくくて申し訳ないです。)
そこで質問なのですが、商品テーブルについて考えた時に、これは第3正規化がなされているのでしょうか?
第3正規化がなされたテーブルというのは推移的関数従属をテーブル中に持たないはずですが、このテーブルは
{商品コード} -> {商品名} -> {商品分類コード}
となっているように思えるのです。
すなわち、このテーブルはまだ分割の必要があるのではないでしょうか?
もう一点あります。
最後の支店商品テーブルについてなのですが、主キーだけで構成されている、いわゆる関連エンティティに対応するテーブルになると思います。
第4正規化を考えると、これもさらなる分割の必要があるように思えるのですが、どうなのでしょうか?
以上、2点回答よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
例題
結果となるテーブル
支社CD | 支社NM | 支店CD | 支店NM | 商品CD | 商品NM |
---|
細分化
支社CD★ | 支社NM |
---|
支社CD★ | 支店CD★ | 支店NM |
---|
商品CD★ | 商品NM |
---|
関連付けテーブル
支社CD★ | 支店CD★ | 商品CD★ |
---|
支店支社の組み合わせに対する商品ですので限界ですね。※ 支店コードの重複をみてなかった・・・
投稿2016/10/09 13:10
編集2016/10/09 13:13退会済みユーザー
総合スコア0
0
第3正規化がなされたテーブルというのは推移的関数従属をテーブル中に持たないはずですが、このテーブルは
{商品コード} -> {商品名} -> {商品分類コード}
となっているように思えるのです。
商品コードはプライマリキーですので、商品コードからタプルが一意に特定できると考えれば、最初の矢印は特に不思議では無いと思います。
また、同様の商品名で異なる分類コードを持つ商品が存在することも考えられますので、一般に商品名のみで商品分類コードを特定することはできません。
したがって、これは関数従属ではありません。(この表に存在するデータのみを考えた場合は関数従属のように見えますが…)
最後の支店商品テーブルについてなのですが、主キーだけで構成されている、いわゆる関連エンティティに対応するテーブルになると思います。
第4正規化を考えると、これもさらなる分割の必要があるように思えるのですが、どうなのでしょうか?
「連関」エンティティですね。
これらの外部キーは各々他の表のプライマリキーですので、これ以上の情報無損失分解はできないと思います。(支社コードと支店コードを別の表にすると支店名が特定できなくなります)
投稿2016/10/09 13:09
総合スコア740
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/09 15:34 編集
退会済みユーザー
2016/10/10 08:15
0
ベストアンサー
{商品コード} -> {商品名} -> {商品分類コード}
となっているように思えるのです。
すなわち、このテーブルはまだ分割の必要があるのではないでしょうか?
{商品名} -> {商品分類コード} というテーブルが必要という意見でしょうか?
と書けばおわかりでしょう。もちろんそれも成り立ちますが、{商品コード} -> {商品分類コード} という従属関係が成り立っているので分割の必要がありません。
最後の支店商品テーブルについてなのですが、主キーだけで構成されている、いわゆる関連エンティティに対応するテーブルになると思います。
第4正規化を考えると、これもさらなる分割の必要があるように思えるのですが、どうなのでしょうか?
私は{支社コード、支店コード} ー> {商品コード}の従属関係と捉えています。もちろん支社毎に取扱商品の契約をしなければならない事情がある場合は第四正規化の必要も考えられますが、考え過ぎに思えます。
投稿2016/10/09 12:58
総合スコア2883
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/10/09 14:37
2016/10/09 15:01
退会済みユーザー
2016/10/10 08:12
2016/10/10 11:48
2016/10/10 13:10
退会済みユーザー
2016/10/11 02:48
2016/10/11 03:03
2016/10/11 04:07
2016/10/11 07:54
2016/10/11 12:01
退会済みユーザー
2016/10/13 13:10
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。