【问题标题】:Composite primary key in AccessAccess 中的复合主键
【发布时间】:2014-07-29 17:43:18
【问题描述】:

我有一个数据集,识别每条记录的唯一方法是客户名称和证书编号。对于每次购买,客户都有不同的证书编号(IE CustA 有证书 1-4,而 CustB 有证书 1-650)这两个字段都不是唯一的,但是它们一起唯一标识了一条记录。当我尝试创建复合键时,Access 告诉我他们会在主键中创建重复值。这些密钥是系统生成的,因此命名/编号不会有错误。

有什么办法可以解决这个问题吗?我的理解是系统应该是这样工作的,而且我的数据集是错误的,尽管我确信情况并非如此。

【问题讨论】:

  • 您是否通过在设计视图中的两个字段之间拖动并选择主键来创建键?
  • Access 告诉你否则,它刚刚检查了数据并发现了重复项。有空值吗?也许这是您的“系统生成”没有考虑到的。
  • @Fionnuala 是的,我就是这样做的。
  • @cjb110 确实如此 - 制作为我提供数据集的软件的 IT 开发人员确信这不会成为问题。我没有手动检查数据集的规模,但大约有 10 个重复项。谢谢!

标签: ms-access primary-key ms-access-2003 composite-primary-key


【解决方案1】:

这不是访问问题,这是数据问题。根据定义,PK 不能有重复项或 Null。 进行查询以识别数据中的罪魁祸首:

select CustName, CertNum, count(*) as Counter
group by CustName, CertNum
having count(*) > 1

否则,您可以使用计数器创建代理 PK。
如果是 Nulls 的问题,就像 cjb110 建议的那样,我可以使用 IGNORE NULLS 创建一个唯一索引。但是,除非您修复空值和重复项,否则您的 2 列将不适合作为自然 PK。

【讨论】:

  • 对,有重复。写这篇文章的人向我保证这不会是一个问题,但我刚刚检查过,有 10 个重复的条目。非常感谢
  • 永远不要相信“他们” ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 2022-11-21
  • 2015-04-27
相关资源
最近更新 更多