Ms access 绕过Access中每个表32个关系的限制

Ms access 绕过Access中每个表32个关系的限制,ms-access,database-design,schema,Ms Access,Database Design,Schema,我正在尝试使用大量表和强制关系构建一个用于库存控制的数据库,而我刚刚遇到了访问表的32个关系(索引)限制(使用Access 2007) 澄清一下:问题不在于Employees表有32个显式索引。相反,问题是在外键约束中可以引用Employee表的次数受到限制。例如: CREATE TABLE Employees (employee_number INTEGER NOT NULL UNIQUE) ; CREATE TABLE Table01 (employee_number INTEGER NOT

我正在尝试使用大量表和强制关系构建一个用于库存控制的数据库,而我刚刚遇到了访问表的32个关系(索引)限制(使用Access 2007)

澄清一下:问题不在于Employees表有32个显式索引。相反,问题是在
外键
约束中可以引用Employee表的次数受到限制。例如:

CREATE TABLE Employees (employee_number INTEGER NOT NULL UNIQUE)
;
CREATE TABLE Table01 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number))
;
CREATE TABLE Table02 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number))
;
CREATE TABLE Table03 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number))
;

...

CREATE TABLE Table30 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number))
;
CREATE TABLE Table31 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number))
;
CREATE TABLE Table32 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number))
; 
在上面的最后一行抛出异常,“无法创建索引;定义的索引太多。”

我有什么办法可以绕过这个限制

我听说创建具有1:1关系的重复表是一种方法。我对数据库设计还不熟悉,所以如果我错了,请纠正我的错误;但是如果表Employees有31个索引,我会创建一个表Employees2(有一个字段?)使用与员工的1:1关系以及与此新表的关系(其中EmployeeID为外键)创建。确保第二个表与第一个表一起填充的最佳方法是什么

还有别的办法吗

由于缺乏可用的信息,这似乎是一个设计合理的数据库的罕见问题,或者解决方案是常识。请原谅noob


更新:立即达成的共识是,我的设计有缺陷或过于雄心勃勃。这很可能是事实。然而,我宁愿在单独的问题中进行一般性的设计讨论,因此为了便于讨论,有人能回答这个问题吗?如果答案只是“永远不要这样做”“我不得不接受它。

我很难相信一个Employee表需要32个索引;如果它确实如此,你应该考虑迁移到至少SQL Express。

< P>我已经多次使用我的应用程序进入这个限制。我可以向其他海报保证,我的应用程序设计得非常好

一个问题是Access创建索引是因为关系和查找字段不能在主索引属性框中查看,但可以通过DAO集合访问它们。这些索引通常与您创建的索引重复

我有一个由几个表单组成的工具,您可以将这些表单导入BE MDB,从而删除重复的索引。由于我还没有在我的网站上发布,请发电子邮件给我

。。。我会创建一个表 员工2(一个字段?)比例为1:1 与员工的关系 与此新表的关系来自 任何剩余的关系,其中 EmployeeID是一个外键

这是可行的。您的主表可能有一个自动编号字段作为主键,或者生成一个索引号。你的雇员2表显然必须回应这一点

确保安全的最佳方法是什么 第二个表与 第一个


这在某种程度上取决于添加记录的方式。但总的来说,你当然必须遵守诚信规则。这通常归结为以正确的顺序追加到表中,并确保在尝试将相关记录添加到其他位置之前保存每条记录

我建议不要定义所有的关系/索引来实现1:1的关系。这两种解决方案都不是最优的,但后者将带来更高的维护负担和数据异常的可能性


我不会像其他一些人那样迅速地谴责这个设计,但它确实引起了我的兴趣。您能列出employee表中的外键字段吗?有一个很好的可能性,一些规范化是有序的,也许一些聪明的人可以提出一些设计建议来解决这个问题。

或者其他任何不可访问的东西我同意ocdecio,拥有一个需要32个关系的员工表似乎很奇怪,但是我们不知道您的需求+1对于迁移到SQLServer,我相信您可以将访问前端链接到SQLServer后端(但从未尝试过)@Smandoli SQL Server显然更健壮,更适合大型数据库。我相信有很多更好的选择,但问题仍然存在:我如何绕过访问限制?请参阅我的问题的更新。如果这不是一个有效的问题,我可以接受。我建议32个索引更可能代表一个设计错误,而不是一个正确的实现,未能纠正设计错误并迁移到支持更多索引的数据库只会加剧原始设计中的问题。@rmeador:Platform bashing无法解决这家伙的问题。我想你会发现你的总体设计是错误的。否则,这个特殊的限制就不会得到满足。“总体设计有缺陷”是错误的。我已经有很多系统碰到了这个问题。@Tony:啊!谢谢你的洞察力。但我必须指出,我们的询问者说他是“数据库设计新手”……我从未遇到过类似的情况。我不得不认为这个设计是非规范化的,例如,重复的字段对它们强制执行RI。还有一点:关系和索引是两个正交的,尽管是相关的主题。只能在索引字段之间定义关系,但可以在未定义RI的字段上定义索引。我建议尝试Tony的实用程序,看看是否需要消除重复的索引。如果使用Access默认值运行,则可能存在重复的索引(例如,由于表设计器将索引添加到ID字段,或者由于添加与手动创建的索引重叠的关系时创建的隐藏索引)。很好,我主要担心的是我解决此问题的方法是有效的(指示错误或否). 我应该能够设置一个表单,向员工添加新记录,并向