我有一个包含两个表A和B的数据库.A比B大得多。
根据某些特定标准,我有一个根据表A中的记录构建的视图。让我们称之为V a 。
第二个视图,V V a -B ,与V a 和B(所有记录)上的记录不同在V a 上不在B)中。 V a 的大小大于或等于B。
两个表A和B具有相同的列结构,除了一个序列号。通过从CSV文件导入将数据加载到这些表。有一列可自动填充每条记录的创建日期。进口应按月进行。
问题:我需要更新最近创建的V V a -B 中存在的表A的记录(即,在A和B中导入新数据后,将某些字段设为NULL(我猜它并不重要)。触发器函数应该查看每个最近创建的V V a -B 元素是否具有上个月的精确副本。如果有,则应将字段的值从旧记录复制到新记录。如果没有,则写入一些预定义的值。
因为V V a -B 同时取决于A和B,我不知道在哪里放置触发器。如果我把它放在A上,视图将不会包含所有数据。如果我把它放在B上,我怎么能保证每次进口不会重复多次?仅手动使用存储过程(函数)会更好吗?
谢谢。
编辑:添加"每个最近创建的元素"为了澄清,触发器不必每次都循环遍历V V a -B 中的所有记录,只是最近添加的记录。
答案 0 :(得分:0)
如果您可以编写一个触发器,只要A(或B)中的行被修改,就会更改A中的必要记录,您可以编写一个触发器(或两个)来执行操作。如果您担心,这些视图会立即反映表格中的变化。
但是,如果触发器功能不昂贵,这个解决方案是值得称道的 - 它将针对每个修改过的行执行。
如果您不能轻易编写一个简单的触发函数来完成这一操作,那么更好的解决方案是在A和B被修改后引入后处理步骤。