1

私はかなり経験の浅い SQL 開発者ですが、一貫したデータベースを持つために最善を尽くしています。私が解決しようとしている問題は、システムの上位レイヤーで実行できる可能性がありますが、それらが属する場所であるデータベースレイヤーで処理するのが最善であることを認識しています。

したがって、私が持っているのは、定義された日に繰り返される場合と繰り返されない場合があるオファーを格納するテーブルです。

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_id2 は、2016 年 3 月 1 日または 3 月がではなく であるため、 2016-03-01to には意味がありません。2016-03-01TUESDAY = 3MONDAY = 2

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

4

1 に答える 1

0

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

使用できる他のバリエーションがあります。 EXTRACT関数を確認してください。

于 2016-03-20T14:34:22.183 に答える