簡體   English   中英

如何保持兩個商品表同步,但要分開存放

[英]How do I keep two article tables synced, but keep stock separate

這可能是一個更具概念性的問題,但我找不到簡單的解決方案。

場景:兩家商店(例如“ M”和“ S”)。M是主數據庫並確定數據庫中的商品。每個商店都維護獨立的庫存。我將M的商品表復制到S,並將庫存分離到一個單獨的表中有共同的參考。

現在,當在M中添加新商品時,它們也到達S,但它們在S的庫存表中將沒有條目。 與刪除文章類似的問題。 可能的解決方案:

  • 每次請求新的(不存在測試的)商品時,我是否都會在S的庫存表中創建一個條目?

  • 我是否需要定期掃描以檢查是否缺少庫存條目。

有沒有更優雅的方法來解決這個問題?

注意:為了澄清,讓我解釋另一種方式:

M已經使用MySQL的復制機制將“ articles”表復制到了S。

問題是M和S都有各自M和S本地的“庫存”表。例如,將新產品(以M形式)添加到“商品”表並轉移到M和S時,通常的程序是什么? 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 ,可以通過為DB(* user_m *,* user_s *),並使用創建不同的用戶實現中號 REVOKE和/或GRANT來設置不同的訪問權限。


編輯:如果兩台服務器位於遙遠的站點上,則您可能能夠使用MySQL復制功能使兩個站點之間的一個或多個表保持同步。 這將需要兩個站點之間的網絡訪問。 就我自己而言,出於明顯的原因,我會考慮在兩個站點之間使用安全隧道。 最后,您可能仍必須在數據庫級別設置權限,以僅允許從一個站點插入,而不允許另一個站點插入。

作為“窮人”解決方案,您最終可以從一台服務器定期備份所需的表,以更新第二台服務器上的表。 mysqldump + cronjob的組合將是一個很好的起點。

就我自己而言,我將繼續使用MySQL復制 設置可能更復雜。 但這會更好地執行,更好地擴展並具有更低的延遲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM