2017-10-29 12 views
0

私たちは電子商取引システムを構築しており、商品ごとに入手可能な在庫の数を判断するには何が最善の方法かを判断する上で助けが必要です。MySQLビューを使用して実行中の合計を取得する

「products」、「products_in」、および「products_out」という表があるとします。 「products_in」は、当社の製品の数量を増やす(たとえば、卸売業者から製品を購入する)すべての取引を記録します。 「products_out」は、商品の数量を減らす(たとえば、顧客が商品を購入する)すべての取引を記録します。

私たちのアプリでは、 "products_in"と "products_out"テーブルのレコードの書き込み/更新よりも、当社の製品で利用可能な数量の取得が一般的です。これを考えると、「products_in」と「products_out」に依存し、利用可能な在庫を計算するMySQLビューの使用は、クエリを実行するたびにオンザフライで計算するより効率的ですか? 「products_in」または「products_out」に新しいレコードがあるたびに、ビューの値が再計算されますか?あるいは、私たちがそれを照会するたびに値を再計算します(私たちの場合はかなり高価になります)。

答えて

0

"products_in"と "products_out"に依存するMySQLビューを使用し、利用可能なストックをクエリするたびにオンザフライで計算するより効率的ですか? 「products_in」または「products_out」に新しいレコードがあるたびに、ビューの値が再計算されますか?あるいは、私たちがそれを照会するたびに値を再計算します(私たちの場合はかなり高価になります)。

のは、それぞれの場合のデシベルのステップを考えてみましょう:あなたは、製品の登場や外出するたびにavailable_stock計算する場合

ケース1productテーブル発言に保管し

  1. 製品が到着した場合、Insertproduct_inテーブルでクエリを実行します。製品が出荷された場合は、product_outテーブルInsertクエリ
  2. いずれの場合も、製品のavailable_stock列の更新クエリ。 (ここでは、10個の製品が来るか10個の製品が出ると仮定すると、10個の照会が実行されます) - 高価ですか?

ケース2あなたは、ビュー毎回でavailable_stockを計算し、データベースに保管されていない場合

  1. product_inからレコードと(のみあなたがavailable_stockをたいいくつかの製品のための)product_outテーブルは、いくつかの操作を行い取得数学、および見積もり在庫を表示する - 高価な?

私は個人的には、より少ないdbトランザクションを含み、ケース1は、株式を同期状態に保つためのトランザクションがたくさん含まれているため、ケース2になります。

脚注傍観で、私は間違いなくあなたは筋金入りの「オブジェクト指向プログラマであれば、あなたのデシベルのマッピングは間違いなくファンダメンタルズに違反していると思います。 Products_in,Products_outは、在庫/株取引(Father,MotherエンティティはPersonsなど)を記録するのと同じエンティティ(オブジェクト)であるため、1つの一般テーブルProductInOutDataにカプセル化する必要があります。

inまたはoutの値を持つ列挙型を追加できます。 inレコードとoutレコードを1つのテーブルに格納するだけで、可読性とアクセシビリティが向上するだけでなく、出入りする製品の計算が簡単になり、ケース2を軽量化できます。

関連する問題