【发布时间】:2019-12-23 11:52:32
【问题描述】:
我在表 Employee 中有一个已处理的列。处理后的值形成一个字符串:“timestamp”+“employeeID”+一个递增/排序值(即 1、2、3...)。
目标是:
- 字符串值是唯一的(递增值)
- 我可以大致看到它的处理时间(时间戳)
- 关于哪个员工(employeeID)
我当前的解决方案有一个表,仅用于递增值部分。有一列会查询该值,然后将该值添加到已处理字符串的末尾。在此之后,增量表值将更新为增量值。 它是用 Oracles 序列和触发器函数创建的:见https://chartio.com/resources/tutorials/how-to-define-an-auto-increment-primary-key-in-oracle/
但是,我不认为这个解决方案是最佳的,我想知道如果没有为增加单个值而制作的附加表,是否可以做到这一点?
我正在使用 Oracle Database 19c。
【问题讨论】:
-
为什么不为所有员工增加价值?为什么每个员工都必须是唯一的?
-
所以我可以根据 Processed 值查询员工
-
是的,为什么它必须是单列?为什么不将数据存储在单独的列中?
-
如果处理值与员工在同一个表中,那么将员工 id 作为处理值的一部分有什么价值。查询将更复杂且性能更低。看来您使事情变得比应有的复杂。是否可以添加一个 processes_date 列和一个 processes_id (这将是那个增加的值)?这为您提供了最大的查询灵活性。如果您仍想在您创建的单个列中查看它,并且连接处理后的日期、处理的 ID 和雇员 ID 的虚拟列
-
有什么理由让您尝试将其变得如此复杂,而不是简单地为 EMPLOYEE_ID、PROCESSED_TIMESTAMP 和 ID_NUMBER 三个字段(使用序列生成)?