Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >保持记录的唯一性

保持记录的唯一性
EN

Stack Overflow用户
提问于 2013-07-08 22:34:33
回答 3查看 194关注 0票数 0

我的数据库里有将近300万份金融交易记录。这些记录是从包含以下字段的外部文件中加载的,这些字段映射到表的列。

代码语言:javascript
运行
AI代码解释
复制
Account, Date, Amount, Particulars/Description/Details/Narration

现在需要保持已经加载的记录和未来记录的唯一性。

由于已经加载的外部文件没有唯一性,所以我认为,我们必须使用给定的字段创建唯一的键来更新现有的记录,但是很明显,外部文件中的字段可能会重复。

如何保持这样的唯一性,以便我们可以从文件中识别事务已经加载。欢迎所有类型的建议。

编辑1

当前已加载的记录被确认为有效,由于从旧文件或丢失的文件加载了一些丢失的记录,因此需要保持唯一性。

编辑2

现有记录可能有基于给定的4个字段的重复记录,即两个或两个以上有效交易的帐户值、日期、金额和详情相同,但即使有重复的值,这些记录也是有效的。

现在,为了加载丢失的记录,我们需要识别记录是否已经加载,这样我们就不会加载已经加载的记录。因此,在我看来,很难知道是否已经根据这些字段加载了记录。我认为这超出了这些领域的范围。

编辑3

的情况现在已经改变了,这已经不再是一个有效的问题了,但是最好把它留给其他人。已同意在记录中添加一个唯一的密钥,从而检查此密钥是否复制

EN

回答 3

Stack Overflow用户

发布于 2013-07-08 23:04:53

Note -在OP中做了一些澄清之后,这个答案与他们的场景无关。这是一个政治或商业问题,而不是一个技术性问题。我将把这个答案作为一个假设性问题的解决办法,因为它可能对一些未来的寻求者仍有帮助。

我的另一个回应解决了OP的实际情况。

似乎你需要一个独特的复合键:

代码语言:javascript
运行
AI代码解释
复制
alter table your_table add constraint your_table_uk
    unique (Account, Date, Amount, Particulars)
    using index

particulars作为惟一性的来源似乎有点模糊,但在任何给定的一天内,一个帐户都可能有多个事务处理相同的金额,因此您需要所有四个列来保证行的唯一性。

或者,正如@yper多维数据集所暗示的那样,只有(Account, Date, Particulars)是必需的。

我建议使用唯一的键,而不是主键约束,因为在执行外键时,复合主键是坏消息。在这种情况下,我建议您添加一个由序列填充的合成主键。

您可以说加载的记录是有效的,但是如果不是这样的话,请将ALTER语句更改为使用EXCEPTIONS子句查找重复的行。您将使用一个特殊的表来捕获违反约束的行为。了解更多信息

票数 1
EN

Stack Overflow用户

发布于 2013-07-08 23:40:31

现有记录可能有基于给定的4个字段的重复记录,即两个或两个以上有效交易的帐户价值、日期、金额和详情相同,但即使有重复的值,这些记录也是有效的。

但是,如果在加载的数据或源文件中没有唯一的标记,任何人如何判断呢?有效性到底意味着什么?

“现在,对于加载丢失的记录,我们需要确定记录是否已经加载,这样我们就不会加载已经加载的记录。”

如果没有现有的唯一性源,您就无法做到这一点。因为对于给定的(Account, Date, Amount, Particulars)组合,它有两行--这是可以的,确定第三个实例(帐户、日期、金额、细节)的第三个实例是已经加载的记录,因此是无效的,或者记录没有加载,因此是有效的。

因此,在我看来,很难知道是否已经基于这些字段加载了记录。我认为它超出了这些字段的范围

您正确地说,在您描述的数据中找不到解决方案。但解决办法其实很简单。您将找到断言已加载记录的有效性的人员,并向他们提供这些附加记录的列表。他们将能够使用他们的技能和判断力来告诉你哪些记录是有效的,然后你加载这些记录。

“找到解决办法是我的责任”

不,这不是你的职责。现在,数据所有者有责任准确地定义他们的数据集,这包括识别业务密钥。他们是免除责任的人。

