3

以前にも同様の質問を投稿しましたが、これはより具体的です。次の図をご覧ください。 DatabaseTableDesignIssue この設計の説明は次のとおりです。

  • パン屋は多くの製品を生産しています
  • 同じ製品を複数のパン屋で生産することができます
  • パン屋は、特定の(彼らの)製品の価格を時々変更します
  • 注文は作成できますが、必ずしも確定する必要はありません

ここでの目的は、店長が必要な商品に基づいて注文「バスケット」を作成できるようにすることと、作成中のシステムが注文に含まれる商品に基づいてその時点での最良価格を決定できるようにすることです。

したがって、システムによって決定および更新される、およびのnull(未決定)値を維持しながら、最初におよび関連ProductOrdersするテーブルを保持することを想定しました。これにより最終的な注文が構成されます。productIDorderIDbakerIDpricingDate

私が何をしようとしているのかがわかったので、これらの関係を最適に設定する方法について教えてください。

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

4

1 に答える 1

2

私が正しく理解していれば、未確定の注文にはまだパン屋/価格が割り当てられていません(つまり、注文が行われたときに、製品を焼くためのパン屋がまだ選択されていません)。

この場合、注文はおそらくProductsテーブルに対して行われ、次にBakersProductsテーブルに対して「Finalized」されます。

解決策は、ProductsOrders 2に個別の「ProductID」を指定することです。1つは元の注文されたProductId(つまり、Nullableではない)用で、もう1つは割り当てられたBakersProducts(ProductId2など)の外部キーの一部です。つまり、ProductsOrdersでは、複合外部キーBakerId、ProductId2、およびPricingDateは、注文が確定した後にのみ設定されるため、すべてnull可能です。

この冗長性を排除するために、複合キーの代わりに代理キーを使用することも検討してください。このように、BakersProductsには代理PK(BakersProductIdなど)があり、ProductsOrdersでnull許容FKとして参照されます。これにより、ProductsOrdersからProduct.ProductId(上からはOrderの一部としての元のProductラインでした)へのDirectFKとの混同も回避されます。

HTH?

編集:

CREATE TABLE dbo.BakersProducts
(
  BakerProductId int identity(1,1) not null, -- New Surrogate PK here
  BakerId int not null,
  ProductId int not null,
  PricingDate datetime not null,
  Price money not null,
  StockLevel bigint not null,

  CONSTRAINT PK_BakerProducts PRIMARY KEY(BakerProductId),
  CONSTRAINT FK_BakerProductsProducts FOREIGN KEY(ProductId) REFERENCES dbo.Products(ProductId),
  CONSTRAINT FK_BakerProductsBaker FOREIGN KEY(BakerId) REFERENCES dbo.Bakers(BakerId),
  CONSTRAINT U_BakerProductsPrice UNIQUE(BakerId, ProductId, PricingDate) -- Unique Constraint mimicks the original PK for uniqueness ... could also use a unique index
)

CREATE TABLE dbo.ProductOrders
(
  OrderId INT NOT NULL,
  ProductId INT NOT NULL, -- This is the original Ordered Product set when order is created
  BakerProductId INT NULL, -- This is nullable and gets set when Order is finalised with a baker
  OrderQuantity BIGINT NOT NULL,


  CONSTRAINT FK_ProductsOrdersBakersProducts FOREIGN KEY(BakersProductId) REFERENCES dbo.BakersProducts(BakerProductId)
  .. Other Keys here
)
于 2011-02-10T13:43:53.900 に答える