这可能是一个更概念化的问题,但我找不到简单的解决方案。
场景:两个商店(比如“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/