2016-03-20 9 views
1

私はかなり経験の浅いSQL開発者ですが、一貫性のあるデータベースを持つために最善を尽くそうとしています。私が解決しようとしている問題は、私のシステムの上位層で行うことができますが、それが属している場所のようなものを処理することが最善であることを認識しています。特定のday_idがday_fromからday_toまでの所定の時間間隔内に含まれているかどうかを確認する方法

それでは、私が午前、私はしてもしなくてもよい定義された日に繰り返すことがオファーを格納した表である:

day_of_week 
--------------------------------------------- 
id day_name 
1 SUNDAY 
2 MONDAY 
3 TUESDAY 
4 WEDNESDAY 
5 THURSDAY 
6 FRIDAY 
7 SATURDAY 

offer 
--------------------------------------------- 
id day_id valid_from_day valid_until_day 
1 3  2016-03-01  2016-03-01 
2 6  2016-03-01  9999-03-01 

、ここでは私の問題である:

offer 
--------------------------------------------- 
id day_id valid_from_day valid_until_day 
1 2  2016-03-01  2016-03-01 
2 6  2016-03-01  9999-03-01 

day_id 2になり2016-03-012016-03-01の意味がないため、2016年1月または3月はTUESDAY = 3であり、MONDAY = 2ではありません。

私はこのテーブルに任意の間隔を保存できるようにしたいが、それは意味をなさないことを確認する必要があります。私が探しているのは、指定された間隔valid_from_dayvalid_until_dayにある日がday_idであるかどうかをチェックする方法です。これは実際には簡単なチェックでなければなりませんが、CONSTRAINTを使用できるかどうか、またはTRIGGERを使用する必要があるかどうか、そのように見えるかどうかはわかりません。

答えて

0

この場合、トリガーが最適だと思います。 day_idextract(dow from valid_from_day::date)extract(dow from valid_until_day::date)の間にある場合にのみ、UPDATEまたはINSERTが実行されるように記述します。これは、トリガ機能がどのように機能するかに自然に適合するはずです。

他にもバリエーションがあります。EXTRACTの機能を確認してください。

関連する問題