我有一个数据集,识别每条记录的唯一方法是客户名称和证书编号。对于每次购买,客户具有不同的证书编号(IE CustA具有证书1-4,而CustB具有证书1-650)这两个字段都不是唯一的,但是它们一起唯一地标识记录。当我尝试创建复合键时,Access告诉我他们将在主键中创建重复的值。这些密钥是系统生成的,因此命名/编号不会出错。
有什么方法可以解决这个问题?我的理解是,这就是系统应该如何工作以及我的数据集是错误的,尽管我确信情况并非如此。
答案 0 :(得分:2)
这不是Access问题,这是一个数据问题。根据定义,PK不能具有重复或无效。 进行查询以识别数据中的罪魁祸首:
select CustName, CertNum, count(*) as Counter
group by CustName, CertNum
having count(*) > 1
否则你可以使用计数器创建代理PK 如果这是Nulls的问题,就像cjb110建议的那样,我可以使用IGNORE NULLS创建一个唯一索引。但是在你修复空值和重复之前,你的2列不适合作为自然PK。