我在 MySQL 中创建了两个表。一个 ( Todo_tbl
) 保存数据,而另一个 ( Statistics_tbl
) 保存其中一个变量的总和Todo_tbl
。
遵循这些表的定义:
create table Todo_tbl (
id INT auto_increment,
person VARCHAR(45) ,
task VARCHAR(45) ,
duration INT(4),
deadline_day VARCHAR(2),
deadline_month VARCHAR(2),
PRIMARY KEY(id)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
insert into Todo_tbl values(1,'John', 'dust the floors', 40,04,03);
insert into Todo_tbl values(2,'Matt', 'do the dishes', 15,02,02);
insert into Todo_tbl values(3,'Mary', 'dusting', 40,03,02);
insert into Todo_tbl values(4,'Chloe', 'cleaning the windows', 75,04,05);
insert into Todo_tbl values(5,'John', 'wash the floors', 60,03,03);
insert into Todo_tbl values(6,'Bridget', 'take out the trash', 15,03,03);
insert into Todo_tbl values(7,'Matt', 'do the laundry', 18,02,02);
insert into Todo_tbl values(8,'Bridget', 'water the plants', 15,03,03);
select * from Todo_tbl;
create table Statistics_tbl (
SELECT person, SUM(duration) as total_duration FROM Todo_tbl GROUP BY person
);
select * from Statistics_tbl;
问题是每当我将新数据添加Todo_tbl
到Statistics_tbl
.
有什么办法可以连接两张表,这样当一张表发生变化时,另一张表也会响应?
当你有一个非常好的查询可以从原始表中得到相同的东西时,为什么你需要一个表来保存统计信息?
数据库喜欢坚持一个被称为“单一真理来源”的概念。
一个表(或一组)包含基本数据。如果那是错误的,那么一切都是错误的。在这种情况下,这就是你的 todo_tbl。
如果您需要另一个必须与 todo_tbl 保持同步的表 - 但是已经完成了 - 那么您将面临两者失步并歪曲事实的风险。
建议:在 Todo_tbl.person 上弹出一个索引(可能有助于分组)并使用您已经拥有的 select 语句来获取统计信息作为 View 的核心,该View可以直接从 Single Source of Truth 获取统计数据。