在不同的DBMS之间复制时如何避免数据冗余?

时间:2011-10-09 15:59:38

标签: mysql vb.net ms-access

我打算创建一个VB.net应用程序,用于从数据库(MS Access)检索数据并将其存储到Web服务器(MySQL数据库)。我心里真的很困惑。我打算使用任务调度程序,以便程序自动运行。我打算每隔5分钟设定一次。

如何避免数据冗余?

例如,我计划将销售时间延长5分钟,5分钟后我会再次进行销售。我认为在这种情况下会有冗余。我想问一下你对这个场景的想法:你会怎么处理它?<​​/ p>

4 个答案:

答案 0 :(得分:2)

如果可能的话,你应该避免在这种情况下使用两个数据库。

查找有关链接表管理器的信息 - Access使用的数据不必存储在Access中。

http://www.mssqltips.com/sqlservertip/1480/configure-microsoft-access-linked-tables-with-a-sql-server-database/

如果必须这样做,那么请参阅使用/升级到Access 2010并使用数据宏(触发器),将新的/已更改的数据放入临时表中,一旦复制了数据,就会清除这些临时表。

答案 1 :(得分:0)

您需要仔细考虑如何识别自上次同步周期以来发生变化的数据。如果每行数据都有一个“最后更新”时间戳(已编制索引),那么您可以编写一个进程,依次从每个表中选择最近更新的行。这对原始数据库(MS Access)来说往往有点沉重,而且你还需要在MySQL数据库中识别要替换的相应行(需要替换)。当然,您可以在不同的更改计划上放置不同的表。例如,美国各州的表格可能每年不会更改一次,但您的客户订单表(或SO问题和答案表)可能会在五分钟内发生很大变化。

有些DBMS有其他机制,特别是在自己的副本之间工作。某些DBMS还提供了一种有时称为“已更改数据捕获”(CDC)的机制,允许您获取已更改的数据。有时,在您拥有“事务日志”或“逻辑日志”(但不是CDC或类似内容)的DBMS中,您可以“挖掘”日志文件(或日志备份)以查找更改。但是,日志通常针对DBMS内部恢复过程进行了优化,而不是供您使用。

答案 2 :(得分:0)

嗯,很明显,您必须跟踪已经处理过的数据项(可能位于不同的元数据空间/数据存储区中)以避免冗余。应使用元数据过滤掉已从源处理的记录。元数据中的逻辑和需要取决于具体的用例。

答案 3 :(得分:0)

在评论中你说“我对如何用ODBC 替换原生表格一无所知”。

这是阻止您将数据合并到MySQL中的一个集合的唯一障碍吗?如果是这样,请尝试使用此建议来设置MySQL表的ODBC链接。

如果您还没有MySQL驱动程序,请安装它的ODBC驱动程序。最新版本可在此处获取:Download Connector/ODBC

从Windows ODBC数据源管理器为您的MySQL数据库创建DSN(数据源名称)。

创建一个新的Access数据库,并使用DSN创建链接,其中包含来自所提供的网页链接@jmoreno的指导。

如果链接表的Access名称与最初用于本机Access表的名称不同,请更改它们以匹配这些原始名称。

然后,您可以从旧的Access应用程序导入表单,查询,报告等。 理想情况下一切都会正常工作,因为Access会找到它需要的表名,而不关心它们是外部的而不是本机表。但是,您需要解决Access和MySQL之间的任何数据类型不兼容问题。

在使用Access应用程序的每台计算机上都需要MySQL ODBC驱动程序。就个人而言,我更愿意处理它,而不是在单独的Access和MySQL数据存储之间同步的挑战。 (YMMV)

当您准备好部署时,可以将ODBC链接转换为无DSN连接,这样客户端计算机就不需要每个都配置了DSN。有关详细说明,请参阅Access MVP的Doug Steele撰写的Using DSN-Less Connections