【问题标题】:distributing data from one table to multiple tables in sql server将数据从一个表分发到sql server中的多个表
【发布时间】:2011-07-10 22:06:17
【问题描述】:

我有 3 张桌子:

Item_Detail -----------------ID,名称

ItemPurchased_Detail ---QtyPurchased , RateOfPurchase , DiscountReceived

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

另外,我有一个主表 ITEM_FULL_DETAIL,其中包含以上 3 个表中的所有列。

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

我想先在主表中插入数据,然后它应该将数据分别分配到所有 3 个表中。为此我应该用什么?比如触发器、程序、视图或连接?

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

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

还有其他方法吗?

【问题讨论】:

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


    【解决方案1】:

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

    ..什么?你认为你是如何保护你的桌子的?你想防止什么?如果您担心的是数据完整性,那么绝对没有必要拥有ITEM_FULL_DETAIL 表。您可能正在创造一种情况,在这种情况下,使用此中间表可能会损害数据完整性。

    您了解交易吗?使用它们。如果三分之二的表被写入,则客户端断电,无法完成第三次写入,事务将失败,部分数据将回滚。

    除非我完全错过了这里的重点..

    【讨论】:

      【解决方案2】:

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

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

      如果您确实有充分的理由复制您的数据,那么如果您可以分享它会很有帮助,因为有人可能对这种情况有更好的建议。

      【讨论】:

      • 先生,如果我使用视图,那么它不能同时更新 3 个表?所以请帮忙,在这种情况下我该如何使用视图
      • @sqlchild:视图的优点是它避免了重复数据。要更新 3 个表,您将始终需要 3 个 UPDATE 语句,唯一的问题是将它们放在哪里:在触发器中、在过程中或在您的应用程序中。答案取决于您的应用程序设计,例如您是否使用ORM?您是否避免将代码放入数据库中?等等。最后,正如 Josh 指出的那样,无论您选择何种解决方案,您都应该考虑使用事务处理必须一起完成或失败的相关更新。
      • 我对 ORM 不熟悉,只能说是在使用 t-sql 的插入查询
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-01
        • 2014-04-09
        • 2020-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多