如何保持两个文章表同步,但保持库存分开

时间:2013-08-03 19:07:52

标签: mysql database database-replication

这可能是一个更具概念性的问题,但我找不到一个简单的解决方案。

场景:两个商店(比如'M'和'S').M是主人,决定数据库中的文章。每个人都有一个独立的股票。我有M的文章表复制到S,我把股票分成了一个带有共同参考的单独表格。

现在,当在M中添加新文章时,它们也会到达S,但是他们在S的股票表中没有条目。与删除文章类似的问题。可能的解决方案:

  • 每次发出请求时,我是否在S的库存表中创建一个条目 对于新的(未经测试的)文章?

  • 我是否必须定期扫描以检查缺少的库存条目。

难道没有更优雅的方法来解决这个问题吗?

注意:为了澄清,让我解释另一种方式:

M已经将'articles'表复制到S(使用MySQL的复制机制)。 这很好。

问题是M和S有'库存'表,这些表是每个M和S的本地表。例如,当一个新产品(在M中)添加到'articles'表时,正常的程序是什么,并转移到S.现在有一个新的条目,在S的股票表中没有相应的条目。

我猜这不是一个不寻常的情况 - 解决这个问题的正常程序是什么?

1 个答案:

答案 0 :(得分:0)

除非您在两个不同的数据库服务器上有两个数据库,否则为什么不简单地创建一个表articles和一个表{ {1}}引用它。您可以将 shop (理想情况下为stock)添加为后者的额外列。这样的事情:

shop_id

请参阅http://sqlfiddle.com/#!2/e6eca/5了解实时示例。

如果您确实需要限制在表CREATE TABLE articles(id int primary key not null, name char(20) not null); CREATE TABLE stock(article_id int not null, shop ENUM('M', 'S') not null, qty int not null, FOREIGN KEY(article_id) REFERENCES articles(id), UNIQUE(article_id, shop)); 上创建项目购买M ,可以通过为您的数据库创建不同的用户(* user_m *,* user_s *)和使用articles和/或REVOKE设置各种访问权限。


编辑:如果这两台服务器位于远程站点上,您可能可以使用MySQL replication功能来保持两个站点之间的一个或多个表同步。这将需要两个站点之间的网络访问。至于我自己,出于显而易见的原因,我会考虑在两个站点之间使用安全隧道。最后,您可能还必须在DB级别设置权限,以便只允许从一个站点插入而不允许从另一个站点插入。

作为“穷人”解决方案,您最终可以定期从一台服务器备份所需的表以更新第二台服务器上的表。 mysqldump + cronjob的组合将是一个很好的起点。

至于我自己,我会推动 MySQL复制。设置可能更复杂。但这样做会更好,扩展性更好,延迟更低。