0

よし、どっかから読んだ

すべてのテーブルには主キーが必要です

しかし、私のテーブルのいくつかは動作していないようです! また、私が使用している関係が問題ないのか、それともさらに分解する必要があるのか​​ も知りたいです。提案を受け付けています。

関係は

ディーラー(DealerId(PK),DealerName)

Order(DealerId(FK),OrderDate,TotalBill)

Sales(DealerId(FK),ItemType,OrderDate,Quantity,Price)

PS 価格はディーラーごとに異なるため、Items(ItemCode,Type,Price) という名前のテーブルを作成できません。そして、すべての制約、つまり null ではなく、必要なチェックは既に処理されていますが、言及していません。

1.関係はうまく解消されていますか?

2. 主キーがまだ設定されていないテーブルに主キーを設定する必要がありますか?

参考になる回答をお待ちしております。

4

3 に答える 3

0

別のSalesテーブルが本当に必要ですか?

Dealers(DealerId(PK),DealerName)
Order(OrderId(PK), DealerId(FK),OrderDate, ItemType, Quantity,Price)

また、

TotalBill (can be calculated) = Quantity * Price
于 2013-03-20T13:42:21.550 に答える
0

あなたの場合、自動インクリメント整数フィールドを Order と Sales に追加し、それを主キーに設定する必要があります。

リレーショナル データベース理論では、それらの列が null ではなく一意である限り、主キーとして使用するフィールドのサブセットを特定できる場合があります。ただし、(1) ディーラーは同じ日に 2 つの注文を行う可能性があるため、注文テーブルは DealerID と OrderDate からの主キーを持つことはできません。おそらく同じ量であっても、フィールドのサブセットが一意ではないことを意味し、(2) 使い慣れたデータがデータを一意に識別できる場合でも、自動インクリメント整数は適切なキーになる可能性があります。

また、Sales から Order への外部キーが必要だと思います。結合に DealerId と OrderDate を使用している可能性がありますが、ディーラーが同じ日に 2 つの注文を行った場合、これは正しく機能しません。

最後に、次のようなアドバイスをしてください

すべてのテーブルには主キーが必要です

一粒の塩で。多対多のリレーションシップに使用されるリンク テーブルは、主キーがなくても問題なく機能しますが、主キーを使用すると、レコードの削除が容易になるため、改善される可能性があります。また、リンク テーブルに主キーがない場合は、 、すべてのフィールドで一意のインデックスをお勧めします。その場合、それが主キーになる可能性があります。

于 2013-03-20T13:44:07.690 に答える
0

質問 1 について、次の質問に答えてください。

注文しなくても売れますか?

はいの場合、ディーラーが販売を行った場合にのみ販売が存在すると仮定すると、Sales の DealerId(FK) は問題ありません。

いいえの場合、DealerId(FK) の代わりに OrderId(FK) を Sales に入れる必要があります。販売が注文に属している場合、この注文は販売店に属しているため、販売店から販売への関係が既に存在します。

質問 2 については、データベース上の特定のアイテムを選択、更新、および削除する必要があるため、テーブルに主キーが必要です。主キーは必ずしも自動インクリメント列ではないことに注意してください。

Items テーブルについては、価格がディーラーごとに異なる場合、ディーラーとアイテムの間に M 対 N の関係があります。つまり、次の例のような中間テーブルを持つことができます。

DealerItemPrices(DealerId(FK), ItemId(FK), 価格)

そして、これら 2 つの外部キーは一意の複合キーである必要があります。このようにして、ディーラー Y は同じアイテムに対して 2 つの異なる価格を持つことはできません。

それが役に立てば幸い!

于 2013-03-20T14:21:10.237 に答える