【发布时间】:2021-05-10 07:58:07
【问题描述】:
我有一张表,其架构如下:
date | from_city | to_city | rate_per_mile
我想为一对城市 (city1, city2, rate) 插入今天的汇率,并为从今天开始到接下来的 365 天的所有日期创建 365 行。
date | from_city | to_city | rate_per_mile
-------------------------------------------------------------
DATE(NOW()) | city1 | city2 | 13.23
DATE(NOW()) + 1 day | city1 | city2 | 13.23
DATE(NOW()) + 2 days | city1 | city2 | 13.23
DATE(NOW()) + 3 days | city1 | city2 | 13.23
...
DATE(NOW()) + 365 days | city1 | city2 | 13.23
(date, from_city, to_city)是表的主键,我每天都会更新表,所以如果键已经存在一行,就应该替换它。
进行这些插入/更新的最佳方法是什么?最坏的情况,因为我必须从 java 程序中执行此操作,我将不得不创建 365 行并进行大批量插入:
INSERT INTO my_table
VALUES
(DATE(NOW()), city1, city2, 13.23),
(DATE(NOW() + INTERVAL '1' day), city1, city2, 13.23),
(DATE(NOW() + INTERVAL '2' day), city1, city2, 13.23),
...
问题:
- 最好的方法是什么?
- 在这种情况下,我是否可以避免这些插入并创建视图来返回每个城市对未来 365 天预计的最新可用日期?如何创建这样的视图?
【问题讨论】:
-
这些费率每天都不同吗?如果不是,我会质疑每天 1 行的设计,并且可能会使用范围之类的东西,即放置开始(如果需要,结束)日期。如果您想获取某一天的费率,则可以查询其开始日期最接近该天但仍早于该天或同一天的行。这样一来,所有日子都具有相同费率的示例只会导致 1 个条目。
-
@Thomas 好点,但不幸的是,它们每天都会有所不同。
-
也许城市对应该移动到父表中?
city_pair表中的每一行在rate表中都有零、一或多行?
标签: java sql postgresql