将数据从一个表分发到sql server中的多个表

时间:2011-03-08 07:34:21

标签: c# .net sql sql-server sql-server-2005

我有3张桌子:

Item_Detail ----------------- ID,Name

ItemPurchased_Detail --- QtyPurchased,RateOfPurchase,DiscountReceived

ItemSold_Detail ----------- QtySold,RateofSale,DiscountGiven

另外,我有一个MAIN TABLE,ITEM_FULL_DETAIL,其中包含3个表中的所有列。

我有一个winform应用程序,其中包含一个表单,其中包含要在ITEM_FULL_DETAIL表中插入数据的所有文本框。用户将输入所有数据,然后单击“提交”按钮

我想首先在MAIN TABLE中插入数据,然后它应该将数据分别分配给所有3个表。为此,我将使用什么?喜欢触发器,部分或视图或连接?

另外,我正在使用ITEM_FULL_DETAIL表,因为我想保护我的实际表免受任何数据丢失的影响,例如在断电的情况下。

我应该使用临时表代替ITEM_FULL_DETAIL表,还是只使用当前表?

还有其他方法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用数据库触发器或在应用程序级别插入所有记录。

答案 1 :(得分:1)

你应该重新考虑你的设计:在不同的表中复制相同的数据通常是个坏主意。在这种情况下,您可以将ITEM_FULL_DETAIL替换为视图,然后在基础表中维护数据。这样,您只有一个数据副本,因此您无需担心表之间的不一致。

如果您这样做,那么您可以按正确的顺序将新数据插入3个基础表(可能是最好的想法),或者在ITEM_FULL_DETAIL视图上使用INSTEAD OF触发器(更复杂)。 INSERT可以使用ORM,ADO.NET,存储过程或任何最适合您的应用程序设计的方式完成。

如果您确实有充分的理由重复数据,那么如果您可以共享它会很有帮助,因为有人可能会对该方案有更好的建议。

答案 2 :(得分:1)

  

另外,我正在使用ITEM_FULL_DETAIL表,因为我希望保护我的实际表免受任何数据丢失的影响,例如在断电的情况下。

..什么?你觉得如何保护你的桌子?你想阻止什么?如果您担心的是数据完整性,则绝对不需要ITEM_FULL_DETAIL表。您可能正在创建一种使用此中间表可能会损害数据完整性的情况。

您是否了解交易?使用它们。如果写入三个表中的两个,则客户端上的电源关闭且无法完成第三次写入,事务将失败并且部分数据将被回滚。

除非我完全忽略了这一点......