2012-01-11 7 views
0

まず、例を挙げて説明します。 MySQLデータベース、テーブル3:複雑な依存関係のmysqlへの方法

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

だから、これは基本的な構造であり、最初の2つのテーブルの項目とコンテナである、第三のは基本的にコンテナ内にあるアイテムの数記憶するテーブルであり、アイテムの一種多くの異なる容器に入れることができる。私がする必要がどのような

: 取引:それらのすべては、トランザクションに関する他の情報と保存しなければならない、追加、削除、コンテナ

間で項目を移動します。ユーザがコンテナにいくつかのアイテムの追加トランザクションを追加した後、ユーザは後でそのトランザクションを削除することができ、アイテムを削除する必要があるので、それを保存する必要があります。削除でも同じことが起こります。id 3の5つのアイテムを持つ削除のトランザクションをID 2のコンテナに追加して後で削除すると、そのアイテムは元に戻されます。これはかなりシンプルですが、「動く」取引はちょっと複雑になり、これを行う正しい方法は何か分かりません。アイテムのIDとカウントを保存するだけです。

あなたのうちの何人かは既にこのシステムに類似したシステムを開発しなければならないかもしれませんが、これに対するいくつかのよりよい解決策を提案できますか?パフォーマンスは素晴らしいですが、ここでは信頼性が重要ではありません。最後の1つは、トランザクションが複数のアイテムを持つことができることです(実際には、通常、複数の異なるアイテムを管理する必要があります)。

ありがとうございました。私は達成したいことを説明してくれたことを願っています。

+0

は、我々は、データベースをこのように正規化することはできません - 1.項目 - ID; CONTAINER_ID;フィールド1;フィールド2; ....フィールドn; 2.コンテナID。フィールド1;フィールド2; .....フィールドn; **?** 削除カスケードと更新カスケードでのプラス使用。 – Acn

答えて

0

  • TRANSACTION_IDのAUTO_INCREMENT、container_id_add、container_id_sub、ITEM_IDは、カウント、ステータス= 0と何でもしたい(ユーザ名、タイムスタンプ、...)との取引のテーブルを作成するために、私のrecomendationは次のようになります
  • このテーブルに、トランザクションを実行または失敗し、ステータスに結果を書き込む挿入トリガーを作成します。
  • トランザクションの結果をアプリケーションで確認します。

これはなぜですか?

  • は構造container_id_addは、container_id_subは、ITEM_IDは、カウントが追加できます(container_id_sub =無効、例えば-1、0、NULL)、除去(container_id_add無効)、またはあなたが簡単にストアドプロシージャにそれをラップすることができます
  • 移動あなたがしたい、またはあなたがテーブルにアクセスすることができれば、どのようなトランザクションテーブル、あなたの使用パターン
  • に合った最適なチェンジである
関連する問題