私が正しく理解していれば、未確定の注文にはまだパン屋/価格が割り当てられていません(つまり、注文が行われたときに、製品を焼くためのパン屋がまだ選択されていません)。
この場合、注文はおそらく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
)