Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 使用另一个表中的列添加CHECK约束_Postgresql_Constraints_Check Constraints - Fatal编程技术网

Postgresql 使用另一个表中的列添加CHECK约束

Postgresql 使用另一个表中的列添加CHECK约束,postgresql,constraints,check-constraints,Postgresql,Constraints,Check Constraints,我有两张桌子: 附表: idINT 每日日程安排idINT 开始时间戳 完成时间戳 每日时间表: idINT 日期日期 我想为计划添加一个约束。开始和计划。完成检查每日计划的值。日期。有没有一个简单的方法来实现这一点 大致如下: ALTER TABLE schedules ADD CONSTRAINT schedules_date_range_check CHECK (start = daily_schedules.date AND finish = daily_schedul

我有两张桌子:

附表:

  • idINT
  • 每日日程安排idINT
  • 开始时间戳
  • 完成时间戳

每日时间表:

  • idINT
  • 日期日期
我想为
计划添加一个约束。开始
计划。完成
检查
每日计划的值。日期
。有没有一个简单的方法来实现这一点

大致如下:

ALTER TABLE schedules 
   ADD CONSTRAINT schedules_date_range_check CHECK (start = daily_schedules.date AND finish = daily_schedules.date)

虽然在技术上有这样做的方法,但它不受支持,这是一个坏主意,因为它可能会导致无法恢复的转储


避免数据库中的冗余总是一个好主意,因此我建议您使用数据类型
time
start
finish
存储在
schedules
中,这是相对于相关
每日计划的
日期
理解的


只需添加
时间
日期
,瞧,你得到了一个
时间戳

听起来像是你想要一个(第二个)外键-如果你已经有了,为什么要复制信息?如果值应该总是相同的,您只需要一个表。@a\u horse\u与\u no\u name更具体。。表1有“开始”和“完成”日期时间列。表二有一个“日期”。我想确保“开始”和“完成”与表2的“日期”列在同一个日期下。@a_horse_和_no_名称更新了这些列。很抱歉造成混淆如果
每日计划
没有任何其他列,我将完全删除该表。然后添加一个
boolean
is_daily_schedule
schedules
和一个检查约束,确保
start=finish
如果
is_daily_schedule=true
是一个没有名字的马,我同意你的看法,但我们试图实现的是在这种情况下添加限制。。。不必删除表/列..我没有建议更改
每日计划
,只更改
计划
。但如果表设计得当,显式一致性检查通常就变得不必要了,因为默认情况下会保证一致性。我提议的更改有什么问题吗?
start
finish
已经有时间戳了。。对不起,我不清楚这件事。在应用层,我们有一个验证,它确保在创建/更新计划时间之前日期是正确的。但也有这样的情况被忽略了。我们已经为这个场景编写了测试,似乎没有一个失败。。。这使得我们考虑对这个问题进行约束。在应用程序层上,您仍然可以有时间戳-只需从另一个表中添加<代码>日期>代码>并将其呈现给用户。当然,这需要在您的数据库访问层中进行一些更改,但这种更改应该是非常本地化的,并且您可以获得更干净的数据模型。我们如何处理夜间计划的日期?是的。不要尝试对此使用检查约束,请使用触发器。