我正在设计一个表,其中包括两列 valid_from 和 valid_to 以跟踪历史变化。例如,我的表结构如下:
create table currency_data
(
currency_code varchar(16) not null,
currency_desc varchar(16) not null,
valid_from date not null,
valid_to date,
d_insert_date date,
d_last_update date,
constraint pk_currency_data primary key (currency_code, valid_from)
)
这个想法是将valid_to保留为空白开始,如果currency_desc将来发生变化,我需要将valid_to设置为旧描述不再有效的日期,并创建一个新行有效的_来自。但是我怎样才能确保这两行之间永远不会有重叠。例如,下面的查询应该只产生一行。
select currency_desc
from currency_data
where currency_code = 'USD'
and trunc(sysdate) between valid_from and nvl(valid_to, sysdate)
除了确保所有开发人员/最终用户都了解此规则之外,是否有更好的方法来实现这一点。非常感谢。