根据另一个属性创建具有一个属性的表

时间:2015-03-18 01:49:48

标签: database postgresql database-design

我刚开始学习PostgreSQL并想创建一个复杂的表,但不知道如何去做。我想创建一个包含namestart_dateend_date的表格 结束日期应为30 + start_date

1 个答案:

答案 0 :(得分:3)

通常,您以冗余方式存储功能相关的值。这只会使表格膨胀,并不像动态推导附加列那样可靠。

只需存储namestart_date。您可以创建VIEW动态添加end_date。或者只在需要的查询中使用表达式start_date + 30 AS end_date

CREATE TABLE foo (
  foo_id     serial PRIMARY KEY  -- add surrogate PK, names are rarely good for that
, foo        text NOT NULL       -- "name" is hardly ever a good name
, start_date date NOT NULL DEFAULT now()::date
);

CREATE VIEW foo_plus AS
SELECT *, start_date + 30 AS end_date
FROM   foo
ORDER  BY start_date;  -- optional

在Postgres中,您只需添加integer to a date即可添加天数。

关于serial

如果依赖值的计算昂贵(与这个简单的例子不同),请考虑MATERIALIZED VIEW