启发式查找文本文件中的主键

时间:2015-07-16 21:04:12

标签: database csv primary-key

我正在寻找一个库来从文本文件中查找主键。想象一下,我有一个CSV文件,我不知道哪个列是主键。是否有任何库可以帮助我做到这一点(使用某种启发式方法)?

3 个答案:

答案 0 :(得分:3)

我认为不知道文件中哪个(如果有)字段是主键不是编程问题,而是业务问题。这件事我会发回给企业以获得答案。原因如下。

首先,在文件的特定版本中,预期作为主键的内容通常不会显示文件的问题,因此不应对其进行处理。例如,在我的工作中,我经常需要处理可能以CSV格式出现的销售名单。在其中,任何销售销售区域都应该是唯一的。这是一项商业规则。偶尔我们会得到名单,因为它们并不是唯一的,我们无法导入,因为两个人不能同时分配到同一个地区。通常问题是一个人离开而另一个人取代他的位置,但我们无法知道这两个记录中哪一个是正确的。因此导入失败。但是,以程序方式检查包含此类信息的文件将无法将其视为PK,因为它本身不是唯一的inteh文件。

接下来,在首次处理文件时检查列中唯一数据的存在并不能保证数据在一段时间内保持唯一或者作为PK有意义。

例如,邮政编码今天可能是独一无二的,但是从现在开始的三个星期,它可能不会像混合新增加的那样。

除非文件仅与邮政编码有关,否则邮政编码也不可能成为候选PK。

部件号是另一种情况,它可能看似唯一但不在CSV文件中,因为来自不同制造商的部件可以具有相同的部件号,因此唯一性来自于部件号和制造商的组合。但这又是一个商业规则,因为有些制造商可能会对同一件事的不同版本使用相同的部件号,例如不同颜色的部件,而其他制造商可能会有独特的商务规则。如果不知道提供文件和使用数据的特定人员的数据含义,你就不知道它应该是PK还是。

确定PK大约不仅仅是数据的唯一性,而是关于数据的含义。是的,您可以识别可能的PK(然后像上面描述的第一种情况一样,使用自动化工具可能是错误的)来检查,但是如果没有解决数据的含义,就不应该自动选择。

答案 1 :(得分:1)

我不确定是否有一个库可以执行此操作,但您肯定可以使用Python内置的CSV解析器并找出哪个列具有唯一值,并且该列绝对是至少一个候选键

https://docs.python.org/2/library/csv.html

答案 2 :(得分:0)

将CSV文件导入MySQL或PostgreSQL。

然后尝试在每列上创建唯一索引。或运行此查询

fg
每列上的

。如果ID计数等于总行数,则它是主键候选者。