3

パッケージ A にはデスクトップ Y が 1 台とモニター Z が 1 台含まれています。パッケージ B にはデスクトップ Y が 1 台とモニター Z が2 台含まれています。エンティティ デザイナーによって作成されたデータベースでその関係を表現したいと考えています。

と の間には多対多の関係がStandardPackageありStandardMachineます (デスクトップ、モニター、ラップトップなどがあります)。四半期ごとにパッケージを更新し、クライアントが注文します。彼らはパッケージを選択し、注文が行われると、そのパッケージのStandardMachinesデータ (タイプ、メーカー、モデルなど) が新しく作成された にダンプされMachinesます。

問題は、Entity Designer がStandardPackageStandardMachineリレーションシップのジャンクション テーブルを作成する方法にあります。ジャンクション テーブルには、リレーションシップの両端にあるレコードの ID に対応する 2 つの列があり、ジャンクション テーブルの主キーは、これら 2 つの ID の組み合わせです。したがって、最初の段落の例で、パッケージ A の ID が 1、パッケージ B の ID が 2、デスクトップ Y の ID が 1、モニター Z の ID が 2 の場合、必要なのは

StandardPackageId | StandardMachineId
------------------|------------------
         1        |         1        
         1        |         2
         2        |         1
         2        |         2
         2        |         2

しかし、明らかに 2/2 レコードを 2 つ持つことはできません。

ジャンクション テーブルの自動インクリメント主キー列を作成するように、Entity Designer に何をしようとしているのかを伝える良い方法はありますか? それとも、ジャンクション テーブルを手動で作成し、関連付けを自分で処理する必要がありますか?

ところで、誰かが私の質問のタイトルを言い換える方法さえ知っていれば、そうしてください.

4

2 に答える 2

1

通常行うことは、マスター/詳細関係を作成することです。

あなたがしていることの文脈がよくわかりません。通常、パッケージには Package:Items の 1:many 関連付けがあり、各アイテム行には独自の行番号 (シーケンス番号と呼ばれることもあります) があり、製品テーブルとの外部キー関係があります。つまり、次のようなものです。

ID Name
1  Package A
2  Package B

ID PkgID Line(Seq) PrdID
1  1     1         1 
2  1     2         1
3  1     3         2
4  2     1         1
5  2     2         2

ID Name
1  Monitor Y
2  Desktop Z

このようにして、単一の型をいくつでも持つことができます。ID と Line の理由は、ID がテーブルの一意のキーであるのに対し、各注文で Line 番号が重複するためです。または、PkgID と Line の複合キーを作成することもできます。

于 2013-05-15T02:12:58.107 に答える
1

または、ジャンクション テーブルを手動で作成し、関連付けを自分で処理する必要がありますか。

はいあなたが持っています。テーブルはジャンクション テーブルではなく、エンティティであるためです。

多対多の関連付けのセマンティクスは、表現したいものとは微妙に異なります。通常の n:m 対応表の 1 つのレコードは、「A が B に関連している」ことを表します。あなたのテーブルでは、「AにはBのインスタンスがあります」と表現されます。

前者の表現は、繰り返されると常に冗長になります。「A は B に関連しています」 - OK、それはわかっていました。後者はそうではありません:「AにはBの別のインスタンスがあります」。したがって、2 つの異なるインスタンスが存在します。つまり、各インスタンスにはIDがあります。ID は、エンティティのコア概念です。

これStandardPackageStandardMachineは、パッケージ内のマシン インスタンスを表す単なる通常のクラスですが、それはまだ「仮想マシン」です。

于 2013-05-14T20:58:41.543 に答える