【问题标题】:SQLite: implementing reference counter in partitioned tablesSQLite:在分区表中实现引用计数器
【发布时间】:2018-06-08 14:32:45
【问题描述】:

我有 2 个系列的表格。

在A系列中,每个表都定义为(id_a TEXT PRIMARY KEY NOT NULL, id_b TEXT NOT NULL);

在B系列中每个表定义为(id_b TEXT NOT NULL, value_b INT);

暗示A系列大于B系列(可能包含更多表)。

同样在 A 系列中,每个表的字段 id_b 可能只保存 B 系列中某些字段 id_b 的值。

我希望 B 系列中的 value_b 成为参考计数器 - 每当在 A 系列中添加/删除带有一些 id_b 的行时,B 系列中的 value_b 的值将根据受影响的行数增加/减少对应的 id_b。

如何在保持最小磁盘空间/时间消耗的同时实现它?

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    这可以通过triggers来完成:

    CREATE TRIGGER count_insert
    AFTER INSERT ON TableA
    FOR EACH ROW
    BEGIN
      UPDATE TableB
      SET value_b = value_b + 1
      WHERE id_b = NEW.id_b;
    END;
    
    CREATE TRIGGER count_update
    AFTER UPDATE OF id_b ON TableA
    FOR EACH ROW
    BEGIN
      UPDATE TableB
      SET value_b = value_b - 1
      WHERE id_b = OLD.id_b;
      UPDATE TableB
      SET value_b = value_b + 1
      WHERE id_b = NEW.id_b;
    END;
    

    (对于 DELETE 也是如此。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多