Database 在文本文件中查找主键的启发式方法

Database 在文本文件中查找主键的启发式方法,database,csv,primary-key,Database,Csv,Primary Key,我正在寻找一个库,以找到从文本文件的主键。假设我有一个CSV文件,但我不知道哪个列是主键。是否有任何库可以帮助我做到这一点(使用某种启发式) 我不确定是否有库可以做到这一点,但您肯定可以使用Python内置的CSV解析器,找出哪个列具有唯一值,并且该列肯定至少是一个候选键 将CSV文件导入MySQL或PostgreSQL 然后尝试在每列上创建一个唯一的索引。或者运行此查询 select count(*) `ID count`, (select count(*) from csv_table

我正在寻找一个库,以找到从文本文件的主键。假设我有一个CSV文件,但我不知道哪个列是主键。是否有任何库可以帮助我做到这一点(使用某种启发式)

我不确定是否有库可以做到这一点,但您肯定可以使用Python内置的CSV解析器,找出哪个列具有唯一值,并且该列肯定至少是一个候选键


将CSV文件导入MySQL或PostgreSQL

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

select  count(*) `ID count`,  (select count(*) from csv_table ) total from 
(select distinct csv_col_1   from csv_table )  distinct_rows;

在每一列上。如果ID计数等于总行数,则它是主键候选。

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

首先,文件的特定版本中不包含的主键通常会显示文件存在问题,因此不应对其进行处理。例如,在我的工作中,我经常需要处理销售名册,这些名册可以是CSV。在它们中,任何销售区域都应该是唯一的。这是一条商业规则。有时,我们得到的名册不是唯一的,我们无法导入,因为两个人不能同时分配到同一个地区。通常,一个人离开,另一个人接替他的位置是个问题,但我们无法知道这两个记录中哪一个是正确的。因此,导入失败。但是,通过编程检查包含此类信息的文件将无法将其作为PK找到,因为它在本应是唯一的inteh文件时不是唯一的

其次,在第一次处理文件时检查列中是否存在唯一数据并不保证数据在一段时间内保持唯一性,也不保证数据作为PK有意义

例如,今天的邮政编码可能是独一无二的,但三周后可能就不会了,因为有人加入了新的组合

邮政编码也不可能成为候选PK,除非该文件仅涉及邮政编码

零件号是另一种情况,它可能看起来是唯一的,但不在CSV文件中,因为来自不同制造商的零件可以具有相同的零件号,因此唯一性来自零件号和制造商的组合。但这也是一个商业规则,因为一些制造商可能会对同一产品的不同版本使用相同的零件号,比如不同颜色的产品,而其他制造商可能有一个商业规则,即它们是唯一的。如果不知道数据对提供文件和使用数据的特定人员的意义,您就不知道它应该是PK还是PK


PK的确定不仅仅关乎数据的唯一性,还关乎数据的意义。是的,您可以识别可能的PK(然后像上面描述的第一种情况一样,您可能会错误地使用自动工具)进行检查,但您不应该在不说明数据含义的情况下自动选择一个PK。

如果我需要检查Col1+Col2+Col3组合?如何检查所有可能的列组合?