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