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_id2016-03-012 对to没有意义,2016-03-01因为 2016 年 3 月 1 日或 3 月是 a TUESDAY = 3,而不是 a MONDAY = 2

我希望能够将任意间隔存储到此表中,但我必须确保它们有意义。我正在寻找的是一种检查给定间隔是否valid_from_day包含valid_until_day给定日期的方法day_id。这实际上应该是一个简单的检查,但我不确定我是否可以CONSTRAINT为此使用 a ,或者我是否必须为此使用 aTRIGGER以及它的外观。

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 回答