Sql 覆盖柱设计最佳实践

Sql 覆盖柱设计最佳实践,sql,sql-server,sql-server-2008,database-design,Sql,Sql Server,Sql Server 2008,Database Design,我有以下表格: dbo.Order ID SourceLinkID OverrideQueueID dbo.SourceLink ID SourceInputID SourceOutputID dbo.QueueSourceLink ID QueueID SourceLinkID dbo.Queue ID 通常,我们将通过从dbo.Order转到dbo.QueueSourceLink来获取订单的队列。允许用户通过在dbo.Order表的OverrideQueueUID中保存队列ID来覆盖

我有以下表格:

dbo.Order
ID SourceLinkID OverrideQueueID

dbo.SourceLink
ID SourceInputID SourceOutputID

dbo.QueueSourceLink
ID QueueID SourceLinkID

dbo.Queue
ID
通常,我们将通过从dbo.Order转到dbo.QueueSourceLink来获取订单的队列。允许用户通过在dbo.Order表的OverrideQueueUID中保存队列ID来覆盖此队列。这本质上使我必须对所有必须获取订单的QueueID的查询执行合并或联合


我正在寻找关于重新设计这张桌子的建议,或者寻找更好的处理方法。我无法将QueueID放入dbo.Order表中,因为用户可以随时将SourceLinkId移动到不同的队列,因此如果我要这样做,每次都必须更新dbo.Order表。一旦覆盖dbo.Order,它将始终保持被覆盖状态,因此这是最终队列。

当用户覆盖QueueId时,您可以将其放在QueueSourceLink表而不是Order表中,如果需要对覆盖执行特殊操作,还可以包括“IsOverride”标志列。或者,您可以不将订单链接到QueueSourceLink,而是将其直接链接到队列。用户仅在该1个订单上覆盖队列,而不是在整个SourceLinkID链接上覆盖队列。具有该SourceLinkID的其他订单仍在其所在的队列中。直接到队列的顺序给了我什么,我还需要弄清楚它是否被覆盖吗?如果将QueueID而不是SourceLinkID放在顺序表中,那么还可以添加IsOverride标志来处理覆盖。另外,如果使用SourceLinkID将订单链接到QueueSourceLink,那么如果同一个SourceLinkID绑定到多个QueueID,是否可以获取多个QueueID?