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

标签 mysql database database-replication

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

场景:两个商店(比如“M”和“S”)。M 是主人,确定数据库中的商品。每个商店维护一个独立的库存。我将 M 的商品表复制到 S,我将库存分为具有共同引用的单独表格。

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

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

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

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

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

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

问题是 M 和 S 有每个 M 和 S 本地的“stock”表。例如,将新产品添加(在 M 中)到“articles”表时的正常程序是什么,并转移给S。现在有一个新条目在S的股票表中没有对应的条目。

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

最佳答案

当然,除非您在两个 不同的数据库服务器上有两个 数据库,为什么不简单地创建一个表articles 和引用它的表 stock。您可以添加 shop(最好是 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一个活生生的例子。

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


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

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

就我自己而言,我会插入 MySQL 复制。设置可能更复杂。但这会更好地执行、更好地扩展并且具有更低的延迟。

关于mysql - 如何保持两个文章表同步,但保持库存分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18036299/

相关文章:

mysql - 在 MySQL 中自定义排序的累积总和

php - 解析表(mysql, php)

c++ - C++ 的持久性解决方案(带有 SQL 数据库)?

java - 创建多对多关系

MySQL MASTER MASTER 复制,添加一个新的 Master 而不会停机

MySQL : data is not replicating

laravel - 针对数据库写入连接的 Eloquent 预加载关系

php - 从 MySQL 获取多行输出

mysql - 在表上生成报告的最佳方式

sql-server - SQL 服务器字段命名约定