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を作成するには、どのようにすれば良いのでしょうか、ご教授下さい。
>A(親)とC(子)は親子関係、
>B(親)とC(子)は親子関係
解決方法
D(d1)を作成しD→A,D→Bを作成する
本当は、
あまり親が2つあって子が1つというのは
データモデリングとして妥当でないので
考え直すべき
こういうケースは、まずありえないので設計としてはだめ。
例えば、以下のような場合を考えてみてください。
商品カラー(品番、カラーコード) =
{ 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には上記のようなリレーションを作成できない。(データベース固有の問題)
のいずれかが原因かと思われます。
ですので、これらを一つずつ潰していこうと思います。
おかげさまで問題解決に一歩前進しました!!
ありがとうございます!!
ご回答ありがとうございます、
初心者でスミマセン><
>D(d1)を作成しD→A,D→Bを作成する
テーブルCを作る方法ですので、ご返信いただいたこちらの方法では
D(d1)
A(d1, d2)
B(d1, d3)
D→A、D→B
は作成出来ても、テーブルCは作成できないのではないでしょうか?
>こういうケースは、まずありえないので設計としてはだめ。
商品(品番、品名')
商品カラー(品番、カラーコード)
商品サイズ(品番、サイズコード)
といったテーブル(属性で「'」なしは主キー、「'」付きは候補キー)があったとして、
商品カラーサイズ(品番、カラーコード、サイズコード、在庫数')
というようなデータモデリングはおかしいということでしょうか?
もし、おすすめの書籍やサイトなどをご紹介いただければ幸いです。