例如,我有一个名为test
的表,数据如下所示:
id name
1 John
2 Jay
3 Maria
假设test
得到了更新,现在由于某种原因,ids
的名称被分配给了不同的id
,将name
列视为唯一列,它不是test
的p主键,而是唯一的。
下一次查询test
时,它可能如下所示:
id name
10 John
12 Jay
13 Maria
因此,在这种情况下,id
发生了变化,但name
是一致的,可以追溯到test
表的前一个状态。但是我不能控制这个表,现在有些人就是这样处理数据的,我想知道这是否是使用uuid
的一个好例子?我不熟悉uuid
的概念,也不熟悉当我想要处理此表中的数据更改时,如何最好地创建一致的唯一可标识的并且在搜索上也快速的东西。我想在我这一端导入此表,但创建一个快速的并且在数据导入期间不会更改的键。
3条答案
按热度按时间gr8qqesn1#
我觉得你想解决的问题并不清楚。
问题1:id列不断更新。这看起来很奇怪,所以找到发生这种情况的根源似乎是需要解决的真实的问题。
问题2:唯一标识行。您希望使用id列或新的uuid列来唯一标识,但您已经说过可以使用name列唯一标识行,那么您在这里试图解决什么问题?
问题3:性能。使用索引整数(最好是主键)列可以获得最佳性能。在这种情况下,最有可能的是id。uuid对性能没有帮助。
问题4:导入时数据发生变化。这可能是由于自动增量或DDL中设置的初始值不同。您需要更好地了解导入中到底出了什么问题。
问题5:如果你不能控制id列的值,你怎么能添加你自己的uuid呢?
UUID只是创建唯一值的一种方式。
Oracle有一个函数可以创建uuid random_uuid()。
pn9klfpd2#
这是一个XY问题。
表中的数据具有给定数据类型的唯一键,当重新加载该数据时,将重新生成唯一键,以便所有数据都获得新的唯一值。
您使用的数据类型并不重要;这个问题与重新加载数据和重新生成唯一键的过程有关。2如果你使用不同的数据类型,唯一键仍然重新生成,那么你会遇到完全相同的问题。
先解决那个问题。
1bqhqjot3#
先不说这个问题的原因,它是否有意义,如果我答对了,它是关于从NAME生成一个唯一的密钥,NAME本身是唯一的。
如果是这样的话,你可以创建一个on函数来完成这个工作:
由于TEST表格中的ID列与示例数据中的ID列一样发生变化:
...无论何时查询该表(如果名称未更改),都可以获得相同的ID_2 ...