1

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

场景:两个店铺(比如'M'和'S']。M是master,决定数据库中的文章。每个人维护一个独立的库存。我有M的文章表复制到S,我将库存分离到一个单独的表中有一个共同的参考。

现在,当新文章添加到 M 中时,它们也会到达 S,但它们不会在 S 的库存表中存在条目。删除文章的类似问题。可能的解决方案:

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

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

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

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

M 已经将“articles”表复制到 S (使用 MySQL 的复制机制。这工作正常。

问题是 M 和 S 具有每个 M 和 S 本地的“库存”表。例如,当将新产品(在 M 中)添加到“文章”表中并转移到S. 现在有一个新条目,在 S 的股票表中没有相应的条目。

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

4

1 回答 1

0

当然,除非您有两个数据库位于两个不同的数据库服务器上,否则为什么不简单地创建一个表articles和一个stock引用它的表。您可以将商店(最好是shop_id)添加为后者的额外列。像这样的东西:

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));

请参阅http://sqlfiddle.com/#!2/e6eca/5以获取实时示例。

如果您确实需要限制在商店 M 上创建项目articles可以通过为您的数据库(*user_m*、*user_s*)创建不同的用户并使用REVOKE和/或GRANT设置各种访问权限来实现。


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

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

就我自己而言,我会推送到MySQL 复制。设置可能更复杂。但这会表现得更好,扩展性更好并且延迟更低。

于 2013-08-03T22:14:26.860 回答