你能给我一些关于表的主键操作在Oracle中具有时间有效性的一些看法吗?
我创建了一个具有以下架构的表
Create table TemporalTable_1 (
Customer_ID number(8),
Customer_name varchar2(100),
valid_period_start timestamp,
valid_period_end timestamp,
period for valid_period(valid_period_start, valid_period_end),
constraint TemporalTable_1_PK primary key (Customer_ID , VALID_PERIOD)
)
Customer_ID | Customer_name | Valid_period_start | Valid_Period_end ------------------+----------------------+-------------------------+----------------------- 00001 | John Chan | 01 JUN 2020 00:00:00 | 09 JUN 2020 23:59:59 00001 | Johnny Chan | 10 JUN 2020 00:00:00 | Null
insert into TemporalTable_1 select * from OtherTable;
是因为Oracle实际上并不关心主键上的有效期列吗?
提前道谢!
Period name(VALID_PERIOD在您的例子中是)列只包含您的Period的ID。检查此脚本及其输出:
--drop table TemporalTable purge;
-- formatting for sqlplus:
col periodname for a20;
col constraint_name for a20;
col search_condition_vc for a80;
col valid_period_start for a16;
col valid_period_end for a16;
col PERIODSTART for a20;
col PERIODEND for a20;
alter session set nls_timestamp_format='yyyy-mm-dd hh24:mi';
-- end of formatting
Create table TemporalTable (
Customer_ID number(8),
Customer_name varchar2(10)
);
alter table TemporalTable add (
valid_period_start timestamp,
valid_period_end timestamp,
period for valid_period(valid_period_start, valid_period_end)
);
ALTER TABLE TemporalTable ADD (
vt_start DATE,
vt_end DATE,
PERIOD FOR vt (vt_start, vt_end)
);
-- inserting overlapping records:
insert into TemporalTable
select 1, 'A' , date'2020-01-01', date'2020-01-10', date'2020-01-01', date'2020-01-10' from dual union all
select 1, 'B' , date'2020-01-05', date'2020-01-08', date'2020-01-01', date'2020-01-10' from dual
/
commit;
-- check valid_period and vt hidden columns:
select tt.*,valid_period,vt from TemporalTable tt
/
select *
from TemporalTable
AS OF PERIOD FOR valid_period DATE '2020-01-06'
/
select
constraint_name,
constraint_type,
search_condition_vc
from user_constraints c
where table_name='TEMPORALTABLE';
select * from sys.SYS_FBA_PERIOD
where obj#=(select object_id from user_objects where object_name='TEMPORALTABLE');
我创建了两个表,如下所示: 这个剧本成功地完成了。但是,我在插入数据时遇到问题: 我在父表中执行了以下两个insert语句: 我打算使用这个period for特性来捕获记录的更改历史,作为闪回的替代方法。但是,这是否意味着在这种情况下我不应该使用主键? 提前道谢!
问题内容: 我正在尝试使用JPA / Hibernate设置以下表: 可能有很多用户,每个用户最多只能有一个验证码,也可能没有。 这是我的课程: 我创建一个用户,然后尝试使用以下代码添加验证代码: 当我尝试运行它时,我收到org.hibernate.PersistentObjectException:分离的实体传递给持久化:用户 我还尝试在Validation类中使用以下代码: 当我创建验证码时,
我在Postgres中有两个表<code>foo 当我尝试使用此命令将数据从 复制到 时: 我得到一个错误: 错误:重复的键值违反了唯一约束“bar_pkey” 详细信息:键(id)=(1)已存在。 当表
问题内容: 我需要一个表来存储一些评分,在此表中,我有一个 综合索引(user_id,post_id) 和其他列来标识不同的评分系统。 在此表中,我没有 主键, 因为 主键 必须是唯一的,而INDEX不必是唯一的,就我而言,唯一性是一个问题。 例如我可以有 缺少PRIMARY KEY可能会导致性能问题?我的表结构好还是需要更改? 谢谢 问题答案: 几点: 听起来您只是在使用表的当前唯一特性,并将其
问题内容: 我有一个仅包含2个字段的表。该表具有由这两个字段形成的复合PK。 使用Netbeans从数据库创建实体bean时,不会像其他具有两个以上字段的表那样自动创建实体bean。 所以我想我需要自己创建实体bean。创建此实体bean的最佳实践是什么?是否必须包含对象? 问题答案: 我不使用NetBeans,因此我不能说任何有关其映射工具的信息。 要映射组合键,有两个选项。您可以 用PK字段定
问题 如果我像下面的例子一样使用属性访问类型,我是否也必须为引用的FK定义getter和setter? 我不认为是这样,但Java EE6的官方文档是这样做的。 null