1

私はこれに1日と少しの間、パン屋を所有する友人のために開発しているアプリのデータベース(MySQL)を最適にモデル化する方法を見つけようとしています。前提条件は次のとおりです。

  • 多くの(外部)Bakersが多くを生み出すProducts
  • BakersProductsは、製品の価格についてパン屋に電話するか、パン屋が価格表をファックスで送信する特定のスタッフによって隔週で更新されます。その後、スタッフはフロントエンドUIを介して更新します。
  • マネージャーは、自分が持っていると予想する製品に基づいて注文を生成できる必要があります。

したがって、フロントエンドUIは、マネージャーが注文で希望する商品を純粋に選択できるようにし、注文の各商品について選択できるパン屋のリストをマネージャーに提示できる必要があります。

つまり、Orders_has_Productsへの参照も含める必要がありますBakersProducts.bpID。これを行うと、(ある種の)循環参照を作成することになると確信していますProducts

ここに画像の説明を入力してください

私はこれを間違った方法で行ったと確信しており、選択した製品価格に対応するためにデザインを再構築する方法について、誰かのアドバイスを本当にいただければ幸いです。含めるBakersProducts.bpID

ありがとうございました!

4

3 に答える 3

3

これは循環参照ではありません。

  • Order_has_productsはProductsを参照します
  • Order_has_productsはBakersProductsを参照します
  • BakersProductsは製品を参照しています

循環参照は、たとえば、

  • Order_has_productsはProductsを参照します
  • 製品参照BakersProducts
  • BakersProductsはOrder_has_productsを参照します

それを除けば、データベースでは循環参照は比較的正常です(つまり、マネージャーフィールドを持つEmployeesテーブルで、マネージャー自身が従業員である場合、従業員は1つのテーブルの循環参照です)

1つの製品がOrder_has_productsテーブルで2回参照されるため(1つはProductsテーブルから直接参照され、もう1つは関連するBakersProductsレコードを介して)、設計にあるのは単純な冗長性です。同期が外れる可能性はありますが、パン屋の前に商品を選ぶというビジネスルールがあるとおっしゃっていたので、大丈夫です。

逆の場合でもproductIDを含めます。これは、クエリを高速化するときに少しの非正規化が大いに役立つ可能性があるためです。そうしないと、次のような単純な質問であっても、BakersProductsテーブルをスキャンする必要があります。水曜日にベーグルはありますか?」

于 2011-01-26T07:58:47.573 に答える
2

取り違えはビジネスプロセスの観点からだと思います。つまり、要求と注文が混同されているということです。

購買依頼には、必ずしもそれぞれのサプライヤを指定せずに必要な製品のリストがありますが、注文は特定のサプライヤに向けられ、特定の価格検索コード(何bpIDを表しているように見えるか)が求められます。1つの購買依頼が複数のサプライヤに分割されている場合、複数の注文が発生する可能性があります。また、ベンダーの数量制限や配送の地域によって、1つの製品でも複数のサプライヤに注文が分割される場合があります。

各求人広告申込情報から生成された注文広告申込情報を表示する求人情報のビューを提供することもできますが、これはユーザーインターフェイスの問題です。

于 2011-01-26T07:59:17.417 に答える
1

これを解決する1つの方法は、Productsテーブルを削除し、productNameをBakersProductsテーブルに移動することです。

これは基本的に、製品がパン屋に固有のものである場合に、パン屋が同じ製品を運ぶことを期待しない場合にのみ機能します。

パン屋が同じ商品を運ぶことを期待している場合は、別のProductsテーブルを残しておくこともできますが、Order_has_Products.Products_productIDを使用する代わりに、Order_has_Products.bpIDに変更します。productName(またはそのテーブルに含まれる可能性のある他の製品関連のメタデータ)にアクセスする必要がある場合は、BakersProductsとProductsの間で結合を行うことができます。

于 2011-01-26T07:58:27.620 に答える