【发布时间】:2017-07-24 13:51:50
【问题描述】:
假设我有一个典型的应用程序,用户可以在其中转移一些虚拟货币。所以我可能会有类似的东西
CREATE TABLE users(
id serial NOT NULL PRIMARY KEY,
balance money NOT NULL DEFAULT 0
);
CREATE TABLE transfers(
user_from integer NOT NULL REFERENCES users (id),
user_to integer NOT NULL REFERENCES users (id),
amount money NOT NULL
);
然后我只需将AFTER INSERT 触发器添加到transfers 表中,因此它将在每次传输时更新balance。
但这是当今最好的解决方案吗?可以用视图或其他东西做得更好吗?我真的觉得我应该有非规范化数据时不是这种情况。
附:如果重要的话,我正在使用 PostgreSQL。
谢谢。
【问题讨论】:
-
您的
transfers表缺少主键。除此之外,您指的是哪些非标准化数据? -
余额可以从转帐表的金额总和中计算出来。所以我正在考虑计算它并以某种方式缓存的视图,这个缓存应该在传输更新时为单独的行刷新。
-
规范化不处理聚合数据,您的
users表不违反任何规范形式。 -
但还是这样。我可以通过视图和缓存以某种方式实现结果吗?它会以任何方式变得更好吗?
-
您将如何处理期初余额?
标签: postgresql database-design