【发布时间】:2017-08-04 13:11:17
【问题描述】:
我有一个带有临时表的 SQL Server 数据库,用户输入的数据在其中保存,直到他们最终提交申请表,此时数据被复制到实时表中。
所以我有一个名为ApplicationStaging 的表,其中包含列:
ApplicationID 1
UserID 2
CustomerName 'Joe Bloggs'
//More columns removed for brevity
然后我有一个名为ItemStaging 的表,其中包含列:
ItemID 1
ApplicationID (FK) 1
ItemName 'Car'
//More columns removed for brevity
然后我有我的实时Application 表和实时Item 表,它们现在包含与临时表完全相同的列名。我有大约 20 个这样的表,并且一些不同的表之间存在 FK 关系。在重新创建 FK 关系时,使用存储过程将数据从暂存表复制到活动表的最佳方法是什么(注意,从暂存到提交的 ID 可能会有所不同,具体取决于最终用户何时提交应用程序与何时提交已保存)。
我在想我需要在实时表上做的一件事是添加一个 StagingID 列并设置它,这样我就可以有一个链接返回到从暂存表
【问题讨论】:
-
只是说显而易见的,但是如果表完全一样,并且它们在同一个数据库中,为什么不将信息存储在同一个表中并简单地使用一个位标志来指示记录已提交/未提交。使用一组表而不是 2 组,如果您这样做,它将为您节省大量不必要的代码。此外,想象一下,表结构发生变化,然后您有 2 个地方进行更改以及在表之间移植记录的代码。
-
我会敦促您考虑@Tanner 的建议。但是,如果这不是一个选项,那么您期望在这里得到什么答案?由于我们基本上对任何人都可以响应的信息为零,因此您需要先插入父信息,然后再插入子信息。
-
@Tanner - 是的,这本来是理想的解决方案,但不幸的是,在我加入项目之前,数据库设计已经完成
-
@Tanner - 虽然您的建议适用于 99% 的情况,但在某些情况下临时表也不错: 1. 对提交新申请的人没有限制 - 您没有不想用垃圾向“生产”表发送垃圾邮件。 2. 允许乱序添加数据,这通常会违反生产表中的 FK 和其他约束。
-
@Tanner - 我不是在和你争论,只是指出在某些情况下 OP 的方法是可行的。我们对他的制度一无所知,因此没有必要就什么更好的问题展开意识形态战争。
标签: sql-server database