SQL使用外键定义持续时间

时间:2012-03-22 08:30:11

标签: 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(id)
);

create table Events (
  id          serial,
  endTime  timestamp,
  primary key (id),
};

我的问题是,

是否可以从duration计算endTime - startingtime字段?另外,你会怎么做呢?我在考虑使用interval。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

在设计数据库时,应记住只有原始的规范化数据才能进入表格。

当您将“计算”的数据存储在表格中时,您可能会陷入不一致的情况。

计算的数据应该进入视图,程序甚至是应用程序级别。

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

答案 1 :(得分:0)

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

不可能有两个不同的表

答案 2 :(得分:0)

您可以查看功能来执行此操作。如果你:

CREATE FUNCTION duration("EventInfo") RETURNS interval LANGUAGE SQL AS
    $$ SELECT .... $$;

然后你可以:

SELECT e.duration FROM "EventInfo" e;

它将按预期工作。