使用外键定义持续时间的SQL

使用外键定义持续时间的SQL,sql,postgresql,datetime,timestamp,Sql,Postgresql,Datetime,Timestamp,我目前拥有的数据库的设计有两个不同的表,其中一个表中包含我需要的特定字段的信息 create table EventInfo ( id serial NOT NULL CHECK (id > 0), title LongNameValue NOT NULL, startingTime timestamp, duration primary key (id), foreign key (e_id) references Event(i

我目前拥有的数据库的设计有两个不同的表,其中一个表中包含我需要的特定字段的信息

create table EventInfo (
  id          serial NOT NULL CHECK (id > 0),
  title       LongNameValue NOT NULL,
  startingTime  timestamp,
  duration 
  primary key (id),
  foreign key (e_id) references Event(id)
);

create table Events (
  id          serial,
  endTime  timestamp,
  primary key (id),
};
我的问题是,


是否可以从
结束时间-开始时间
计算
持续时间
字段?还有,你会怎么做呢?我正在考虑使用
interval
。任何帮助都将不胜感激

计算列只能从同一表的列生成


使用两个不同的表是不可能的。在设计数据库时,应该记住,只有原始的规范化数据才能进入表中

当“计算”数据存储在表中时,可能会出现不一致的情况

计算出的数据应该进入视图、过程甚至应用程序级别


如果我是您,我会将endTime放在EventInfo表中,并使用计算的持续时间列构建一个视图。

您可以查看函数来完成此操作。如果你:

CREATE FUNCTION duration("EventInfo") RETURNS interval LANGUAGE SQL AS
    $$ SELECT .... $$;
然后你可以:

SELECT e.duration FROM "EventInfo" e;

它将按预期工作。

您使用的是什么数据库?另外,请发布您尝试过的查询。为什么要创建两个表?基于您的两个表,我认为您只能创建一个表,这就足够了。只需将endTime添加到EventInfo。有什么特别的原因让你做两张表吗?为什么开始时间和结束时间在不同的表中?对于单个
事件
行,如果有两个
事件信息
行具有不同的开始时间,这意味着什么?对于分配,我们要根据ERD设计创建数据库。我不知道为什么会是这样,把结束时间放在另一张桌子上没有任何意义。使用此模型,事件有一个结束时间,但有多个开始时间。如果活动有多个开始时间,你如何计算持续时间?嗯,可以和应该是不同的,但我听到了。您可以在PostgreSQL中执行此操作,但性能会有点烦人。