我有一个Access数据库,其中包含有关人员(员工档案和相关信息)的信息。前端有一个类似控制台的界面,可以一次修改一种类型的数据(例如一种形式的学位,另一种形式的联系信息)。它目前链接到多个后端(每种类型的数据一个,一个用于基本配置文件信息)。所有文件都位于网络共享上,许多后端都是加密的。
我这样做的原因是我了解MS Access必须将整个数据库文件拉到本地计算机才能进行任何查询或更新,然后将任何更改的数据放回网络共享。我的理论是,如果一个人正在更改电话号码或地址(联系信息),他们只需要提取/修改/替换联系信息数据库,而不是拉一个包含联系信息,项目,学位,奖励的大型数据库等等,只需更改一个电话号码,从而减少多个用户访问数据时锁定数据库和网络流量的可能性。
这是一个明智的结论吗?我是否误解了很多?我错过了别的什么吗?
我意识到每个文件都需要考虑开销,但我不知道其影响有多大。如果我要巩固后端,那么能够让Access处理级联删除等的参照完整性,而不是编写代码,也有潜在的好处......
我很感激任何想法或(合理有效的)批评。
答案 0 :(得分:8)
这是一个常见的误解:
MS Access必须将整个数据库文件提取到本地计算机才能进行任何查询或更新
考虑这个问题:
SELECT first_name, last_name
FROM Employees
WHERE EmpID = 27;
如果EmpID被编入索引,数据库引擎将读取足够的索引以查找哪些表行匹配,然后读取匹配的行。如果索引包含唯一约束(比如EmpID是主键),则读取速度会更快。数据库引擎不读取整个表,也不读取整个索引。
如果没有EmpID索引,引擎会对Employees表执行全表扫描 - 这意味着它必须从表中读取每一行以确定哪些包含匹配的EmpID值。
但无论哪种方式,引擎都不需要读取整个数据库......客户端,库存,销售等表...它没有理由读取所有数据。
您确定连接到后端数据库文件的开销是正确的。引擎必须管理每个数据库的锁定文件。我不知道这种影响的程度。如果是我,我会创建一个新的后端数据库并从其他数据库导入表。然后制作前端的副本并重新链接到后端表。这将使您有机会直接检查性能影响。
对我而言,关系完整性应该是将表合并为一个后端的有力论据。
关于锁定,您不需要为常规DML(INSERT,UPDATE,DELETE)操作锁定整个后端数据库。数据库基础引擎支持更精细的锁定。还有悲观与机会主义的锁定 - 一旦你开始编辑一行就会发生锁定,或者在你保存更改的行之前推迟锁定。
如果慢速意味着无线网络,实际上“慢速网络”可能是最大的问题。访问仅在硬连线LAN上安全。
编辑:访问不适用于WAN网络环境。见Albert D. Kallal的this page。
答案 1 :(得分:0)
ms访问不适用于速度肯定较低的局域网或广域网。解决方案是使用客户端服务器数据库,例如Ms SQL Server或MySQL。 SQL Server女士比My SQL更好,但是它不是免费的。考虑将SQL Server女士用于大型项目。我再次说,MS访问仅对1台计算机有利,对计算机网络不利。