在这种情况下,你有三个选择:

  1. 在数据所有者履行职责之前,拒绝加载任何进一步的记录。
  2. 加载提交给您的所有记录以供加载,无需任何验证。
  3. 使用可怕的NOVALIDATE语法。

NOVALIDATE是一种对未来行强制执行验证规则的方法,但忽略了现有数据中的冲突。基本上,这是一个政治问题的技术假造。

代码语言:javascript
运行
AI代码解释
复制
SQL> select * from t23
     /

      COL1 COL2
---------- --------------------
         1 MR KNOX
         1 MR KNOX
         2 FOX IN SOCKS
         2 FOX IN SOCKS


SQL> create index t23_idx on t23(col1,col2)
     /

Index created.

SQL> alter table t23 add constraint t23_uk 
          unique (col1,col2) novalidate
     /

Table altered.

SQL> insert into t23 values (2, 'FOX IN SOCKS')
      /

insert into t23 values (2, 'FOX IN SOCKS')
*
ERROR at line 1:
ORA-00001: unique constraint (APC.T23_UK) violated

SQL> 

请注意,在添加约束之前,需要预先创建一个非唯一索引。如果不这样做,数据库将构建一个唯一的索引,这将覆盖NOVALIDATE子句。

我把它描述为可怕的,因为它是可怕的。它会将数据损坏到数据库中。但这是你能找到的最接近的解决方案。

这种做法完全忽视了“有效性”的概念。因此,它将拒绝可能应该加载的记录,因为它们表示(Account, Date, Amount, Particulars)的“有效”第n次出现。这是不可避免的。好消息是,没有人能够知道,因为没有明确的规则来确定有效性。

无论你选择什么选择,你都必须向你的老板、数据所有者、数据所有者的老板以及你认为合适的人解释清楚,并得到他们的书面同意。否则,有时人们会发现数据库中充满了重复的行,或者有人会抱怨没有加载“有效”记录,这都是您的错.除非你有一张由适当的高层授权签署的文件。

祝好运

Haki关于使用合并的建议具有与NOVALIDATE相同的效果,因为它将加载新记录并抑制所有重复记录。然而,这更像是一种模棱两可的说法:它根本不涉及唯一性的概念。任何具有插入或更新访问权限的人仍然能够拥有他们喜欢的任何行。因此,只有当您能够完全锁定该表上的特权,以便它的数据只能通过合并而不是其他DML操作时,这种方法才能起作用。取决于持续的独特性是否重要。再一次,商业决策。

票数 1
EN

Stack Overflow用户

发布于 2013-07-08 23:44:14

听起来你需要重新插入-或者甲骨文称它为MERGE

两个表之间的MERGE操作允许您处理两种常见的情况-

  1. 该记录已经存在于目标表中,我需要对它做一些事情--要么更新要么什么也不做。
  2. 目标表中不存在记录-插入它。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17541511

