将递增值与其他值一起添加到Oracle数据库的列中

时间:2019-12-23 11:52:32

标签: sql oracle

我在表Employee中有一个处理列。处理后的值形成一个字符串:“时间戳” +“员工ID” +一个递增/顺序值(即1、2、3 ...)。

目标是:

  1. 字符串值将是唯一的(递增值)
  2. 我可以大致看到它的处理时间(时间戳)
  3. 与哪个员工有关(employeeID)

我当前的解决方案有一个仅针对递增值部分制作的表。有一列要查询该值,然后将该值添加到“已处理”字符串的末尾。此后,增量表值将用增量值更新。 它是使用Oracle的序列和触发器功能创建的:请参见https://chartio.com/resources/tutorials/how-to-define-an-auto-increment-primary-key-in-oracle/

但是,我认为这种解决方案不是最佳的,我想知道如果不制作仅用于增加单个值的附加表就可以做到这一点吗?

我正在使用Oracle Database 19c。

1 个答案:

答案 0 :(得分:0)

如果您真正关心优化,那么唯一的解决方案就是三塔解决方案。 EMPLOYEE_NO的一列,处理后的ID的一列,处理后的时间戳的一列。这样可以提供您所需的所有信息,并且可以通过EMPLOYEE_NO或按日期查询表,而无需使用子字符串函数。

不清楚“ PROCESSED”是否必须是一个单独的表。员工可以被多次处理吗?无论如何,这是一个单独的表实现...

create table processed (
    processed_id number generated always as identity primary key
    , employee_no not null references employees
    , processed_ts timestamp default current_timestamp not null
)  

...,这里是a demo on db<>fiddle