2012-01-11 50 views
0

假設我從一個例子開始。 MySQL數據庫,3個表:mysql中的複雜依賴關係,如何

items: id; lots of info about this item 
container: id; name 
items_container: id; item_id; container_id; count 

因此,這是基本的結構,前兩個表的項目和容器,第三個是表基本上商店中有多少項目在容器中,一個類型的項目可以在許多不同的容器中。

我需要做的: 交易:添加,刪除,移動集裝箱

他們都應該被存儲有關該交易的其他信息之間的項目。在用戶添加一些項目添加到容器的事務之後,它應該被存儲,因爲用戶可能以後刪除事務並且應該刪除項目。刪除也一樣 - 如果我們添加一個帶有ID爲3的5個項目的移除事務到ID爲2的容器,稍後將其刪除,則應該移回項目。這很簡單,但「移動」交易變得更加複雜,我不知道什麼是正確的方式來做到這一點,只需存儲物品ID和數量?

可能你們有些人不得不開發一些與此類似的系統,並可能提出一些更好的解決方案嗎?性能很好,但在可靠性方面並不那麼重要。最後一件事是交易可以有多個項目(實際上它通常會有多個不同的項目來管理)。

預先感謝您,我希望我解釋了我想達到的目標。

+0

我們不能將數據庫規範化這樣 - 1項 - ID; CONTAINER_ID; FIELD1;域2; .... field n; 2. container-id; FIELD1;字段2; ..... field n; **?** 另外使用刪除級聯和更新級聯; – Acn 2012-01-11 09:07:45

回答

0

我recomendation將

  • 創建TRANSACTION_ID AUTO_INCREMENT,container_id_add,container_id_sub,ITEM_ID,計數,狀態= 0和任何你想要的(用戶名,時間戳,...)
  • 一個交易表通過寫入此表使您的應用程序提交交易
  • 在此表上創建插入觸發器,該交易完成或失敗,將結果寫入狀態
  • 使您的應用程序檢查交易結果

這是爲什麼?

  • 結構container_id_add,container_id_sub,ITEM_ID,計數允許增加(container_id_sub =無效,例如-1,0,NULL),去除(container_id_add無效)或移動
  • 可以容易地換行到存儲過程如果你願意,也可以訪問表,任何適合您的使用模式
  • 的交易表是一個完美的changelog