复制
相关文章
数据软删除时保持字段值唯一性的问题
对userinfo1表的name、status两个字段设置联合的唯一索引,在更新数据时把被软删除的数据行对应的id值,赋值给status字段(status等于0表示未删除,非0表示已删除)。
一写代码就开心
2022/05/31
1.3K0
MySQL避免插入重复记录:唯一性约束
版权声明:本文为博主原创文章,未经博主允许不得转载。 表结构 CREATE TABLE `t3` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c1` int(11) NOT NULL, `c2` varchar(20) DEFAULT NULL, `c3` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `c1` (`c1`) USING BTREE ) ENGI
DencyCheng
2018/11/05
2.5K0
三行代码让你的git记录保持整洁
笔者最近在主导一个项目的架构迁移工作,由于迁移项目的历史包袱较重,人员合作较多,在迁移过程中免不了进行多分支、多次commit的情况,时间一长,git的提交记录便混乱不堪,随便截一个图形化的git提交历史给大家感受一下。
每周聚焦
2023/02/27
3430
Python学习记录10-删除序列相同元素并保持顺序
新的场景来了,比如我的是一个字典列表,且里面有重复的字典,那么用上面的代码也是可以胜任的
huolong
2023/10/23
1940
HTTP状态保持的原理
a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookie b)浏览器接收到cookie之后会自动保存 c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookie
汪凡
2019/03/01
6240
如何保证 ID 的全局唯一性?
数据库中的每条记录都需要有一个唯一的标识,根据数据库第二范式,数据库中每个表都需要唯一主键,其他元素和主键一一对应。
王小明_HIT
2020/11/03
1.1K0
如何保证 ID 的全局唯一性?
DotNET企业架构应用实践-数据库表记录的唯一性设计的设计兼议主键设定原则
简要介绍          在我们进行数据库设计的时候,大家都会考虑到数据表主键的设计,而可能没有人去关注记录唯一性字段设计,或者说,很多开发人员把这两种混合在一起处理,即就是表记录的唯一性与主键相结合的技术,因为从本质上讲,表主键的值是必须唯一的,他即能确保表记录的唯一性。          我在本文提出的思路是分离表记录的唯一性与主表键的设计,也可以理解为是双主键的设计思路,即唯一性设计可以与表业务无关,而表主键的设计必须与业务相关联,一个主键记录一定能具有一定的业务意义。 主键设计的争议       
魏琼东
2018/01/12
6970
DotNET企业架构应用实践-数据库表记录的唯一性设计的设计兼议主键设定原则
MySQL唯一性约束使用
MySQL唯一性约束是一种用于确保表中某个列或字段的值唯一的限制。这种约束可以通过在创建表时或在表已经存在的情况下修改表结构时添加。
堕落飞鸟
2023/05/11
1.1K0
动手体验JVM中Class对象的唯一性
本文不深究理论,不深究原理,从我们开发使用者的角度,动手实践,去体验一下JVM中,Class对象的唯一性与类加载器的关系。
@阿诚
2020/09/01
9830
MySQL实现条件唯一性
当status_x<>5时,obj_x的值唯一,否则可以重复。在MySQL中不支持这样的功能,但可以通过虚拟列来实现。看下面一个简单例子。
用户1148526
2022/05/19
9420
ssh保持长连接的方式,ssh保持连接不断开
高久峰
2023/06/20
7310
保持数据自动化的可见性:知行之桥的日志记录、审计和错误处理
知行之桥的工作流自动化解决方案几乎不需要主动维护,因为它会一直在后台平稳地运行。虽然方便,但这也可能存在一个令人担忧的问题:既然不再需要日常干预,那么企业是否会失去对数据的可视化掌控?如果出现问题而没有人注意到怎么办?
知行软件EDI
2021/09/17
5830
保持数据自动化的可见性:知行之桥的日志记录、审计和错误处理
如何确保应用程序运行的唯一性
一 简介 相信大家在开发脚本或者写程序的时候 ,大多会遇到如何判断已经有程序在运行的情况。比如设计备份binlog ,由于某个实例产生的binlog 数量大于备份的速度,在下一个时间点,会启动一个新的进程对binlog进行备份。那我们要怎么解决呢,本文分别从 shell和python的角度提出我的解决方法,同时也推荐《 Ensure a single instance of an application in Linux》[1],这里有比较详细的讨论。
用户1278550
2018/08/09
1.4K0
如何保持学习编程的动力
但话说回来,关注了一阵子我发现,Reddit 上的讨论真要比贴吧不知道高到哪里去了,甚至比不少知乎回答要有价值。而且感觉下面的讨论氛围也更好些。
Crossin先生
2018/12/06
5300
几种保持登录状态的方式
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112529.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
1.9K0
【如何保持稳定的情绪】
近期发生的新闻热点再度引发公众对稳定情绪和心理健康的关注。有时候我们遇到的最大的敌人,不是运气也不是能力,而是失控的情绪和口无遮拦的自己。如何在工作中保持稳定的情绪?
magize
2023/07/24
1830
SQL如何确保数据唯一性?
在SQL数据库中,UNIQUE约束是一种用于确保数据唯一性的重要工具。本文将深入探讨UNIQUE约束的概念、应用场景以及使用方法,以帮助读者更好地理解和利用UNIQUE约束来保证数据的一致性和准确性。
霍格沃兹测试开发Muller老师
2023/09/07
4900
点击加载更多

相似问题

保持mysql返回的记录的唯一性

30

如何保持实例的唯一性?

10

如何保持对象的唯一性

36

缩短GUIDS保持唯一性

11

NHibernate。记录唯一性

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档