我有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表,还是只使用当前表?
还有其他方法吗?
答案 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
表。您可能正在创建一种使用此中间表可能会损害数据完整性的情况。
您是否了解交易?使用它们。如果写入三个表中的两个,则客户端上的电源关闭且无法完成第三次写入,事务将失败并且部分数据将被回滚。
除非我完全忽略了这一点......