我刚开始学习PostgreSQL并想创建一个复杂的表,但不知道如何去做。我想创建一个包含name
,start_date
和end_date
的表格
结束日期应为30 + start_date
。
答案 0 :(得分:3)
通常,您不以冗余方式存储功能相关的值。这只会使表格膨胀,并不像动态推导附加列那样可靠。
只需存储name
和start_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
。