2015-03-31 71 views
1

我正在PHP/MySQL中構建一個應用程序。它包含2個數據庫。數據庫1用於臨時存儲來自最終用戶的訂單。用戶確認訂單後,將使用SELECT ... INSERT將其複製到數據庫2中。然後清理數據庫1中的表格,以便用戶可以按照新的順序進行處理。換句話說,在任何給定的時間,數據庫1中的表不會保持超過1個訂單。這兩個表分別包含訂單和相應的項目。表格結構在數據庫1和數據庫2中都是相同的。當屬於一個訂單的項目被轉移到數據庫2中的表格時,將會存在關鍵衝突。如何將數據複製到另一個表並避免衝突?

問題1:解決這個關鍵衝突的最好方法是什麼?

我試圖明確選擇除鍵外的列,但這並不能完全解決問題。 如果使用INSERT INTO db2.table(SELECT * FROM db1.table)查詢來傳輸此數據,而不是必須明確提及所有列,那就太好了。

此外,當用戶想要在將其轉儲到數據庫2後立即編輯當前記錄時,由於數據庫1和數據庫2中的表無法鏈接,因此這是不可能的。此外,該記錄可以插入數據庫2中兩次。

問題2:用戶仍然可以編輯當前記錄而不必退出菜單並在數據庫2的表中查找記錄?

問題3:如何避免在數據庫2的表中插入兩次相同的記錄?

由於項目的模塊化方法,選擇了2個數據庫的設計。此外,數據庫2與數據庫1分開,意味着它們不會干涉。而且,由於數據庫分爲兩部分,因此編寫兩個小塊而不是一個大塊比較容易。

回答

0

擁有2個數據庫並不是一個壞主意。

我會用兩個表概念之間的「外鍵」關係來處理這個問題。將db1記錄中的所有內容插入到db2中時,將新的「外鍵」字段添加到db2(db2_fkey),其中包含db1記錄中的「主鍵」。

通過這種方式,您可以讀取db2上的記錄,並使用db2_fkey將其關聯回db1上的記錄。您將能夠確定該記錄已從db1中清除。此外,您將可以在db2上使用db2_fkey字段中的相同值創建超過1條記錄。 MySQL中有一個外鍵的自動處理,你必須用這種方法手動編碼(如從兩個表中刪除記錄)。但這種關係方式應該回答你的應用問題。

+0

爲什麼有2個數據庫不是一個壞主意?在這種情況下,在任何給定時間在數據庫1中只有1條記錄。是否需要額外的努力手動將2個數據庫的所有變量鏈接到PHP代碼?使用一個數據庫不需要鏈接到其他數據庫,對吧?數據庫少=省力? – 2015-03-31 20:46:43

+0

我同意1個數據庫會更好。我認爲該項目的模塊化方法使得2數據庫設計成爲您的一項需求。 2數據庫並不是一個壞主意,因爲它仍然提供了一個可行的解決方案。是的,2個數據庫有更多的開銷,冗餘和設計/編碼工作。但是,正確地說,我建議的「外鍵」概念方法應該爲問題1,問題2和問題3提供強有力的答案。感謝評論,我喜歡考慮數據庫設計挑戰 - 祝您好運。 – 2015-04-01 15:08:44

相關問題