2013-08-03 46 views
1

這可能是一個更概念性的問題,但我找不到一個簡單的解決方案。如何保持兩個商品表同步,但保持單獨存貨

場景:兩個商店(比如'M'和'S'],M是主數據庫,確定數據庫中的文章,每個維護一個獨立的庫存,我有M的文章表複製到S,到一個帶有共同參考的單獨表格中

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

  • 如何建立S中的股票表項的請求一個新的(未測試existi取得 每次ng)文章?

  • 我是否必須定期掃描以檢查缺少的庫存條目。

難道沒有更好的方法來解決這個問題嗎?

注:要澄清,讓我解釋一下另一種方式:。

中號已經複製了「文章」表S(使用MySQL的複製機制 這工作得很好

的問題是,M和S有每個M和S都在本地的「庫存」表格。例如,當一個新產品被添加(以M爲單位)到'articles'表格並轉移到S時,正常程序是什麼。現在有新的在S的股票表中沒有相應的條目

我猜這不是一個不尋常的情況離子 - 解決這個問題的正常程序是什麼?

+0

問題1中B是誰? –

+0

什麼B :)對於錯字很抱歉。我首先想到我會用A和B,然後在輸入時使用M和S,我認爲這會更具描述性。 – jcoppens

回答

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作爲一個生動的例子。

如果你真的需要限制商店中號,可以通過爲您的數據庫創建不同的用戶(* user_m *,* user_s *),並使用REVOKE和/或GRANT設置可以實現對錶articles項目的創建各種訪問權限。


編輯:如果兩個服務器都在遙遠的網站,你可能能夠使用MySQL replication能力,以保持一個或多個表同步在兩個站點之間。這將需要兩個站點之間的網絡訪問。就我個人而言,由於顯而易見的原因,我會考慮在兩個站點之間使用安全隧道。最後,您可能還需要在數據庫級別設置權限才能允許從一個站點插入而不是另一個站點。

作爲一個「窮人的人」解決方案,您最終有可能定期備份來自一臺服務器的所需表格以更新第二臺服務器上的表格。 mysqldump + cronjob的組合將是一個很好的起點。

至於我自己,我會盡量推到MySQL複製。該設置可能更復雜。但是,這將表現更好,規模更好,延遲更低。

+0

謝謝,Sylvain。恐怕這是不可能的:兩家商店都運行他們自己的本地數據庫,因爲我們不能真正依賴它們之間的通信。我只使用複製來儘快更新S中的信息。 – jcoppens

+0

@jcoppens通過重新閱讀您的問題,我注意到當您談論複製時,您可能會談論「定製複製」。但是MySQL具有自己的複製功能,在您的特定情況下可能是一個有趣的選項。 –

+0

我在原帖中添加了一條註釋。我已經用MySQL的機制複製了主要的文章表。 – jcoppens