检查两个表之间的约束

时间:2016-11-23 11:21:44

标签: sql sql-server constraints

我有两张桌子,让他们称他们为A和B.他们有一对多的关系。

表A

Trxid int,
TotalAmount decimal(10,2)

表B

Trxid int,
TblBcol Varchar,
Amount decimal(10,2)

表B包含表A的分解细节。

我的要求:表B的Amount列的总和应该等于每个TotalAmount的表A' trxid列。

是否有任何限制可用于实现此目的还是有其他方法吗?

1 个答案:

答案 0 :(得分:1)

有一些可能的解决方案。根据您的喜好选择。

  1. 摆脱冗余。可能不需要在两个表中包含必须匹配的数量列。只有一个数量的列可能就足够了,所以首先不需要让它们保持同步状态#34;您在这两个表之间存在外键关系,因此您的数据库客户端始终可以JOIN将它们附加到"附加"从一个表到另一个表的数量列,用于查询。

  2. Amount移除B并创建视图。如果您的客户需要包含当前B中相同信息的表格表,但它们只查询该表,您可以用视图替换它:

    CREATE VIEW B WITH SCHEMABINDING AS
    SELECT BWithoutAmount.Trxid, BWithoutAmount.TblBcol, A.TotalAmount AS Amount
    FROM BWithoutAmount JOIN A ON BWithoutAmount.Trxid = A.Trxid;
    

    这假设有一个基表BWithoutAmount替换了您当前的B,但没有Amount列。 B视图取代了您当前的B基表。

  3. 在表格TRIGGERA上定义B他们的任务是更新AmountB 1}}所以它匹配A中相应行的数量。触发器需要在以下情况下运行:

    • A中的行更新时。
    • 插入B中的行时。

    FK约束和ON DELETE CASCADE应该处理其余的事情。