用于建模组字段的SQL模式

时间:2016-06-19 13:10:49

标签: sql-server database-schema

我被要求对现有的SQL数据库进行一些调整,但是在设计如何建模以下场景时遇到了问题:

目前,订单商品可以与托盘相关联,也可以不与托盘相关联。目前,这只是数据库表上的整数字段。如果该订单商品上的某些字段已更新,则需要在共享相同PalletID的所有其他商品中进行反映。我被要求通过代码进行这种同步,但感觉很糟糕,很容易变得不同步。

我考虑制作一个包含共享字段的新表tblPallet,但是在订单商品没有托盘的情况下,订单商品仍然需要存储这些细节的副本:

订单项

ID, 描述, PalletID, CurrentStage, 位置,

托盘

ID, CurrentStage, 位置

有没有人为此建模有任何其他想法?

1 个答案:

答案 0 :(得分:0)

1)如果在托盘上之前,一个或多个项目可以共享相同的W/AutomaticGainControl: not enough memory CurrentStage我将使用以下解决方案(在这种情况下为Location和{{1}项目级别的列和托盘级别的CurrentStageLocation是xor;如果填充CurrentStageLocation,则OrderItemGroup.CurrentStage应为NULL或OrderItemGroup.Location 1}}填充然后OrderItemGroup.PalletIDOrderItemGroup.PalletID应为NULL):

OrderItemGroup.CurrentStage

2)但是如果在托盘之前,来自同一订单的商品(大多数情况下)不同OrderItemGroup.LocationOrderItem( ID - PK, OrderID - FK, ... other columns except PalletID, CurrentStage, Location ... ) OrderItemGroup( ID - PK, OrderItemID - FK, CurrentStage - allows NULLs, Location - allows NULLs, PalletID - FK - it allows NULLs, CHECK(CurrentStage IS NOT NULL AND Location IS NOT NULL AND PalletID IS NULL OR CurrentStage IS NULL AND Location IS NULL AND PalletID IS NOT NULL) -- {CurrentStage, Location} xor {PalletID} ) Pallet( ID - PK, CurrentStage - NOT NULL, Location - NOT NULL ) 我将使用以下解决方案(在这种情况下{{1}项目级别的{}和CurrentStage列以及托盘级别的LocationCurrentStage是xor):

Location

2.1)如果您必须存储位置历史记录,那么我会使用以下方法(这不是唯一的解决方案,但在我看来 - 这是最简单的方法):

CurrentStage