2016-06-19 3 views
0

これを考慮してください: 私は2つのテーブルを持っていますが、最初に "マシン"と2番目の "レンタル"です。私は "inRental"と呼ばれる機械にブール値の列を持っています。これはマシンがレンタルされていないときは0で、レンタルされていないときは1です。私はまた、マシンがまだレンタルされているときに0である "仕上げ"と呼ばれるレンタルでブール値の列を持っています。レンタルが終了したとき(私はレンタルの履歴を追跡したいのでレンタルのエントリを削除しません)ですから、私が望むのは、そのマシンの新しいレンタルエントリが 'レンタル'に挿入されたときに、 'machines.inRental'列を1に増分または設定することです。別のテーブルに挿入または更新するときの増分/減分カラム

UPDATE machines SET inRental=1 WHERE MachineID=:machineID 
同様

レンタルが終了したときに、私が欲しい:

UPDATE rentals SET finished=1 WHERE MachineID=:machineID 

を、これは私がしたいような場合

INSERT INTO rentals VALUES (0,:machineID,0) 

:私は私が新しいレンタルを作成するときにたとえば、

UPDATE machines SET inRental=0 WHERE MachineID=:machineID 

テーブルは次のとおりです。

RentalID MachineID finished ... 
..................................... 
1   5   1     
2   6   1     
3   7   0      


MachineID inRental ... 
......................... 
5   0        
6   0        
7   1         

これはトリガーで達成されると思いますが、どうですか?私はまたトリガーが悪いと聞いて、それを避ける方が良いです。より良い方法がありますか?私はそれがinRentalの列が冗長であり、私はちょうどジョインズをすることができると思うかもしれないが、私は多くの時間テーブル 'マシン'をサブクエリで他のテーブルと使用していると私はそれが少し効果的でないとジーンズサブクエリ、またはそうではありませんか?

+0

これは、少なくとも奇妙なデザインです。レンタルテーブルにStartDate列とEndDate列があり、現在の日付が範囲内に収まらないときは、マシンがレンタルされていないことがわかります。 –

+0

私はStartDateとEndDateを持っていますが、新しい賃貸借契約を締結すると、顧客は長期間(建設機械を借りて賃貸期間は借りて固定されていません)とにかく、私はEndDatesをインクリメントしたり、それを空のままにしてレンタルしていることを知ることができます。しかし、私はEndDateの近似が必要なので空のちょっと残しておくことは選択肢ではありません。このようにして、アプリケーションは私に思い出させることができます。私は複雑なものを少しは持っていますが、私たちはそれを必要としています。 –

+0

次に、2つの終了日があります.1つは概算で、もう1つは(3000年に設定されています)、マシンがレンタル中であるかどうかを知る役割を果たします。 – trincot

答えて

関連する問題