我有两张桌子,让他们称他们为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
列。
是否有任何限制可用于实现此目的还是有其他方法吗?
答案 0 :(得分:1)
有一些可能的解决方案。根据您的喜好选择。
摆脱冗余。可能不需要在两个表中包含必须匹配的数量列。只有一个数量的列可能就足够了,所以首先不需要让它们保持同步状态#34;您在这两个表之间存在外键关系,因此您的数据库客户端始终可以JOIN
将它们附加到"附加"从一个表到另一个表的数量列,用于查询。
从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
基表。
在表格TRIGGER
和A
上定义B
。他们的任务是更新Amount
列B
1}}所以它匹配A
中相应行的数量。触发器需要在以下情况下运行:
A
中的行更新时。B
中的行时。 FK约束和ON DELETE CASCADE
应该处理其余的事情。