在Microsoft Access 2010中创建关系时"表上的索引太多"错误

avi*_*ada 7 indexing ms-access relationship

我有tblUsers,其主键是UserID.

UserID在许多表中用作外键.在表中,它用作多个字段的外键(例如ObserverID,RecorderID,CheckerID).

我已成功添加了关系(在MS Access'关系'视图中),其中我有表别名来执行每个表的多个关系:

*tblUser.UserID - > 1到多 - > tblResight.ObserverID

*tblUser_1.UserID - > 1到多 - > tblResight.CheckerID

在使用参照完整性的强制创建约25个关系后,当我尝试添加另一个时,我收到以下错误:

"操作失败.表'tblUsers上有太多索引.' 删除表上的一些索引并再次尝试操作."

我运行了我在这里找到的代码,它返回我在tblUsers上有6个索引.我知道每个表有32个索引的限制.

我使用关系GUI错了吗?在我创建关系时,访问是否为执行引用完整性创建索引(特别是在运行脚本时不会出现的索引)?我有点困惑,任何帮助都会受到赞赏.

avi*_*ada 10

好的,经过一些研究,我想我得到了这个问题的答案.显然,这是一个非常普通的天花板,可以访问.我将总结下面发现的这篇文章:

每个表只能有32个"约束".参考完整性(RI)的每个索引和强制执行都计入此32.当您选择强制执行RI时,MS Access会自动创建约束.你无法禁用此选项.

所有代码snipets和我通过谷歌找到的东西,返回我在桌子上有六个索引(因此我感到困惑).我没有发现/不知道的是我的25个关系被计算在我的32岁之间,因为我执行了RI.

我对此的解决方案是将RI放在"较低优先级"字段上(这让我很难说),并通过数据输入表单"强制执行"它.

基本上,这是我即将迁移访问并进入PostgreSQL的另一个原因.

如果有人有更好的工作,我很乐意在这里.谢谢.

  • @ David-W-Fenton:没有理由相信有25个以上的索引表示非规范化表.实际上,由于外键约束,规范化会导致更多索引.OP可以有一个包含25个字段的表,每个字段都是25个不同表中的外键.很容易想象一个具有25个不同的独立属性的对象,这些属性都可以表示为25个不同表中的索引,没有"标准化丢失".如果是这种情况,您会如何建议处理问题?将表分成两个1:1表?不是理想的解决方案. (3认同)