1273822297 データモデリング初心者です。

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を作成するには、どのようにすれば良いのでしょうか、ご教授下さい。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:
  • 終了:2010/05/21 16:35:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:hanako393 No.1

回答回数1142ベストアンサー獲得回数87

ポイント35pt

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

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

解決方法

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



本当は、

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

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

考え直すべき

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

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

id:shiozy

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

初心者でスミマセン><

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

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

D(d1)

A(d1, d2)

B(d1, d3)

D→A、D→B

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


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

商品(品番、品名')

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

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

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

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

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


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

2010/05/14 22:20:03
id:memamii No.2

回答回数11ベストアンサー獲得回数1

ポイント35pt

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

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

{ 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

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

id:shiozy

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

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

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

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

ということは、

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

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

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

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

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

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

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

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

2010/05/16 00:06:35

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません