人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

データモデリング初心者です。
Eclipseのデータモデリング用プラグイン、「ERMaster」についての質問です。

現在、渡辺幸三氏の「データモデリング入門」、「上流工程入門」を参考に、独学でデータモデリングの勉強をしています。

環境は、
OS:Ubuntu10.04 64bit(デスクトップ)
ソフト:Eclipse v3.5.2 + ERMaster v1.0.0
データベース:MySQL
です。

※以下A?Cはテーブル、d1?d3はいずれも主キーです

上記のいずれの本の中でも出てくる、テーブル構造


A(d1, d2)
B(d1, d3)
C(d1, d2, d3)

※A(親)とC(子)は親子関係、
B(親)とC(子)は親子関係


をERMasterで作ろうと思い、

A(d1, d2)
B(d1, d3)
C(空)

のテーブルを作成し、A、Bのそれぞれから、Cへの1:N関連を作成し、主キーの設定を行うと、

C(d1, d2, d1, d3)

というテーブルは作成出来るのですが、C中の重複したd1を削除しようとしても、「外部キーは削除できません」と言われ、目的の「C(d1, d2, d3)」を作成出来ません。


ERMasterの公式ドキュメントを読み、googleで主に色々当たってみたのですが、解決方法が分かりませんでした。

テーブルCを作成するには、どのようにすれば良いのでしょうか、ご教授下さい。

1273822297
●拡大する

●質問者: shiozy
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:10.04 ?D D1 D2 D3
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● hanako393
●35ポイント

>A(親)とC(子)は親子関係、

>B(親)とC(子)は親子関係

解決方法

D(d1)を作成しD→A,D→Bを作成する



本当は、

あまり親が2つあって子が1つというのは

データモデリングとして妥当でないので

考え直すべき

こういうケースは、まずありえないので設計としてはだめ。

http://q.hatena.ne.jp/answer

◎質問者からの返答

ご回答ありがとうございます、

初心者でスミマセン><

>D(d1)を作成しD→A,D→Bを作成する

テーブルCを作る方法ですので、ご返信いただいたこちらの方法では

D(d1)

A(d1, d2)

B(d1, d3)

D→A、D→B

は作成出来ても、テーブルCは作成できないのではないでしょうか?


>こういうケースは、まずありえないので設計としてはだめ。

商品(品番、品名')

商品カラー(品番、カラーコード)

商品サイズ(品番、サイズコード)

といったテーブル(属性で「'」なしは主キー、「'」付きは候補キー)があったとして、

商品カラーサイズ(品番、カラーコード、サイズコード、在庫数')

というようなデータモデリングはおかしいということでしょうか?


もし、おすすめの書籍やサイトなどをご紹介いただければ幸いです。


2 ● mamekko
●35ポイント

例えば、以下のような場合を考えてみてください。

商品カラー(品番、カラーコード) =

{ 1, '赤' },

{ 1, '青' }

商品サイズ(品番、サイズコード) =

{ 2, 'S' },

{ 2, 'L' }

ここから、商品カラーサイズ(品番、カラーコード、サイズコード、在庫数')を作ろうとすると、品番1についてはサイズコードがありませんし、品番2についてはカラーコードがありません。つまり、このまま、このテーブルを作成して、おっしゃるように親子関係としてもレコード数0となるはずです。

ですので、モデリングとしては、以下の関係性を定義する必要があります。

・外部参照:商品テーブルの品番と商品カラーテーブルの品番(1:n)

・外部参照:商品テーブルの品番と商品サイズテーブルの品番(1:n)

・外部参照:商品カラーサイズテーブルの品番+カラーコードと、商品カラーテーブルの品番+カラーコード(n:1)

・外部参照:商品カラーサイズテーブルの品番+サイズコードと、商品サイズテーブルの品番+サイズコード(n:1)

そうすれば、自然と商品カラーサイズ(品番、カラーコード、サイズコード、在庫数')は作成できると思います。

尚、私はそのツールを使用した事はありませんが、モデリングという面で回答させて頂きました。

http://riko.s281.xrea.com/Modeling/model7-0306.htm

によると複合キーということで、ご質問のようなモデリングは「あり」ということになります。

◎質問者からの返答

ご丁寧なご回答及び、参考リンクありがとうございます。

やはり、データモデリング的には間違いではないということですね。

書籍にも載っていた例だったので、それを聞いて納得&安心致しました。

そうしますと、問題は、「上記のようなデータモデリングをERMasterで作成できない」となります。

ということは、

・ERMasterで上記のようなリレーションを作成出来ない。(ERMasterが問題)

・ERMasterで上記のようなリレーションを作成出来るが、私がその方法を分かっていない。(私が問題)

・データモデリングとしては正しくても、一般に、データベースには上記のようなリレーションを作成できない。(データモデリングとデータベースの間の問題)

・データモデリングとしては正しくても、MySQLには上記のようなリレーションを作成できない。(データベース固有の問題)

のいずれかが原因かと思われます。

ですので、これらを一つずつ潰していこうと思います。

おかげさまで問題解決に一歩前進しました!!

ありがとうございます!!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