让我们说我的对开页表(id,name,lastModified)
和子表文章(id,name,folio_id,lastModified)。
如果子表更新,我想更新父表的lastModified。我怎样才能自动完成它?
P.S。 lastModified是一个时间戳,在发生更改时会自动更新。
答案 0 :(得分:0)
如果您希望父级的lastModified始终是所有孩子的lastModified的最大值,我建议明确地显示父级的 NOT EVEN STORING ,而是通过动态查询子表来获取值。 是的,每次拥有准确和规范化数据(并且没有性能查杀触发器)的优势超过了每次查询子表的缺点(假设您有父/的外键/孩子,指数等。)。
例如,如果您这样做,表达父表的另一种方法是:
create view vFolio as
select id, name, lastModified=(
select max(a.lastModified)
from article a where a.folio_id = f.id
)
from folio f
答案 1 :(得分:0)
我个人会在我的应用程序代码中处理这个问题。
但是你可以使用触发器来完成这项工作,只需在执行记录更新时创建一个触发器;
CREATE TRIGGER [dbo].[tr_childupdate]
ON [dbo].[childtable]
AFTER UPDATE
AS BEGIN
..... code to update parent table..
WHERE dbo.folio.id = updated.folio_id
END